Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d98acac

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 c2b1ecb commit d98acac

File tree

1 file changed

+31
-9
lines changed

1 file changed

+31
-9
lines changed

manage_translation.py

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def recreate_tx_config():
6565
)
6666
)
6767
for resource in resources:
68-
slug = resource['slug']
68+
slug = resource.slug
6969
name = RESOURCE_NAME_MAP.get(slug, slug)
7070
if slug == '0':
7171
continue
@@ -94,6 +94,15 @@ def recreate_tx_config():
9494
)
9595

9696

97+
@dataclass
98+
class Resource:
99+
slug: str
100+
101+
@classmethod
102+
def from_api_v3_entry(cls, data: dict) -> Self:
103+
return cls(slug=data['attributes']['slug'])
104+
105+
97106
@dataclass
98107
class ResourceLanguageStatistics:
99108
name: str
@@ -113,7 +122,7 @@ def from_api_v3_entry(cls, data: dict) -> Self:
113122
)
114123

115124

116-
def _get_resources():
125+
def _get_from_api_v3_with_cursor(url: str, params: dict):
117126
from requests import get
118127

119128
resources = []
@@ -125,19 +134,32 @@ def _get_resources():
125134
transifex_api_key = os.getenv('TX_TOKEN')
126135
while True:
127136
response = get(
128-
'https://rest.api.transifex.com/resource_language_stats',
129-
params={
130-
'filter[project]': f'o:python-doc:p:{PROJECT_SLUG}', 'filter[language]': f'l:{LANGUAGE}'
131-
} | ({'page[cursor]': cursor} if cursor else {}),
137+
url,
138+
params=params | ({'page[cursor]': cursor} if cursor else {}),
132139
headers={'Authorization': f'Bearer {transifex_api_key}'}
133140
)
134141
response.raise_for_status()
135142
response_json = response.json()
136143
response_list = response_json['data']
137144
resources.extend(response_list)
138-
if 'next' not in response_json['links']:
145+
if not response_json['links'].get('next'): # for stats no key, for list resources null
139146
break
140147
cursor = unquote(search('page\[cursor]=([^&]*)', response_json['links']['next']).group(1))
148+
return resources
149+
150+
151+
def _get_resources():
152+
resources = _get_from_api_v3_with_cursor(
153+
'https://rest.api.transifex.com/resources', {'filter[project]': f'o:python-doc:p:{PROJECT_SLUG}'}
154+
)
155+
return [Resource.from_api_v3_entry(entry) for entry in resources]
156+
157+
158+
def _get_resource_language_stats():
159+
resources = _get_from_api_v3_with_cursor(
160+
'https://rest.api.transifex.com/resource_language_stats',
161+
{'filter[project]': f'o:python-doc:p:{PROJECT_SLUG}', 'filter[language]': f'l:{LANGUAGE}'}
162+
)
141163
return [ResourceLanguageStatistics.from_api_v3_entry(entry) for entry in resources]
142164

143165

@@ -163,9 +185,9 @@ def language_switcher(entry):
163185
def average(averages, weights):
164186
return sum([a * w for a, w in zip(averages, weights)]) / sum(weights)
165187

166-
resources = _get_resources()
188+
resources = _get_resource_language_stats()
167189
filtered = list(filter(language_switcher, resources))
168-
average_list = [e.translated_words / e.total_words for e in filtered]
190+
average_list = [e.translated_strings / e.total_strings for e in filtered]
169191
weights_list = [e.total_words for e in filtered]
170192

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

0 commit comments

Comments
 (0)