6565 },
6666}
6767
68- logger = logging .getLogger ('tox_runner ' )
68+ logger = logging .getLogger ('runner ' )
6969handler = logging .StreamHandler (sys .stdout )
7070log_formatter = logging .Formatter (fmt = '%(name)s [%(levelname)s] --- %(message)s ---' )
7171logger .setLevel (logging .INFO )
@@ -91,7 +91,7 @@ def fetch_resource_file_names(folder_name: str, file_extension: str) -> list[str
9191
9292
9393def fetch_config_file_names () -> list [str ]:
94- return [os .path .join (CURRENT_PATH , '../requirements.txt ' ), os .path .join (CURRENT_PATH , '../tox.ini ' )]
94+ return [os .path .join (CURRENT_PATH , '../pyproject.toml ' ), os .path .join (CURRENT_PATH , '../uv.lock ' )]
9595
9696def fetch_source_file_names (folder_path : str ) -> list [str ]:
9797 filenames = fetch_python_file_names (folder_path )
@@ -238,26 +238,31 @@ def compute_and_compare_checksums(check_type: str, folder_name: str, folder_file
238238
239239
240240
241- def get_serialize_command_to_run (previous_source_checksum : Optional [str ], current_sources_checksum : str , changed_serializers : List [str ]) -> Optional [List [str ]]:
242- """Determine the serialization command to run based on checksums and changed serializers.
241+ def get_serialize_command_to_run (previous_source_checksum : Optional [str ], current_sources_checksum : str , changed_serializers : List [str ]) -> Optional [List [List [ str ] ]]:
242+ """Determine the serialization commands to run based on checksums and changed serializers.
243243
244244 Args:
245245 previous_source_checksum: Previous checksum of source files
246246 current_sources_checksum: Current checksum of source files
247247 changed_serializers: List of serializers that have changed
248248
249249 Returns:
250- Command to run as list of strings , or None if no serialization needed
250+ List of commands to run sequentially as list of string lists , or None if no serialization needed
251251 """
252252 if previous_source_checksum != current_sources_checksum :
253253 # Serializer code has changed - run full serialization
254254 logger .info ('SERIALIZER CODE HAS CHANGED - STARTING FULL TYPESHED SERIALIZATION' )
255- return ['tox' , '-e' , 'serialize' ]
255+ return [
256+ ['uv' , 'run' , 'python' , '-m' , 'utils.folder_manager' ],
257+ ['uv' , 'run' , 'python' , '-m' , 'serializer.typeshed_serializer' ],
258+ ]
256259 elif changed_serializers :
257260 logger .info (f"STARTING SELECTIVE TYPESHED SERIALIZATION FOR: { ',' .join (changed_serializers )} " )
258- # Run selective serialization through tox environment
259261 serializers_arg = ',' .join (changed_serializers )
260- return ['tox' , '-e' , 'selective-serialize' , '--' , serializers_arg ]
262+ return [
263+ ['uv' , 'run' , 'python' , '-m' , 'utils.folder_manager' , serializers_arg ],
264+ ['uv' , 'run' , 'python' , '-m' , 'serializer.typeshed_serializer' , serializers_arg ],
265+ ]
261266 else :
262267 logger .info ('SKIPPING TYPESHED SERIALIZATION' )
263268 return None
@@ -276,33 +281,45 @@ def update_folder_checksums_for_changed_serializers(changed_serializers: List[st
276281 write_folder_checksum (folder_name , source_checksum , binary_checksum )
277282
278283
284+ def _run_serialize (commands : List [List [str ]], full_serialization : bool , changed_serializers : List [str ], dry_run : bool ) -> None :
285+ if dry_run :
286+ for cmd in commands :
287+ logger .info (f'DRY RUN: Would execute: { " " .join (cmd )} ' )
288+ return
289+ for cmd in commands :
290+ subprocess .run (cmd , check = True )
291+ if full_serialization :
292+ update_all_checksums ()
293+ else :
294+ update_folder_checksums_for_changed_serializers (changed_serializers )
295+
296+
297+ def _run_tests (dry_run : bool ) -> None :
298+ test_cmd = ['uv' , 'run' , 'python' , '-m' , 'pytest' , 'tests/' ]
299+ if dry_run :
300+ logger .info (f'DRY RUN: Would run: { " " .join (test_cmd )} ' )
301+ else :
302+ subprocess .run (test_cmd , check = True )
303+
304+
279305def main (skip_tests = False , fail_fast = False , dry_run = False ):
280- # Check if serializer source code has changed
281306 source_files = fetch_source_file_names (SERIALIZER_PATH )
282307 current_sources_checksum = compute_checksum (source_files , normalize_text_files )
283308 previous_sources_checksum = read_previous_checksum (SERIALIZER_SOURCE_CHECKSUM_FILE )
284- serializer_sources_changed = compute_and_compare_checksums ("SERIALIZER_SOURCE" , SERIALIZER_PATH , source_files , normalize_text_files , previous_sources_checksum )
309+ compute_and_compare_checksums ("SERIALIZER_SOURCE" , SERIALIZER_PATH , source_files , normalize_text_files , previous_sources_checksum )
285310
286- if serializer_sources_changed and fail_fast :
311+ if previous_sources_checksum != current_sources_checksum and fail_fast :
287312 raise RuntimeError ('INCONSISTENT SOURCES CHECKSUMS' )
288313
289314 changed_serializers = detect_required_serializations (fail_fast )
290- serialize_command_to_run = get_serialize_command_to_run (previous_sources_checksum , current_sources_checksum , changed_serializers )
315+ full_serialization = previous_sources_checksum != current_sources_checksum
316+ serialize_commands = get_serialize_command_to_run (previous_sources_checksum , current_sources_checksum , changed_serializers )
291317
292- # Execute or display the serialize command
293- if serialize_command_to_run :
294- if dry_run :
295- logger .info (f'DRY RUN: Would execute: { " " .join (serialize_command_to_run )} ' )
296- else :
297- _ = subprocess .run (serialize_command_to_run , check = True )
298- update_folder_checksums_for_changed_serializers (changed_serializers )
318+ if serialize_commands :
319+ _run_serialize (serialize_commands , full_serialization , changed_serializers , dry_run )
299320
300- # Run tests after serialization (unless skip_tests=True)
301321 if not skip_tests :
302- if dry_run :
303- logger .info ('DRY RUN: Would run test' )
304- else :
305- _ = subprocess .run (['tox' , '-e' , 'py314' ], check = True )
322+ _run_tests (dry_run )
306323
307324
308325if __name__ == '__main__' :
0 commit comments