Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit f0a2edc

Browse filesBrowse files
committed
Use Transifex API v3 for generating .tx/config
Base on per string calculations for stats in README for backwards compatibility -- this gives 55.39 today vs 48.01 on per word calculations Old Transifex API stopped to work on Feb 13 at 10AM CET
1 parent dc4c13a commit f0a2edc
Copy full SHA for f0a2edc

File tree

Expand file treeCollapse file tree

1 file changed

+31
-9
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+31
-9
lines changed

‎manage_translation.py

Copy file name to clipboardExpand all lines: manage_translation.py
+31-9Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def recreate_tx_config():
6363
)
6464
)
6565
for resource in resources:
66-
slug = resource['slug']
66+
slug = resource.slug
6767
name = RESOURCE_NAME_MAP.get(slug, slug)
6868
if slug == '0':
6969
continue
@@ -92,6 +92,15 @@ def recreate_tx_config():
9292
)
9393

9494

95+
@dataclass
96+
class Resource:
97+
slug: str
98+
99+
@classmethod
100+
def from_api_v3_entry(cls, data: dict) -> Self:
101+
return cls(slug=data['attributes']['slug'])
102+
103+
95104
@dataclass
96105
class ResourceLanguageStatistics:
97106
name: str
@@ -111,7 +120,7 @@ def from_api_v3_entry(cls, data: dict) -> Self:
111120
)
112121

113122

114-
def _get_resources():
123+
def _get_from_api_v3_with_cursor(url: str, params: dict):
115124
from requests import get
116125

117126
resources = []
@@ -123,19 +132,32 @@ def _get_resources():
123132
transifex_api_key = os.getenv('TX_TOKEN')
124133
while True:
125134
response = get(
126-
'https://rest.api.transifex.com/resource_language_stats',
127-
params={
128-
'filter[project]': f'o:python-doc:p:{PROJECT_SLUG}', 'filter[language]': f'l:{LANGUAGE}'
129-
} | ({'page[cursor]': cursor} if cursor else {}),
135+
url,
136+
params=params | ({'page[cursor]': cursor} if cursor else {}),
130137
headers={'Authorization': f'Bearer {transifex_api_key}'}
131138
)
132139
response.raise_for_status()
133140
response_json = response.json()
134141
response_list = response_json['data']
135142
resources.extend(response_list)
136-
if 'next' not in response_json['links']:
143+
if not response_json['links'].get('next'): # for stats no key, for list resources null
137144
break
138145
cursor = unquote(search('page\[cursor]=([^&]*)', response_json['links']['next']).group(1))
146+
return resources
147+
148+
149+
def _get_resources():
150+
resources = _get_from_api_v3_with_cursor(
151+
'https://rest.api.transifex.com/resources', {'filter[project]': f'o:python-doc:p:{PROJECT_SLUG}'}
152+
)
153+
return [Resource.from_api_v3_entry(entry) for entry in resources]
154+
155+
156+
def _get_resource_language_stats():
157+
resources = _get_from_api_v3_with_cursor(
158+
'https://rest.api.transifex.com/resource_language_stats',
159+
{'filter[project]': f'o:python-doc:p:{PROJECT_SLUG}', 'filter[language]': f'l:{LANGUAGE}'}
160+
)
139161
return [ResourceLanguageStatistics.from_api_v3_entry(entry) for entry in resources]
140162

141163

@@ -161,9 +183,9 @@ def language_switcher(entry):
161183
def average(averages, weights):
162184
return sum([a * w for a, w in zip(averages, weights)]) / sum(weights)
163185

164-
resources = _get_resources()
186+
resources = _get_resource_language_stats()
165187
filtered = list(filter(language_switcher, resources))
166-
average_list = [e.translated_words / e.total_words for e in filtered]
188+
average_list = [e.translated_strings / e.total_strings for e in filtered]
167189
weights_list = [e.total_words for e in filtered]
168190

169191
language_switcher_status = average(average_list, weights=weights_list) * 100

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.