@@ -61,7 +61,7 @@ def recreate_tx_config():
61
61
'host = https://www.transifex.com\n ' ,
62
62
))
63
63
for resource in resources :
64
- slug = resource [ ' slug' ]
64
+ slug = resource . slug
65
65
name = RESOURCE_NAME_MAP .get (slug , slug )
66
66
if slug == '0' :
67
67
continue
@@ -86,6 +86,15 @@ def recreate_tx_config():
86
86
))
87
87
88
88
89
+ @dataclass
90
+ class Resource :
91
+ slug : str
92
+
93
+ @classmethod
94
+ def from_api_v3_entry (cls , data : dict ) -> Self :
95
+ return cls (slug = data ['attributes' ]['slug' ])
96
+
97
+
89
98
@dataclass
90
99
class ResourceLanguageStatistics :
91
100
name : str
@@ -105,7 +114,7 @@ def from_api_v3_entry(cls, data: dict) -> Self:
105
114
)
106
115
107
116
108
- def _get_resources ( ):
117
+ def _get_from_api_v3_with_cursor ( url : str , params : dict ):
109
118
from requests import get
110
119
resources = []
111
120
cursor = None
@@ -116,19 +125,32 @@ def _get_resources():
116
125
transifex_api_key = os .getenv ('TX_TOKEN' )
117
126
while True :
118
127
response = get (
119
- 'https://rest.api.transifex.com/resource_language_stats' ,
120
- params = {
121
- 'filter[project]' : f'o:python-doc:p:{ PROJECT_SLUG } ' , 'filter[language]' : f'l:{ LANGUAGE } '
122
- } | ({'page[cursor]' : cursor } if cursor else {}),
128
+ url ,
129
+ params = params | ({'page[cursor]' : cursor } if cursor else {}),
123
130
headers = {'Authorization' : f'Bearer { transifex_api_key } ' }
124
131
)
125
132
response .raise_for_status ()
126
133
response_json = response .json ()
127
134
response_list = response_json ['data' ]
128
135
resources .extend (response_list )
129
- if 'next' not in response_json ['links' ]:
136
+ if not response_json ['links' ]. get ( 'next' ): # for stats no key, for list resources null
130
137
break
131
138
cursor = unquote (search ('page\[cursor]=([^&]*)' , response_json ['links' ]['next' ]).group (1 ))
139
+ return resources
140
+
141
+
142
+ def _get_resources ():
143
+ resources = _get_from_api_v3_with_cursor (
144
+ 'https://rest.api.transifex.com/resources' , {'filter[project]' : f'o:python-doc:p:{ PROJECT_SLUG } ' }
145
+ )
146
+ return [Resource .from_api_v3_entry (entry ) for entry in resources ]
147
+
148
+
149
+ def _get_resource_language_stats ():
150
+ resources = _get_from_api_v3_with_cursor (
151
+ 'https://rest.api.transifex.com/resource_language_stats' ,
152
+ {'filter[project]' : f'o:python-doc:p:{ PROJECT_SLUG } ' , 'filter[language]' : f'l:{ LANGUAGE } ' }
153
+ )
132
154
return [ResourceLanguageStatistics .from_api_v3_entry (entry ) for entry in resources ]
133
155
134
156
@@ -154,9 +176,9 @@ def language_switcher(entry):
154
176
def average (averages , weights ):
155
177
return sum ([a * w for a , w in zip (averages , weights )]) / sum (weights )
156
178
157
- resources = _get_resources ()
179
+ resources = _get_resource_language_stats ()
158
180
filtered = list (filter (language_switcher , resources ))
159
- average_list = [e .translated_words / e .total_words for e in filtered ]
181
+ average_list = [e .translated_strings / e .total_strings for e in filtered ]
160
182
weights_list = [e .total_words for e in filtered ]
161
183
162
184
language_switcher_status = average (average_list , weights = weights_list ) * 100
0 commit comments