@@ -65,7 +65,7 @@ def recreate_tx_config():
65
65
)
66
66
)
67
67
for resource in resources :
68
- slug = resource [ ' slug' ]
68
+ slug = resource . slug
69
69
name = RESOURCE_NAME_MAP .get (slug , slug )
70
70
if slug == '0' :
71
71
continue
@@ -94,6 +94,15 @@ def recreate_tx_config():
94
94
)
95
95
96
96
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
+
97
106
@dataclass
98
107
class ResourceLanguageStatistics :
99
108
name : str
@@ -113,7 +122,7 @@ def from_api_v3_entry(cls, data: dict) -> Self:
113
122
)
114
123
115
124
116
- def _get_resources ( ):
125
+ def _get_from_api_v3_with_cursor ( url : str , params : dict ):
117
126
from requests import get
118
127
119
128
resources = []
@@ -125,19 +134,32 @@ def _get_resources():
125
134
transifex_api_key = os .getenv ('TX_TOKEN' )
126
135
while True :
127
136
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 {}),
132
139
headers = {'Authorization' : f'Bearer { transifex_api_key } ' }
133
140
)
134
141
response .raise_for_status ()
135
142
response_json = response .json ()
136
143
response_list = response_json ['data' ]
137
144
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
139
146
break
140
147
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
+ )
141
163
return [ResourceLanguageStatistics .from_api_v3_entry (entry ) for entry in resources ]
142
164
143
165
@@ -163,9 +185,9 @@ def language_switcher(entry):
163
185
def average (averages , weights ):
164
186
return sum ([a * w for a , w in zip (averages , weights )]) / sum (weights )
165
187
166
- resources = _get_resources ()
188
+ resources = _get_resource_language_stats ()
167
189
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 ]
169
191
weights_list = [e .total_words for e in filtered ]
170
192
171
193
language_switcher_status = average (average_list , weights = weights_list ) * 100
0 commit comments