@@ -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
96105class 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