Skip to content

Commit dc2f733

Browse 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 2c904bc commit dc2f733

File tree

1 file changed

+31
-9
lines changed

1 file changed

+31
-9
lines changed

manage_translation.py

+31-9
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)