ScriptCollection 3.5.85__py3-none-any.whl → 3.5.87__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.
@@ -376,17 +376,18 @@ def GenerateARC42ReferenceTemplate() -> int:
376
376
 
377
377
  def CreateChangelogEntry() -> int:
378
378
  parser = argparse.ArgumentParser()
379
- parser.add_argument('-f', '--repositoryfolder', required=False, default=".")
379
+ parser.add_argument('-p', '--repositorypath', required=False, default=".")
380
380
  parser.add_argument('-m', '--message', required=False, default="Updates.")
381
381
  parser.add_argument('-c', '--commit', action='store_true', required=False, default=False)
382
+ parser.add_argument('-f', '--force', action='store_true', required=False, default=False)
382
383
  args = parser.parse_args()
383
384
 
384
385
  folder: str = None
385
- if os.path.isabs(args.repositoryfolder):
386
- folder = args.repositoryfolder
386
+ if os.path.isabs(args.repositorypath):
387
+ folder = args.repositorypath
387
388
  else:
388
- folder = GeneralUtilities.resolve_relative_path(args.repositoryfolder, os.getcwd())
389
- TasksForCommonProjectStructure().create_changelog_entry(folder, args.message, args.commit)
389
+ folder = GeneralUtilities.resolve_relative_path(args.repositorypath, os.getcwd())
390
+ TasksForCommonProjectStructure().create_changelog_entry(folder, args.message, args.commit, args.force)
390
391
  return 0
391
392
 
392
393
 
@@ -538,18 +539,18 @@ def Copy() -> int:
538
539
  if os.path.isfile(args.target) or os.path.isdir(args.target):
539
540
  raise ValueError(f"Can not copy to '{args.target}' because the target already exists.")
540
541
 
541
- source=args.source
542
+ source = args.source
542
543
  if not os.path.isabs(source):
543
- source=GeneralUtilities.resolve_relative_path(source,os.getcwd())
544
- target=args.target
544
+ source = GeneralUtilities.resolve_relative_path(source, os.getcwd())
545
+ target = args.target
545
546
  if not os.path.isabs(target):
546
- target=GeneralUtilities.resolve_relative_path(target,os.getcwd())
547
+ target = GeneralUtilities.resolve_relative_path(target, os.getcwd())
547
548
 
548
549
  if os.path.isfile(source):
549
550
  shutil.copyfile(source, target)
550
551
  elif os.path.isdir(source):
551
552
  GeneralUtilities.ensure_directory_exists(target)
552
- GeneralUtilities.copy_content_of_folder(source,target)
553
+ GeneralUtilities.copy_content_of_folder(source, target)
553
554
  else:
554
555
  raise ValueError(f"'{source}' can not be copied because the path does not exist.")
555
556
  return 0
@@ -575,26 +576,26 @@ def PrintCurrecntWorkingDirectory() -> int:
575
576
  def ListFolderContent() -> int:
576
577
  parser = argparse.ArgumentParser(description="This function lists folder-content.")
577
578
  parser.add_argument('-p', '--path', required=True)
578
- parser.add_argument('-f', '--excludefiles', action='store_true', required=False,default=False)
579
- parser.add_argument('-d', '--excludedirectories', action='store_true', required=False,default=False)
580
- parser.add_argument('-n', '--printonlynamewithoutpath', action='store_true', required=False,default=False)
579
+ parser.add_argument('-f', '--excludefiles', action='store_true', required=False, default=False)
580
+ parser.add_argument('-d', '--excludedirectories', action='store_true', required=False, default=False)
581
+ parser.add_argument('-n', '--printonlynamewithoutpath', action='store_true', required=False, default=False)
581
582
  # TODO add option to also list transitively list subfolder
582
583
  # TODO add option to show only content which matches a filter by extension or regex or glob-pattern
583
- args=parser.parse_args()
584
- folder=args.path
584
+ args = parser.parse_args()
585
+ folder = args.path
585
586
  if not os.path.isabs(folder):
586
- folder=GeneralUtilities.resolve_relative_path(folder,os.getcwd())
587
- content=[]
587
+ folder = GeneralUtilities.resolve_relative_path(folder, os.getcwd())
588
+ content = []
588
589
  if not args.excludefiles:
589
- content=content+GeneralUtilities.get_direct_files_of_folder(folder)
590
+ content = content+GeneralUtilities.get_direct_files_of_folder(folder)
590
591
  if not args.excludedirectories:
591
- content=content+GeneralUtilities.get_direct_folders_of_folder(folder)
592
+ content = content+GeneralUtilities.get_direct_folders_of_folder(folder)
592
593
  for contentitem in content:
593
- content_to_print:str=None
594
+ content_to_print: str = None
594
595
  if args.printonlynamewithoutpath:
595
- content_to_print=os.path.basename(contentitem)
596
+ content_to_print = os.path.basename(contentitem)
596
597
  else:
597
- content_to_print= contentitem
598
+ content_to_print = contentitem
598
599
  GeneralUtilities.write_message_to_stdout(content_to_print)
599
600
  return 0
600
601
 
@@ -32,7 +32,7 @@ from .ProgramRunnerBase import ProgramRunnerBase
32
32
  from .ProgramRunnerPopen import ProgramRunnerPopen
33
33
  from .ProgramRunnerEpew import ProgramRunnerEpew, CustomEpewArgument
34
34
 
35
- version = "3.5.85"
35
+ version = "3.5.87"
36
36
  __version__ = version
37
37
 
38
38
 
@@ -456,8 +456,10 @@ class ScriptCollectionCore:
456
456
  self.run_program_argsasarray("git", ["tag", "--delete", tag], directory, throw_exception_if_exitcode_is_not_zero=True, verbosity=0)
457
457
 
458
458
  @GeneralUtilities.check_arguments
459
- def git_checkout(self, directory: str, branch: str, undo_all_changes_after_checkout: bool = True) -> None:
459
+ def git_checkout(self, directory: str, branch: str, undo_all_changes_after_checkout: bool = True, assert_no_uncommitted_changes: bool = True) -> None:
460
460
  self.assert_is_git_repository(directory)
461
+ if assert_no_uncommitted_changes:
462
+ GeneralUtilities.assert_condition(not self.git_repository_has_uncommitted_changes(directory), f"Repository '{directory}' has uncommitted changes.")
461
463
  self.run_program_argsasarray("git", ["checkout", branch], directory, throw_exception_if_exitcode_is_not_zero=True, verbosity=0)
462
464
  self.run_program_argsasarray("git", ["submodule", "update", "--recursive"], directory, throw_exception_if_exitcode_is_not_zero=True, verbosity=0)
463
465
  if undo_all_changes_after_checkout:
@@ -469,9 +471,9 @@ class ScriptCollectionCore:
469
471
  self.run_program_argsasarray("git", ["merge", "--abort"], directory, throw_exception_if_exitcode_is_not_zero=True, verbosity=0)
470
472
 
471
473
  @GeneralUtilities.check_arguments
472
- def git_merge(self, directory: str, sourcebranch: str, targetbranch: str, fastforward: bool = True, commit: bool = True, commit_message: str = None) -> str:
474
+ def git_merge(self, directory: str, sourcebranch: str, targetbranch: str, fastforward: bool = True, commit: bool = True, commit_message: str = None, undo_all_changes_after_checkout: bool = True, assert_no_uncommitted_changes: bool = True) -> str:
473
475
  self.assert_is_git_repository(directory)
474
- self.git_checkout(directory, targetbranch)
476
+ self.git_checkout(directory, targetbranch, undo_all_changes_after_checkout, assert_no_uncommitted_changes)
475
477
  args = ["merge"]
476
478
  if not commit:
477
479
  args.append("--no-commit")
@@ -1869,8 +1871,11 @@ DNS = {domain}
1869
1871
 
1870
1872
  @GeneralUtilities.check_arguments
1871
1873
  def wait_until_dotnet_package_is_available(self, package_name: str, package_version: str, source: str):
1872
- while not self.dotnet_package_is_available(package_name, package_version, source):
1873
- time.sleep(5)
1874
+ try:
1875
+ while not self.dotnet_package_is_available(package_name, package_version, source):
1876
+ time.sleep(30)
1877
+ except:
1878
+ pass
1874
1879
 
1875
1880
  @GeneralUtilities.check_arguments
1876
1881
  def python_package_is_available(self, package_name: str, package_version: str, source: str):
@@ -1885,8 +1890,11 @@ DNS = {domain}
1885
1890
 
1886
1891
  @GeneralUtilities.check_arguments
1887
1892
  def wait_until_python_package_is_available(self, package_name: str, package_version: str, source: str):
1888
- while not self.python_package_is_available(package_name, package_version, source):
1889
- time.sleep(5)
1893
+ try:
1894
+ while not self.python_package_is_available(package_name, package_version, source):
1895
+ time.sleep(30)
1896
+ except:
1897
+ pass
1890
1898
 
1891
1899
  @GeneralUtilities.check_arguments
1892
1900
  def create_deb_package(self, toolname: str, binary_folder: str, control_file_content: str, deb_output_folder: str, verbosity: int, permission_of_executable_file_as_octet_triple: int) -> None:
@@ -1018,7 +1018,7 @@ class TasksForCommonProjectStructure:
1018
1018
  target_folder_base = os.path.join(information.artifacts_folder, information.projectname, project_version)
1019
1019
  GeneralUtilities.ensure_directory_exists(target_folder_base)
1020
1020
 
1021
- self.build_codeunits(information.repository, information.verbosity, information.target_environmenttype_for_productive, information.additional_arguments_file, False, information.export_target, [], True, "Generate artifacts")# Generate artifacts after merge (because now are constants like commit-id of the new version available)
1021
+ self.build_codeunits(information.repository, information.verbosity, information.target_environmenttype_for_productive, information.additional_arguments_file, False, information.export_target, [], True, "Generate artifacts") # Generate artifacts after merge (because now are constants like commit-id of the new version available)
1022
1022
 
1023
1023
  reference_folder = os.path.join(information.reference_repository, "ReferenceContent")
1024
1024
 
@@ -1252,7 +1252,7 @@ class TasksForCommonProjectStructure:
1252
1252
 
1253
1253
  self.__sc.git_checkout(repository_folder, source_branch)
1254
1254
  self.build_codeunits(repository_folder, verbosity, TasksForCommonProjectStructure.get_qualitycheck_environment_name(), additional_arguments_file, True, None, [], True, "Check if product is buildable")
1255
- self.__sc.git_merge(repository_folder, source_branch, target_branch, False, False, None)
1255
+ self.__sc.git_merge(repository_folder, source_branch, target_branch, False, False, None, False, False)
1256
1256
  self.__sc.git_commit(repository_folder, f'Merge branch {source_branch} into {target_branch}', stage_all_changes=True, no_changes_behavior=1)
1257
1257
  self.__sc.git_checkout(repository_folder, target_branch)
1258
1258
  if fast_forward_source_branch:
@@ -1300,8 +1300,8 @@ class TasksForCommonProjectStructure:
1300
1300
  # hint: arguments can be overwritten by commandline_arguments
1301
1301
  folder_of_this_file = os.path.dirname(create_release_file)
1302
1302
  verbosity = TasksForCommonProjectStructure.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
1303
- result=self.__sc.run_program("python", f"CreateRelease.py --overwrite_verbosity {str(verbosity)}", folder_of_this_file, verbosity=verbosity, log_file=logfile, addLogOverhead=addLogOverhead,print_live_output=True,throw_exception_if_exitcode_is_not_zero=False)
1304
- if result[0]!=0:
1303
+ result = self.__sc.run_program("python", f"CreateRelease.py --overwrite_verbosity {str(verbosity)}", folder_of_this_file, verbosity=verbosity, log_file=logfile, addLogOverhead=addLogOverhead, print_live_output=True, throw_exception_if_exitcode_is_not_zero=False)
1304
+ if result[0] != 0:
1305
1305
  raise ValueError(f"CreateRelease.py resulted in exitcode {result[0]}.")
1306
1306
 
1307
1307
  @GeneralUtilities.check_arguments
@@ -1315,7 +1315,7 @@ class TasksForCommonProjectStructure:
1315
1315
  self.__sc.run_program("git", "clean -dfx", information.repository, verbosity=information.verbosity, throw_exception_if_exitcode_is_not_zero=True)
1316
1316
  project_version = self.__sc.get_semver_version_from_gitversion(information.repository)
1317
1317
 
1318
- self.build_codeunits(information.repository, information.verbosity, information.target_environmenttype_for_qualitycheck, information.additional_arguments_file, False, information.export_target, [], True, "Productive build")#verify hat codeunits are buildable with productive-config before merge
1318
+ self.build_codeunits(information.repository, information.verbosity, information.target_environmenttype_for_qualitycheck, information.additional_arguments_file, False, information.export_target, [], True, "Productive build") # verify hat codeunits are buildable with productive-config before merge
1319
1319
 
1320
1320
  self.assert_no_uncommitted_changes(information.repository)
1321
1321
 
@@ -2445,11 +2445,11 @@ class TasksForCommonProjectStructure:
2445
2445
  self.__sc.assert_is_git_repository(repository_folder)
2446
2446
  repository_folder = GeneralUtilities.resolve_relative_path_from_current_working_directory(repository_folder)
2447
2447
  codeunits = self.get_codeunits(repository_folder, False)
2448
- 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)
2448
+ 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)
2449
2449
 
2450
2450
  @GeneralUtilities.check_arguments
2451
2451
  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:
2452
- if verbosity>2:
2452
+ if verbosity > 2:
2453
2453
  GeneralUtilities.write_message_to_stdout(f"Start building codeunits for repository '{repository_folder}'...")
2454
2454
  self.__sc.assert_is_git_repository(repository_folder)
2455
2455
  self.__check_target_environmenttype(target_environmenttype)
@@ -2470,8 +2470,8 @@ class TasksForCommonProjectStructure:
2470
2470
  prepare_build_codeunits_scripts = os.path.join(project_resources_folder, PrepareBuildCodeunits_script_name)
2471
2471
  if os.path.isfile(prepare_build_codeunits_scripts):
2472
2472
  GeneralUtilities.write_message_to_stdout(f'Run "{PrepareBuildCodeunits_script_name}"')
2473
- 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)
2474
- if result[0]!=0:
2473
+ 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)
2474
+ if result[0] != 0:
2475
2475
  raise ValueError(f"PrepareBuildCodeunits.py resulted in exitcode {result[0]}.")
2476
2476
 
2477
2477
  for subfolder in subfolders:
@@ -2903,7 +2903,7 @@ class TasksForCommonProjectStructure:
2903
2903
  # update dependencies of resources
2904
2904
  global_scripts_folder = os.path.join(repository_folder, "Other", "Scripts")
2905
2905
  if os.path.isfile(os.path.join(global_scripts_folder, update_dependencies_script_filename)):
2906
- self.__sc.run_program("python", update_dependencies_script_filename, global_scripts_folder,print_live_output=True)
2906
+ self.__sc.run_program("python", update_dependencies_script_filename, global_scripts_folder, print_live_output=True)
2907
2907
 
2908
2908
  # update dependencies of codeunits
2909
2909
  for codeunit in codeunits:
@@ -2913,7 +2913,7 @@ class TasksForCommonProjectStructure:
2913
2913
  codeunit_folder = os.path.join(repository_folder, codeunit)
2914
2914
  update_dependencies_script_folder = os.path.join(codeunit_folder, "Other")
2915
2915
  GeneralUtilities.ensure_directory_exists(os.path.join(update_dependencies_script_folder, "Resources", "CodeAnalysisResult"))
2916
- self.__sc.run_program("python", update_dependencies_script_filename, update_dependencies_script_folder, verbosity,print_live_output=True)
2916
+ self.__sc.run_program("python", update_dependencies_script_filename, update_dependencies_script_folder, verbosity, print_live_output=True)
2917
2917
  if self.__sc.git_repository_has_uncommitted_changes(repository_folder):
2918
2918
  version_of_project = self.get_version_of_project(repository_folder)
2919
2919
  changelog_file = os.path.join(repository_folder, "Other", "Resources", "Changelog", f"v{version_of_project}.md")
@@ -2961,9 +2961,13 @@ class TasksForCommonProjectStructure:
2961
2961
  # prepare
2962
2962
  self.assert_no_uncommitted_changes(repository_folder)
2963
2963
  self.assert_no_uncommitted_changes(reference_folder)
2964
- self.__sc.git_checkout(repository_folder, merge_source_branch)
2964
+ self.assert_no_uncommitted_changes(build_repository_folder)
2965
+ self.__sc.git_checkout(repository_folder, merge_source_branch, True)
2966
+ self.__sc.git_checkout(reference_folder, "main", True)
2967
+ self.__sc.git_checkout(build_repository_folder, "main", True)
2965
2968
  self.assert_no_uncommitted_changes(repository_folder)
2966
2969
  self.assert_no_uncommitted_changes(reference_folder)
2970
+ self.__sc.git_commit(build_repository_folder, "Updated submodules")
2967
2971
 
2968
2972
  if "--dependencyupdate" in generic_prepare_new_release_arguments.commandline_arguments:
2969
2973
  self.generic_update_dependencies(repository_folder)
@@ -2985,7 +2989,6 @@ class TasksForCommonProjectStructure:
2985
2989
  self.__sc.git_commit(build_repository_folder, "Updated submodule due to merge to main-branch.")
2986
2990
  GeneralUtilities.write_message_to_stdout(f"Finished prepare release for {generic_prepare_new_release_arguments.product_name}.")
2987
2991
 
2988
-
2989
2992
  class GenericCreateReleaseArguments():
2990
2993
  current_file: str
2991
2994
  product_name: str
@@ -3025,6 +3028,7 @@ class TasksForCommonProjectStructure:
3025
3028
  self.__sc.git_checkout(repository_folder, merge_source_branch)
3026
3029
  reference_repo: str = os.path.join(build_repository_folder, "Submodules", f"{generic_create_release_arguments.product_name}Reference")
3027
3030
  self.__sc.git_commit(reference_repo, "Updated reference")
3031
+ self.__sc.git_push_with_retry(reference_repo, generic_create_release_arguments.common_remote_name, "main", "main")
3028
3032
  self.__sc.git_commit(build_repository_folder, "Updated submodule")
3029
3033
 
3030
3034
  # create release
@@ -3051,8 +3055,11 @@ class TasksForCommonProjectStructure:
3051
3055
  self.main_branch_name = "main"
3052
3056
 
3053
3057
  @GeneralUtilities.check_arguments
3054
- def create_changelog_entry(self, repositoryfolder: str, message: str, commit: bool):
3058
+ def create_changelog_entry(self, repositoryfolder: str, message: str, commit: bool, force: bool):
3055
3059
  self.__sc.assert_is_git_repository(repositoryfolder)
3060
+ random_file = os.path.join(repositoryfolder, str(uuid.uuid4()))
3061
+ if force and not self.__sc.git_repository_has_uncommitted_changes(repositoryfolder):
3062
+ GeneralUtilities.ensure_file_exists(random_file)
3056
3063
  current_version = self.get_version_of_project(repositoryfolder)
3057
3064
  changelog_file = os.path.join(repositoryfolder, "Other", "Resources", "Changelog", f"v{current_version}.md")
3058
3065
  if os.path.isdir(changelog_file):
@@ -3065,6 +3072,9 @@ class TasksForCommonProjectStructure:
3065
3072
 
3066
3073
  - {message}
3067
3074
  """)
3075
+ GeneralUtilities.ensure_file_does_not_exist(random_file)
3076
+ if commit:
3077
+ self.__sc.git_commit(repositoryfolder, f"Added changelog-file for v{current_version}.")
3068
3078
 
3069
3079
  @GeneralUtilities.check_arguments
3070
3080
  def update_http_documentation(self, update_http_documentation_arguments: UpdateHTTPDocumentationArguments):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: ScriptCollection
3
- Version: 3.5.85
3
+ Version: 3.5.87
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
@@ -1,16 +1,16 @@
1
- ScriptCollection/Executables.py,sha256=KAs82A9AsrpTY39Ohg1UrtZN-6e5_Ql17UbLlO0fZfA,30037
1
+ ScriptCollection/Executables.py,sha256=ApfwgRftLeG1NBpv7Jad98Yb-wI8sKjhtoIsxMmfGVY,30167
2
2
  ScriptCollection/GeneralUtilities.py,sha256=VVbbGFD4qLwWV211-E-n3faP2fZGc8mOBlKLd0oKHl4,40765
3
3
  ScriptCollection/ProcessesRunner.py,sha256=3mu4ZxzZleQo0Op6o9EYTCFiJfb6kx5ov2YfZfT89mU,1395
4
4
  ScriptCollection/ProgramRunnerBase.py,sha256=2kMIAqdc65UjBAddOZkzy_aFx9h5roZ5a4bQNM6RV6Y,2480
5
5
  ScriptCollection/ProgramRunnerEpew.py,sha256=4pjEd0r9Fcz3TTDv0MdTSd5KkigYXcWUVI1X43regfU,6477
6
6
  ScriptCollection/ProgramRunnerPopen.py,sha256=BPY7-ZMIlqT7JOKz8qlB5c0laF2Js-ijzqk09GxZC48,3821
7
7
  ScriptCollection/RPStream.py,sha256=NRRHL3YSP3D9MuAV2jB_--0KUKCsvJGxeKnxgrRZ9kY,1545
8
- ScriptCollection/ScriptCollectionCore.py,sha256=5xL3OyzIfLB56lvIwMSjSxIwG30bEuDlWhicMIvobK8,122886
9
- ScriptCollection/TasksForCommonProjectStructure.py,sha256=n6og3gADK7oBd5_9F-XNKVlQ0bO9EL7irdOSJAh-Vtc,215940
8
+ ScriptCollection/ScriptCollectionCore.py,sha256=rwKMKxjVpXhXfHNjJbBj52ESdwJMeAAAJlsB7_-gCFI,123396
9
+ ScriptCollection/TasksForCommonProjectStructure.py,sha256=0G2onG2crhkn3ivRqfVtHcg9WgwRXT488X0zEy8CSe4,216807
10
10
  ScriptCollection/UpdateCertificates.py,sha256=Eynbgu7k9jLxApP2D_8Il77B6BFjJap6K7oTeEAZYbk,7790
11
11
  ScriptCollection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- scriptcollection-3.5.85.dist-info/METADATA,sha256=IINDRHU-BtfrXLP1MFNrA4TMfjtEJYcYj4BUlSdzS8k,7664
13
- scriptcollection-3.5.85.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
14
- scriptcollection-3.5.85.dist-info/entry_points.txt,sha256=1jAL5AuB8mvdw2v-6E7wCZFThurQxchiQynL8DCi-Yg,3545
15
- scriptcollection-3.5.85.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
16
- scriptcollection-3.5.85.dist-info/RECORD,,
12
+ scriptcollection-3.5.87.dist-info/METADATA,sha256=Elf3KgpOjyl7mfxRcz6k4X25IClN0LIG3xzjNpOuXqs,7664
13
+ scriptcollection-3.5.87.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
14
+ scriptcollection-3.5.87.dist-info/entry_points.txt,sha256=1jAL5AuB8mvdw2v-6E7wCZFThurQxchiQynL8DCi-Yg,3545
15
+ scriptcollection-3.5.87.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
16
+ scriptcollection-3.5.87.dist-info/RECORD,,