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