ScriptCollection 3.5.94__py3-none-any.whl → 3.5.96__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -33,7 +33,7 @@ from .ProgramRunnerBase import ProgramRunnerBase
33
33
  from .ProgramRunnerPopen import ProgramRunnerPopen
34
34
  from .ProgramRunnerEpew import ProgramRunnerEpew, CustomEpewArgument
35
35
 
36
- version = "3.5.94"
36
+ version = "3.5.96"
37
37
  __version__ = version
38
38
 
39
39
 
@@ -1360,24 +1360,24 @@ class TasksForCommonProjectStructure:
1360
1360
  repository_folder = GeneralUtilities.resolve_relative_path("..", codeunit_folder)
1361
1361
  dependent_codeunit_folder = os.path.join(repository_folder, dependent_codeunit_name).replace("\\", "/")
1362
1362
  t = TasksForCommonProjectStructure()
1363
- sbom_file = f"{codeunitname}/Other/Artifacts/BOM/{codeunitname}.{t.get_version_of_codeunit_folder(codeunit_folder)}.sbom.xml"
1364
- dependent_sbom_file = f"{dependent_codeunit_name}/Other/Artifacts/BOM/{dependent_codeunit_name}.{t.get_version_of_codeunit_folder(dependent_codeunit_folder)}.sbom.xml"
1363
+ sbom_file = f"{repository_folder}/{codeunitname}/Other/Artifacts/BOM/{codeunitname}.{t.get_version_of_codeunit_folder(codeunit_folder)}.sbom.xml"
1364
+ dependent_sbom_file = f"{repository_folder}/{dependent_codeunit_name}/Other/Artifacts/BOM/{dependent_codeunit_name}.{t.get_version_of_codeunit_folder(dependent_codeunit_folder)}.sbom.xml"
1365
1365
  self.merge_sbom_file(repository_folder, dependent_sbom_file, sbom_file)
1366
1366
 
1367
1367
  @GeneralUtilities.check_arguments
1368
- def merge_sbom_file(self, repository_folder: str, source_sbom_file: str, target_sbom_file: str) -> None:
1369
- GeneralUtilities.assert_file_exists(os.path.join(repository_folder, source_sbom_file))
1370
- GeneralUtilities.assert_file_exists(os.path.join(repository_folder, target_sbom_file))
1371
- target_original_sbom_file = os.path.dirname(target_sbom_file)+"/"+os.path.basename(target_sbom_file)+".original.xml"
1372
- os.rename(os.path.join(repository_folder, target_sbom_file), os.path.join(repository_folder, target_original_sbom_file))
1368
+ def merge_sbom_file(self, repository_folder: str, source_sbom_file_relative: str, target_sbom_file_relative: str) -> None:
1369
+ GeneralUtilities.assert_file_exists(os.path.join(repository_folder, source_sbom_file_relative))
1370
+ GeneralUtilities.assert_file_exists(os.path.join(repository_folder, target_sbom_file_relative))
1371
+ target_original_sbom_file_relative = os.path.dirname(target_sbom_file_relative)+"/"+os.path.basename(target_sbom_file_relative)+".original.xml"
1372
+ os.rename(os.path.join(repository_folder, target_sbom_file_relative), os.path.join(repository_folder, target_original_sbom_file_relative))
1373
1373
 
1374
1374
  self.ensure_cyclonedxcli_is_available(repository_folder)
1375
1375
  cyclonedx_exe = os.path.join(repository_folder, "Other/Resources/CycloneDXCLI/cyclonedx-cli")
1376
1376
  if GeneralUtilities.current_system_is_windows():
1377
1377
  cyclonedx_exe = cyclonedx_exe+".exe"
1378
- self.__sc.run_program("cyclonedx_exe", f"merge --input-files {source_sbom_file} {target_original_sbom_file} --output-file {target_sbom_file}")
1379
- GeneralUtilities.ensure_file_does_not_exist(os.path.join(repository_folder, target_original_sbom_file))
1380
- self.__sc.format_xml_file(target_original_sbom_file)
1378
+ self.__sc.run_program(cyclonedx_exe, f"merge --input-files {source_sbom_file_relative} {target_original_sbom_file_relative} --output-file {target_sbom_file_relative}", repository_folder)
1379
+ GeneralUtilities.ensure_file_does_not_exist(os.path.join(repository_folder, target_original_sbom_file_relative))
1380
+ self.__sc.format_xml_file(os.path.join(repository_folder, target_sbom_file_relative))
1381
1381
 
1382
1382
  @GeneralUtilities.check_arguments
1383
1383
  def standardized_tasks_build_for_docker_project_with_additional_build_arguments(self, build_script_file: str, target_environment_type: str, verbosity: int, commandline_arguments: list[str], custom_arguments: dict[str, str]) -> None:
@@ -1486,8 +1486,8 @@ class TasksForCommonProjectStructure:
1486
1486
  @GeneralUtilities.check_arguments
1487
1487
  def standardized_tasks_do_common_tasks(self, common_tasks_scripts_file: str, codeunit_version: str, verbosity: int, targetenvironmenttype: str, clear_artifacts_folder: bool, additional_arguments_file: str, assume_dependent_codeunits_are_already_built: bool, commandline_arguments: list[str]) -> None:
1488
1488
  additional_arguments_file = self.get_additionalargumentsfile_from_commandline_arguments(commandline_arguments, additional_arguments_file)
1489
- target_environmenttype = self.get_targetenvironmenttype_from_commandline_arguments(commandline_arguments, targetenvironmenttype)
1490
- assume_dependent_codeunits_are_already_built = self.get_assume_dependent_codeunits_are_already_built_from_commandline_arguments(commandline_arguments, assume_dependent_codeunits_are_already_built)
1489
+ target_environmenttype = self.get_targetenvironmenttype_from_commandline_arguments(commandline_arguments, targetenvironmenttype)#pylint: disable=unused-variable
1490
+ # assume_dependent_codeunits_are_already_built = self.get_assume_dependent_codeunits_are_already_built_from_commandline_arguments(commandline_arguments, assume_dependent_codeunits_are_already_built)
1491
1491
  if commandline_arguments is None:
1492
1492
  raise ValueError('The "commandline_arguments"-parameter is not defined.')
1493
1493
  if len(commandline_arguments) == 0:
@@ -1587,8 +1587,8 @@ class TasksForCommonProjectStructure:
1587
1587
  GeneralUtilities.ensure_directory_does_not_exist(artifacts_folder)
1588
1588
 
1589
1589
  # Get artifacts from dependent codeunits
1590
- if assume_dependent_codeunits_are_already_built:
1591
- self.build_dependent_code_units(repository_folder, codeunit_name, verbosity, target_environmenttype, additional_arguments_file, commandline_arguments)
1590
+ # if assume_dependent_codeunits_are_already_built:
1591
+ # self.build_dependent_code_units(repository_folder, codeunit_name, verbosity, target_environmenttype, additional_arguments_file, commandline_arguments)
1592
1592
  self.copy_artifacts_from_dependent_code_units(repository_folder, codeunit_name)
1593
1593
 
1594
1594
  # Update codeunit-version
@@ -2350,6 +2350,7 @@ class TasksForCommonProjectStructure:
2350
2350
  command_with_args = f"{command_with_args} {{{{.CLI_ARGS}}}}"
2351
2351
  lines.append(f" {name}:")
2352
2352
  lines.append(f' desc: "{description}"')
2353
+ lines.append(' silent: true')
2353
2354
  lines.append(f' dir: "{cwd}"')
2354
2355
  lines.append(" cmds:")
2355
2356
  lines.append(f" - {command_with_args}")
@@ -2449,7 +2450,19 @@ class TasksForCommonProjectStructure:
2449
2450
  GeneralUtilities.copy_content_of_folder(ca_source_folder, ca_target_folder)
2450
2451
 
2451
2452
  @GeneralUtilities.check_arguments
2452
- def get_sorted_codeunits(self, codeunits=dict[str, set[str]]) -> list[str]:
2453
+ def get_sorted_codeunits(self, repository_folder: str) -> list[str]:
2454
+ codeunits_with_dependent_codeunits: dict[str, set[str]] = dict[str, set[str]]()
2455
+ subfolders = GeneralUtilities.get_direct_folders_of_folder(repository_folder)
2456
+ for subfolder in subfolders:
2457
+ codeunit_name: str = os.path.basename(subfolder)
2458
+ codeunit_file = os.path.join(subfolder, f"{codeunit_name}.codeunit.xml")
2459
+ if os.path.exists(codeunit_file):
2460
+ codeunits_with_dependent_codeunits[codeunit_name] = self.get_dependent_code_units(codeunit_file)
2461
+ sorted_codeunits = self._internal_get_sorted_codeunits_by_dict(codeunits_with_dependent_codeunits)
2462
+ return sorted_codeunits
2463
+
2464
+ @GeneralUtilities.check_arguments
2465
+ def _internal_get_sorted_codeunits_by_dict(self, codeunits=dict[str, set[str]]) -> list[str]:
2453
2466
  result_typed = list(TopologicalSorter(codeunits).static_order())
2454
2467
  result = list()
2455
2468
  for item in result_typed:
@@ -2492,73 +2505,75 @@ class TasksForCommonProjectStructure:
2492
2505
  self.__sc.assert_is_git_repository(repository_folder)
2493
2506
  repository_folder = GeneralUtilities.resolve_relative_path_from_current_working_directory(repository_folder)
2494
2507
  codeunits = self.get_codeunits(repository_folder, False)
2508
+ project_version = self.get_version_of_project(repository_folder)
2509
+
2510
+ now = datetime.now()
2511
+ if not self.__suport_information_exists(repository_folder, project_version):
2512
+ support_time = timedelta(days=365*2+30*3+1) # TODO make this configurable
2513
+ until = now + support_time
2514
+ until_day = datetime(until.year, until.month, until.day, 0, 0, 0)
2515
+ self.mark_current_version_as_supported(repository_folder, project_version, now, until_day)
2516
+
2517
+ project_resources_folder = os.path.join(repository_folder, "Other", "Scripts")
2518
+ PrepareBuildCodeunits_script_name = "PrepareBuildCodeunits.py"
2519
+ prepare_build_codeunits_scripts = os.path.join(project_resources_folder, PrepareBuildCodeunits_script_name)
2520
+
2521
+ if do_git_clean_when_no_changes:
2522
+ self.__sc.run_program("git", "clean -dfx", repository_folder)
2523
+ if os.path.isfile(prepare_build_codeunits_scripts):
2524
+ GeneralUtilities.write_message_to_stdout(f'Run "{PrepareBuildCodeunits_script_name}"')
2525
+ result = self.__sc.run_program("python", f"{PrepareBuildCodeunits_script_name}", project_resources_folder, throw_exception_if_exitcode_is_not_zero=False, print_live_output=True)
2526
+ if result[0] != 0:
2527
+ raise ValueError(f"PrepareBuildCodeunits.py resulted in exitcode {result[0]}.")
2528
+
2529
+ self.__do_repository_checks(repository_folder, project_version)
2495
2530
  self.build_specific_codeunits(repository_folder, codeunits, verbosity, target_environmenttype, additional_arguments_file, is_pre_merge, export_target_directory, False, commandline_arguments, do_git_clean_when_no_changes, note)
2496
2531
 
2497
2532
  @GeneralUtilities.check_arguments
2498
- def build_specific_codeunits(self, repository_folder: str, codeunits: list[str], verbosity: int = 1, target_environmenttype: str = "QualityCheck", additional_arguments_file: str = None, is_pre_merge: bool = False, export_target_directory: str = None, assume_dependent_codeunits_are_already_built: bool = True, commandline_arguments: list[str] = [], do_git_clean_when_no_changes: bool = False, note: str = None) -> None:
2533
+ def build_specific_codeunits(self, repository_folder: str, codeunits: list[str], verbosity: int = 1, target_environmenttype: str = "QualityCheck", additional_arguments_file: str = None, is_pre_merge: bool = False, export_target_directory: str = None, assume_dependent_codeunits_are_already_built: bool = True, commandline_arguments: list[str] = [], do_git_clean_when_no_changes: bool = False, note: str = None, check_for_new_files: bool = True) -> None:
2534
+ codeunits_list = {", ".join(codeunits)}
2499
2535
  if verbosity > 2:
2500
- GeneralUtilities.write_message_to_stdout(f"Start building codeunits for repository '{repository_folder}'...")
2536
+ GeneralUtilities.write_message_to_stdout(f"Start building codeunits ({codeunits_list}) in repository '{repository_folder}'...")
2501
2537
  self.__sc.assert_is_git_repository(repository_folder)
2502
2538
  self.__check_target_environmenttype(target_environmenttype)
2503
2539
  repository_folder = GeneralUtilities.resolve_relative_path_from_current_working_directory(repository_folder)
2504
- repository_name = os.path.dirname(repository_folder)
2540
+ repository_name = os.path.basename(repository_folder)
2505
2541
  contains_uncommitted_changes_at_begin = self.__sc.git_repository_has_uncommitted_changes(repository_folder)
2506
2542
  if contains_uncommitted_changes_at_begin:
2507
2543
  if is_pre_merge:
2508
2544
  raise ValueError(f'Repository "{repository_folder}" has uncommitted changes.')
2509
- else:
2510
- if do_git_clean_when_no_changes:
2511
- self.__sc.run_program("git", "clean -dfx", repository_folder)
2512
- subfolders = [os.path.join(repository_folder, codeunit) for codeunit in codeunits]
2545
+ codeunit_subfolders = [os.path.join(repository_folder, codeunit) for codeunit in codeunits]
2513
2546
  codeunits_with_dependent_codeunits: dict[str, set[str]] = dict[str, set[str]]()
2514
2547
 
2515
- project_resources_folder = os.path.join(repository_folder, "Other", "Scripts")
2516
- PrepareBuildCodeunits_script_name = "PrepareBuildCodeunits.py"
2517
- prepare_build_codeunits_scripts = os.path.join(project_resources_folder, PrepareBuildCodeunits_script_name)
2518
- if os.path.isfile(prepare_build_codeunits_scripts):
2519
- GeneralUtilities.write_message_to_stdout(f'Run "{PrepareBuildCodeunits_script_name}"')
2520
- result = self.__sc.run_program("python", f"{PrepareBuildCodeunits_script_name}", project_resources_folder, throw_exception_if_exitcode_is_not_zero=False, print_live_output=True)
2521
- if result[0] != 0:
2522
- raise ValueError(f"PrepareBuildCodeunits.py resulted in exitcode {result[0]}.")
2523
-
2524
- for subfolder in subfolders:
2548
+ for subfolder in codeunit_subfolders:
2525
2549
  codeunit_name: str = os.path.basename(subfolder)
2526
2550
  codeunit_file = os.path.join(subfolder, f"{codeunit_name}.codeunit.xml")
2527
- if os.path.exists(codeunit_file):
2528
- codeunits_with_dependent_codeunits[codeunit_name] = self.get_dependent_code_units(codeunit_file)
2529
- else:
2530
- raise ValueError(f"{repository_folder} does not have a codeunit with name {codeunit_name}.")
2531
- sorted_codeunits = self.get_sorted_codeunits(codeunits_with_dependent_codeunits)
2551
+ GeneralUtilities.assert_condition(os.path.exists(codeunit_file), f"Codeunit-file '{codeunit_file}' does nost exist.")
2552
+ codeunits_with_dependent_codeunits[codeunit_name] = self.get_dependent_code_units(codeunit_file)
2553
+ sorted_codeunits = self.get_sorted_codeunits(repository_folder)
2554
+ sorted_codeunits = [codeunit for codeunit in sorted_codeunits if codeunit in codeunits]
2532
2555
  project_version = self.get_version_of_project(repository_folder)
2533
2556
 
2534
- now = datetime.now()
2535
2557
  message = f"Build codeunits in product {repository_name}..."
2536
2558
  if note is not None:
2537
2559
  message = f"{message} ({note})"
2538
2560
  GeneralUtilities.write_message_to_stdout(message)
2539
2561
 
2540
- if not self.__suport_information_exists(repository_folder, project_version):
2541
- support_time = timedelta(days=365*2+30*3+1) # TODO make this configurable
2542
- until = now + support_time
2543
- until_day = datetime(until.year, until.month, until.day, 0, 0, 0)
2544
- self.mark_current_version_as_supported(repository_folder, project_version, now, until_day)
2545
-
2546
2562
  if len(sorted_codeunits) == 0:
2547
2563
  raise ValueError(f'No codeunit found in subfolders of "{repository_folder}".')
2548
2564
  else:
2549
2565
  if verbosity > 1:
2550
- GeneralUtilities.write_message_to_stdout(f"Attempt to build codeunits for version {project_version} in the following order:")
2566
+ GeneralUtilities.write_message_to_stdout(f"Attempt to build codeunits ({codeunits_list}) for project version {project_version} in the following order:")
2551
2567
  i = 0
2552
2568
  for codeunit in sorted_codeunits:
2553
2569
  i = i+1
2554
2570
  GeneralUtilities.write_message_to_stdout(f"{i}.: {codeunit}")
2555
- self.__do_repository_checks(repository_folder, project_version)
2556
2571
  for codeunit in sorted_codeunits:
2557
2572
  GeneralUtilities.write_message_to_stdout(GeneralUtilities.get_line())
2558
2573
  self.__build_codeunit(os.path.join(repository_folder, codeunit), verbosity, target_environmenttype, additional_arguments_file, is_pre_merge, assume_dependent_codeunits_are_already_built, commandline_arguments)
2559
2574
  GeneralUtilities.write_message_to_stdout(GeneralUtilities.get_line())
2560
2575
  contains_uncommitted_changes_at_end = self.__sc.git_repository_has_uncommitted_changes(repository_folder)
2561
- if contains_uncommitted_changes_at_end and not is_pre_merge:
2576
+ if contains_uncommitted_changes_at_end and (not is_pre_merge) and check_for_new_files:
2562
2577
  if contains_uncommitted_changes_at_begin:
2563
2578
  GeneralUtilities.write_message_to_stdout(f'There are still uncommitted changes in the repository "{repository_folder}".')
2564
2579
  else:
@@ -2916,10 +2931,9 @@ class TasksForCommonProjectStructure:
2916
2931
  GeneralUtilities.write_message_to_stdout(f"Warning: Codeunit {codeunit_name} is disabled.")
2917
2932
  return
2918
2933
 
2919
- artifacts_folder = os.path.join(codeunit_folder, "Other", "Artifacts")
2920
2934
  GeneralUtilities.write_message_to_stdout(f"Start building codeunit {codeunit_name}.")
2921
2935
  GeneralUtilities.write_message_to_stdout(f"Build-environmenttype: {target_environmenttype}")
2922
- GeneralUtilities.ensure_directory_does_not_exist(artifacts_folder)
2936
+ self.__sc.run_program("git", "clean -dfx", codeunit_folder)
2923
2937
 
2924
2938
  verbosity_for_executed_programs = self.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
2925
2939
 
@@ -2995,6 +3009,7 @@ class TasksForCommonProjectStructure:
2995
3009
  GeneralUtilities.write_message_to_stdout('Run "OnBuildingFinished.py"...')
2996
3010
  self.__sc.run_program("python", f"OnBuildingFinished.py{additional_arguments_f}{general_argument}", other_folder, verbosity=verbosity_for_executed_programs, throw_exception_if_exitcode_is_not_zero=True, print_live_output=2 < verbosity)
2997
3011
 
3012
+ artifacts_folder = os.path.join(codeunit_folder, "Other", "Artifacts")
2998
3013
  artifactsinformation_file = os.path.join(artifacts_folder, f"{codeunit_name}.artifactsinformation.xml")
2999
3014
  codeunit_version = self.get_version_of_codeunit(codeunit_file)
3000
3015
  GeneralUtilities.ensure_file_exists(artifactsinformation_file)
@@ -3024,9 +3039,10 @@ class TasksForCommonProjectStructure:
3024
3039
  # Prepare
3025
3040
  GeneralUtilities.write_message_to_stdout("Update dependencies...")
3026
3041
  self.__sc.assert_is_git_repository(repository_folder)
3027
- codeunits = self.get_codeunits(repository_folder)
3042
+ codeunits = self.get_sorted_codeunits(repository_folder)
3028
3043
  update_dependencies_script_filename = "UpdateDependencies.py"
3029
- self.build_codeunits(repository_folder, target_environmenttype="QualityCheck", do_git_clean_when_no_changes=True, note="Prepare dependency-update") # Required because update dependencies is not always possible for not-buildet codeunits (depends on the programming language or package manager)
3044
+ target_environmenttype = "QualityCheck"
3045
+ self.build_codeunits(repository_folder, target_environmenttype=target_environmenttype, do_git_clean_when_no_changes=True, note="Prepare dependency-update") # Required because update dependencies is not always possible for not-buildet codeunits (depends on the programming language or package manager)
3030
3046
 
3031
3047
  # update dependencies of resources
3032
3048
  global_scripts_folder = os.path.join(repository_folder, "Other", "Scripts")
@@ -3042,6 +3058,7 @@ class TasksForCommonProjectStructure:
3042
3058
  update_dependencies_script_folder = os.path.join(codeunit_folder, "Other")
3043
3059
  GeneralUtilities.ensure_directory_exists(os.path.join(update_dependencies_script_folder, "Resources", "CodeAnalysisResult"))
3044
3060
  self.__sc.run_program("python", update_dependencies_script_filename, update_dependencies_script_folder, verbosity, print_live_output=True)
3061
+ self.build_specific_codeunits(repository_folder, [codeunit], 0, target_environmenttype, None, False, None, True, [], False, "Build due to updated dependencies", False)
3045
3062
  if self.__sc.git_repository_has_uncommitted_changes(repository_folder):
3046
3063
  version_of_project = self.get_version_of_project(repository_folder)
3047
3064
  changelog_file = os.path.join(repository_folder, "Other", "Resources", "Changelog", f"v{version_of_project}.md")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: ScriptCollection
3
- Version: 3.5.94
3
+ Version: 3.5.96
4
4
  Summary: The ScriptCollection is the place for reusable scripts.
5
5
  Home-page: https://github.com/anionDev/ScriptCollection
6
6
  Author: Marius Göcke
@@ -6,12 +6,12 @@ ScriptCollection/ProgramRunnerEpew.py,sha256=4pjEd0r9Fcz3TTDv0MdTSd5KkigYXcWUVI1
6
6
  ScriptCollection/ProgramRunnerPopen.py,sha256=BPY7-ZMIlqT7JOKz8qlB5c0laF2Js-ijzqk09GxZC48,3821
7
7
  ScriptCollection/RPStream.py,sha256=NRRHL3YSP3D9MuAV2jB_--0KUKCsvJGxeKnxgrRZ9kY,1545
8
8
  ScriptCollection/SCLog.py,sha256=l4aekBiGoNkKGtvO_Er3NY_K7ts4ZWtIGlhq07I-4LY,30
9
- ScriptCollection/ScriptCollectionCore.py,sha256=kuiMlekPcD_BTbCjqKgsEQjeMWL7consYcplP1lTByU,123973
10
- ScriptCollection/TasksForCommonProjectStructure.py,sha256=QqpfA-9sLtUogsOqg4uHHS2kucwZkTuzhDs24OdFIrE,225316
9
+ ScriptCollection/ScriptCollectionCore.py,sha256=sE3JQsihlPzn_X9RpGm3D5_Ydk_HU1xEXsijk-hH3YE,123973
10
+ ScriptCollection/TasksForCommonProjectStructure.py,sha256=0rCSZo4dDHw3io-szTqg7_TPO69w9Na4fUZnmr0Ma5I,226895
11
11
  ScriptCollection/UpdateCertificates.py,sha256=Eynbgu7k9jLxApP2D_8Il77B6BFjJap6K7oTeEAZYbk,7790
12
12
  ScriptCollection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- scriptcollection-3.5.94.dist-info/METADATA,sha256=UrFm_ztejp_WXvuM7uom8cka14YxGvMC_wPzpf6rdjw,7664
14
- scriptcollection-3.5.94.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
15
- scriptcollection-3.5.94.dist-info/entry_points.txt,sha256=fYCGWGNGijBQHhFe6UAO-BEpfEOxLyNJemukt5ElSzs,3644
16
- scriptcollection-3.5.94.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
17
- scriptcollection-3.5.94.dist-info/RECORD,,
13
+ scriptcollection-3.5.96.dist-info/METADATA,sha256=hOQCtb5sBGidwxEWuf9k6GeIw5AP7_PV_g2oP92aZU8,7664
14
+ scriptcollection-3.5.96.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
15
+ scriptcollection-3.5.96.dist-info/entry_points.txt,sha256=fYCGWGNGijBQHhFe6UAO-BEpfEOxLyNJemukt5ElSzs,3644
16
+ scriptcollection-3.5.96.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
17
+ scriptcollection-3.5.96.dist-info/RECORD,,