... |
... |
@@ -103,10 +103,10 @@ class WeblateMetadata: |
103
|
103
|
# Expect the final structure to be:
|
104
|
104
|
# {
|
105
|
105
|
# template: {
|
106
|
|
- # "component-name": str, # Used for API translations query.
|
|
106
|
+ # "translations-url": str, # Used for API translations query.
|
107
|
107
|
# "translations": {
|
108
|
108
|
# filename: {
|
109
|
|
- # "language-code": str, # Used for API units query.
|
|
109
|
+ # "units-url": str, # Used for API units query.
|
110
|
110
|
# "units": {
|
111
|
111
|
# context: {
|
112
|
112
|
# "translated": bool,
|
... |
... |
@@ -130,9 +130,8 @@ class WeblateMetadata: |
130
|
130
|
with urllib.request.urlopen(weblate_request, timeout=20) as response:
|
131
|
131
|
return json.load(response)
|
132
|
132
|
|
133
|
|
- def _get_from_weblate(self, request):
|
|
133
|
+ def _get_from_weblate(self, url):
|
134
|
134
|
ret = []
|
135
|
|
- url = "https://hosted.weblate.org/api/" + request
|
136
|
135
|
while url:
|
137
|
136
|
response = self._get_weblate_response(url)
|
138
|
137
|
# Continue to fetch the next page, if it is present.
|
... |
... |
@@ -146,10 +145,12 @@ class WeblateMetadata: |
146
|
145
|
if self._components is None:
|
147
|
146
|
self._components = {
|
148
|
147
|
comp["template"]: {
|
149
|
|
- "name": comp["slug"],
|
150
|
148
|
"translations": None,
|
|
149
|
+ "translations-url": comp["translations_url"],
|
151
|
150
|
}
|
152
|
|
- for comp in self._get_from_weblate("projects/tor/components/")
|
|
151
|
+ for comp in self._get_from_weblate(
|
|
152
|
+ "https://hosted.weblate.org/api/projects/tor/components/"
|
|
153
|
+ )
|
153
|
154
|
if comp["template"]
|
154
|
155
|
}
|
155
|
156
|
return self._components
|
... |
... |
@@ -160,16 +161,12 @@ class WeblateMetadata: |
160
|
161
|
self.logger.warning(f"No component in weblate for {template}.")
|
161
|
162
|
return None
|
162
|
163
|
if component["translations"] is None:
|
163
|
|
- comp_name = component["name"]
|
164
|
164
|
component["translations"] = {
|
165
|
165
|
trans["filename"]: {
|
166
|
|
- "component-name": comp_name,
|
167
|
|
- "language-code": trans["language"]["code"],
|
168
|
166
|
"units": None,
|
|
167
|
+ "units-url": trans["units_list_url"],
|
169
|
168
|
}
|
170
|
|
- for trans in self._get_from_weblate(
|
171
|
|
- f"components/tor/{comp_name}/translations/"
|
172
|
|
- )
|
|
169
|
+ for trans in self._get_from_weblate(component["translations-url"])
|
173
|
170
|
}
|
174
|
171
|
return component["translations"]
|
175
|
172
|
|
... |
... |
@@ -182,15 +179,11 @@ class WeblateMetadata: |
182
|
179
|
self.logger.warning(f"No translation in weblate for {file}.")
|
183
|
180
|
return None
|
184
|
181
|
if translation["units"] is None:
|
185
|
|
- comp_name = translation["component-name"]
|
186
|
|
- lang_code = translation["language-code"]
|
187
|
182
|
translation["units"] = {
|
188
|
183
|
unit["context"]: {
|
189
|
184
|
"translated": unit["translated"],
|
190
|
185
|
}
|
191
|
|
- for unit in self._get_from_weblate(
|
192
|
|
- f"translations/tor/{comp_name}/{lang_code}/units/"
|
193
|
|
- )
|
|
186
|
+ for unit in self._get_from_weblate(translation["units-url"])
|
194
|
187
|
}
|
195
|
188
|
return translation["units"]
|
196
|
189
|
|