@@ -63,7 +63,7 @@ def recreate_tx_config():
63
63
)
64
64
)
65
65
for resource in resources :
66
- slug = resource [ ' slug' ]
66
+ slug = resource . slug
67
67
name = RESOURCE_NAME_MAP .get (slug , slug )
68
68
if slug == '0' :
69
69
continue
@@ -92,6 +92,15 @@ def recreate_tx_config():
92
92
)
93
93
94
94
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
+
95
104
@dataclass
96
105
class ResourceLanguageStatistics :
97
106
name : str
@@ -111,7 +120,7 @@ def from_api_v3_entry(cls, data: dict) -> Self:
111
120
)
112
121
113
122
114
- def _get_resources ( ):
123
+ def _get_from_api_v3_with_cursor ( url : str , params : dict ):
115
124
from requests import get
116
125
117
126
resources = []
@@ -123,19 +132,32 @@ def _get_resources():
123
132
transifex_api_key = os .getenv ('TX_TOKEN' )
124
133
while True :
125
134
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 {}),
130
137
headers = {'Authorization' : f'Bearer { transifex_api_key } ' }
131
138
)
132
139
response .raise_for_status ()
133
140
response_json = response .json ()
134
141
response_list = response_json ['data' ]
135
142
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
137
144
break
138
145
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
+ )
139
161
return [ResourceLanguageStatistics .from_api_v3_entry (entry ) for entry in resources ]
140
162
141
163
@@ -161,9 +183,9 @@ def language_switcher(entry):
161
183
def average (averages , weights ):
162
184
return sum ([a * w for a , w in zip (averages , weights )]) / sum (weights )
163
185
164
- resources = _get_resources ()
186
+ resources = _get_resource_language_stats ()
165
187
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 ]
167
189
weights_list = [e .total_words for e in filtered ]
168
190
169
191
language_switcher_status = average (average_list , weights = weights_list ) * 100
0 commit comments