ScriptCollection 3.5.3__py3-none-any.whl → 3.5.4__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.
@@ -21,6 +21,7 @@ from .GeneralUtilities import GeneralUtilities
21
21
  from .ScriptCollectionCore import ScriptCollectionCore
22
22
  from .ProgramRunnerEpew import ProgramRunnerEpew
23
23
 
24
+
24
25
  class CreateReleaseConfiguration():
25
26
  projectname: str
26
27
  remotename: str
@@ -232,8 +233,7 @@ class TasksForCommonProjectStructure:
232
233
  for target in targets:
233
234
  GeneralUtilities.write_message_to_stdout(f"Build package {package_name} for target {target}...")
234
235
  sc = ScriptCollectionCore()
235
- sc.program_runner = ProgramRunnerEpew()
236
- sc.run_program("flutter", f"build {target}", src_folder, verbosity)
236
+ self.run_with_epew("flutter", f"build {target}", src_folder, verbosity)
237
237
  if target == "web":
238
238
  web_relase_folder = os.path.join(src_folder, "build/web")
239
239
  web_folder = os.path.join(artifacts_folder, "BuildResult_WebApplication")
@@ -620,7 +620,7 @@ class TasksForCommonProjectStructure:
620
620
 
621
621
  @GeneralUtilities.check_arguments
622
622
  def __standardized_tasks_build_for_dotnet_build(self, csproj_file: str, originaloutputfolder: str, files_to_sign: dict[str, str], commitid: str, verbosity: int, runtimes: list[str], target_environmenttype: str, target_environmenttype_mapping: dict[str, str], copy_license_file_to_target_folder: bool, repository_folder: str, codeunit_name: str, commandline_arguments: list[str]) -> None:
623
- csproj_filename=os.path.basename(csproj_file)
623
+ csproj_filename = os.path.basename(csproj_file)
624
624
  GeneralUtilities.write_message_to_stdout(f"Build {csproj_filename}...")
625
625
  dotnet_build_configuration: str = target_environmenttype_mapping[target_environmenttype]
626
626
  verbosity = self.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
@@ -774,12 +774,14 @@ class TasksForCommonProjectStructure:
774
774
  verbosity = TasksForCommonProjectStructure.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
775
775
  if verbosity == 0:
776
776
  verbose_argument_for_reportgenerator = "Off"
777
- if verbosity == 1:
777
+ elif verbosity == 1:
778
778
  verbose_argument_for_reportgenerator = "Error"
779
- if verbosity == 2:
779
+ elif verbosity == 2:
780
780
  verbose_argument_for_reportgenerator = "Info"
781
- if verbosity == 3:
781
+ elif verbosity == 3:
782
782
  verbose_argument_for_reportgenerator = "Verbose"
783
+ else:
784
+ raise ValueError(f"Unknown value for verbosity: {GeneralUtilities.str_none_safe(verbosity)}")
783
785
 
784
786
  # Generating report
785
787
  GeneralUtilities.ensure_directory_does_not_exist(os.path.join(repository_folder, codeunitname, f"{codeunitname}/Other/Artifacts/TestCoverageReport"))
@@ -792,11 +794,8 @@ class TasksForCommonProjectStructure:
792
794
  history_folder_full = os.path.join(repository_folder, history_folder)
793
795
  GeneralUtilities.ensure_directory_exists(history_folder_full)
794
796
  history_argument = f" -historydir:{history_folder}"
795
- argument = (f"-reports:{codeunitname}/Other/Artifacts/TestCoverage/TestCoverage.xml " +
796
- f"-targetdir:{codeunitname}/Other/Artifacts/TestCoverageReport --verbosity:{verbose_argument_for_reportgenerator}{history_argument} " +
797
- f"-title:{codeunitname} -tag:v{codeunit_version}")
798
- self.__sc.run_program("reportgenerator", argument,
799
- repository_folder, verbosity=verbosity)
797
+ argument = f"-reports:{codeunitname}/Other/Artifacts/TestCoverage/TestCoverage.xml -targetdir:{codeunitname}/Other/Artifacts/TestCoverageReport --verbosity:{verbose_argument_for_reportgenerator}{history_argument} -title:{codeunitname} -tag:v{codeunit_version}"
798
+ self.__sc.run_program("reportgenerator", argument, repository_folder, verbosity=verbosity)
800
799
  if not add_testcoverage_history_entry:
801
800
  os.remove(GeneralUtilities.get_direct_files_of_folder(history_folder_full)[-1])
802
801
 
@@ -806,10 +805,7 @@ class TasksForCommonProjectStructure:
806
805
  fulltestcoverageubfolger = os.path.join(repository_folder, codeunitname, testcoverageubfolger)
807
806
  GeneralUtilities.ensure_directory_does_not_exist(fulltestcoverageubfolger)
808
807
  GeneralUtilities.ensure_directory_exists(fulltestcoverageubfolger)
809
- self.__sc.run_program("reportgenerator", "-reports:Other/Artifacts/TestCoverage/TestCoverage.xml " +
810
- f"-targetdir:{testcoverageubfolger} -reporttypes:Badges " +
811
- f"--verbosity:{verbose_argument_for_reportgenerator}", os.path.join(repository_folder, codeunitname),
812
- verbosity=verbosity)
808
+ self.__sc.run_program("reportgenerator", f"-reports:Other/Artifacts/TestCoverage/TestCoverage.xml -targetdir:{testcoverageubfolger} -reporttypes:Badges --verbosity:{verbose_argument_for_reportgenerator}", os.path.join(repository_folder, codeunitname), verbosity=verbosity)
813
809
 
814
810
  @GeneralUtilities.check_arguments
815
811
  def standardized_tasks_run_testcases_for_dotnet_project(self, runtestcases_file: str, targetenvironmenttype: str, verbosity: int, generate_badges: bool, target_environmenttype_mapping: dict[str, str], commandline_arguments: list[str]) -> None:
@@ -842,8 +838,7 @@ class TasksForCommonProjectStructure:
842
838
  self.run_testcases_common_post_task(repository_folder, codeunit_name, verbosity, generate_badges, targetenvironmenttype, commandline_arguments)
843
839
 
844
840
  @GeneralUtilities.check_arguments
845
- def run_testcases_common_post_task(self, repository_folder: str, codeunit_name: str, verbosity: int, generate_badges: bool,
846
- targetenvironmenttype: str, commandline_arguments: list[str]) -> None:
841
+ def run_testcases_common_post_task(self, repository_folder: str, codeunit_name: str, verbosity: int, generate_badges: bool, targetenvironmenttype: str, commandline_arguments: list[str]) -> None:
847
842
  coverage_file_folder = os.path.join(repository_folder, codeunit_name, "Other/Artifacts/TestCoverage")
848
843
  coveragefiletarget = os.path.join(coverage_file_folder, "TestCoverage.xml")
849
844
  self.update_path_of_source_in_testcoverage_file(repository_folder, codeunit_name)
@@ -865,8 +860,7 @@ class TasksForCommonProjectStructure:
865
860
  filename = match.group(1)
866
861
  file = os.path.join(source, filename)
867
862
  # GeneralUtilities.assert_condition(os.path.isfile(file),f"File \"{file}\" does not exist.")
868
- GeneralUtilities.assert_condition(file.startswith(codeunit_folder),
869
- f"Unexpected path for coverage-file. File: \"{file}\"; codeunitfolder: \"{codeunit_folder}\"")
863
+ GeneralUtilities.assert_condition(file.startswith(codeunit_folder), f"Unexpected path for coverage-file. File: \"{file}\"; codeunitfolder: \"{codeunit_folder}\"")
870
864
  filename_relative = f".{file[len(codeunit_folder):]}"
871
865
  return f'filename="{filename_relative}"'
872
866
 
@@ -876,15 +870,15 @@ class TasksForCommonProjectStructure:
876
870
  root: etree._ElementTree = etree.parse(testcoveragefile)
877
871
  codeunit_folder = os.path.join(repository_folder, codeunit_name)
878
872
  xpath = f"//coverage/packages/package[@name='{codeunit_name}']/classes/class"
879
- classes = root.xpath(xpath)
873
+ coverage_report_classes = root.xpath(xpath)
880
874
  found_existing_files = False
881
- for clas in classes:
882
- filename = clas.attrib['filename']
875
+ for coverage_report_class in coverage_report_classes:
876
+ filename = coverage_report_class.attrib['filename']
883
877
  file = os.path.join(codeunit_folder, filename)
884
878
  if os.path.isfile(file):
885
879
  found_existing_files = True
886
880
  else:
887
- clas.getparent().remove(clas)
881
+ coverage_report_class.getparent().remove(coverage_report_class)
888
882
  GeneralUtilities.assert_condition(found_existing_files, f"No existing files in testcoderage-report-file \"{testcoveragefile}\".")
889
883
  result = etree.tostring(root).decode("utf-8")
890
884
  GeneralUtilities.write_text_to_file(testcoveragefile, result)
@@ -916,7 +910,7 @@ class TasksForCommonProjectStructure:
916
910
  # TODO check if there are errors in sarif-file
917
911
 
918
912
  @GeneralUtilities.check_arguments
919
- def __export_codeunit_reference_content_to_reference_repository(self, project_version_identifier: str, replace_existing_content: bool, target_folder_for_reference_repository: str, repository: str, codeunitname: str, projectname: str, codeunit_version: str, public_repository_url: str, branch: str) -> None:
913
+ def __export_codeunit_reference_content_to_reference_repository(self, project_version_identifier: str, replace_existing_content: bool, target_folder_for_reference_repository: str, repository: str, codeunitname: str, projectname: str, codeunit_version: str, public_repository_url: str, branch: str) -> None:
920
914
  codeunit_folder = os.path.join(repository, codeunitname)
921
915
  codeunit_file = os.path.join(codeunit_folder, f"{codeunitname}.codeunit.xml")
922
916
  codeunit_has_testcases = self.codeunit_has_testable_sourcecode(codeunit_file)
@@ -931,8 +925,7 @@ class TasksForCommonProjectStructure:
931
925
  diff_target_folder = os.path.join(target_folder, "DiffReport")
932
926
  GeneralUtilities.ensure_directory_exists(diff_target_folder)
933
927
  diff_target_file = os.path.join(diff_target_folder, "DiffReport.html")
934
- title = (f'Reference of codeunit {codeunitname} {codeunit_version_identifier} (contained in project ' +
935
- f'<a href="{public_repository_url}">{projectname}</a> {project_version_identifier})')
928
+ title = (f'Reference of codeunit {codeunitname} {codeunit_version_identifier} (contained in project <a href="{public_repository_url}">{projectname}</a> {project_version_identifier})')
936
929
  if public_repository_url is None:
937
930
  repo_url_html = ""
938
931
  else:
@@ -1045,7 +1038,7 @@ class TasksForCommonProjectStructure:
1045
1038
  @GeneralUtilities.check_arguments
1046
1039
  def __generate_entire_reference(self, projectname: str, project_version: str, reference_folder: str) -> None:
1047
1040
  all_available_version_identifier_folders_of_reference: list[str] = list(folder for folder in GeneralUtilities.get_direct_folders_of_folder(reference_folder))
1048
- all_available_version_identifier_folders_of_reference = sorted(all_available_version_identifier_folders_of_reference, key=cmp_to_key(TasksForCommonProjectStructure._internal_sort_reference_folder))
1041
+ all_available_version_identifier_folders_of_reference = sorted(all_available_version_identifier_folders_of_reference, key=cmp_to_key(TasksForCommonProjectStructure._internal_sort_reference_folder))
1049
1042
  reference_versions_html_lines = []
1050
1043
  reference_versions_html_lines.append(' <hr/>')
1051
1044
  for all_available_version_identifier_folder_of_reference in all_available_version_identifier_folders_of_reference:
@@ -1109,17 +1102,26 @@ class TasksForCommonProjectStructure:
1109
1102
  raise ValueError(f"Repository '{repository_folder}' has uncommitted changes.")
1110
1103
 
1111
1104
  @GeneralUtilities.check_arguments
1112
- def generate_certificate_for_development_purposes(self, codeunit_folder: str, domain: str = None):
1105
+ def generate_certificate_for_development_purposes_for_external_service(self, service_folder: str, domain: str = None):
1106
+ testservice_name = os.path.basename(service_folder)
1107
+ self.__generate_certificate_for_development_purposes(testservice_name, os.path.join(service_folder, "Resources"), domain)
1108
+
1109
+ @GeneralUtilities.check_arguments
1110
+ def generate_certificate_for_development_purposes_for_codeunit(self, codeunit_folder: str, domain: str = None):
1113
1111
  codeunit_name = os.path.basename(codeunit_folder)
1112
+ self.__generate_certificate_for_development_purposes(codeunit_name, os.path.join(codeunit_folder, "Other", "Resources"), domain)
1113
+
1114
+ @GeneralUtilities.check_arguments
1115
+ def __generate_certificate_for_development_purposes(self, service_name: str, resources_folder: str, domain: str = None):
1114
1116
  if domain is None:
1115
- domain = f"{codeunit_name}.test.local"
1117
+ domain = f"{service_name}.test.local"
1116
1118
  domain = domain.lower()
1117
- resources_folder: str = os.path.join(codeunit_folder, "Other", "Resources")
1118
1119
  resource_name: str = "DevelopmentCertificate"
1119
1120
  certificate_folder: str = os.path.join(resources_folder, resource_name)
1120
- resource_content_filename: str = codeunit_name+resource_name
1121
+
1122
+ resource_content_filename: str = service_name+resource_name
1121
1123
  ca_resource_name: str = f"{resource_name}Authority"
1122
- dev_ca_name = codeunit_name+ca_resource_name
1124
+ dev_ca_name = service_name+ca_resource_name
1123
1125
  ca_folder = os.path.join(resources_folder, ca_resource_name)
1124
1126
  certificate_file = os.path.join(certificate_folder, f"{domain}.crt")
1125
1127
  unsignedcertificate_file = os.path.join(certificate_folder, f"{domain}.unsigned.crt")
@@ -1257,7 +1259,7 @@ class TasksForCommonProjectStructure:
1257
1259
  codeunit_folder = GeneralUtilities.resolve_relative_path("../..", str(os.path.dirname(build_script_file)))
1258
1260
  codeunitname_lower = codeunitname.lower()
1259
1261
  codeunitversion = self.get_version_of_codeunit(os.path.join(codeunit_folder, f"{codeunitname}.codeunit.xml"))
1260
- args = ["image", "build", "--pull", "--force-rm", "--progress=plain", "--build-arg", f"TargetEnvironmentType={target_environment_type}", "--tag", f"{codeunitname_lower}:latest", "--tag", f"{codeunitname_lower}:{codeunitversion}", "--file", f"{codeunitname}/Dockerfile"]
1262
+ args = ["image", "build", "--pull", "--force-rm", "--progress=plain", "--build-arg", f"TargetEnvironmentType={target_environment_type}", "--build-arg", f"Version={codeunitversion}", "--tag", f"{codeunitname_lower}:latest", "--tag", f"{codeunitname_lower}:{codeunitversion}", "--file", f"{codeunitname}/Dockerfile"]
1261
1263
  if not use_cache:
1262
1264
  args.append("--no-cache")
1263
1265
  args.append(".")
@@ -1351,7 +1353,7 @@ class TasksForCommonProjectStructure:
1351
1353
  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:
1352
1354
  additional_arguments_file = self.get_additionalargumentsfile_from_commandline_arguments(commandline_arguments, additional_arguments_file)
1353
1355
  target_environmenttype = self.get_targetenvironmenttype_from_commandline_arguments(commandline_arguments, targetenvironmenttype)
1354
- 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)
1356
+ 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)
1355
1357
  if commandline_arguments is None:
1356
1358
  raise ValueError('The "commandline_arguments"-parameter is not defined.')
1357
1359
  if len(commandline_arguments) == 0:
@@ -1432,7 +1434,7 @@ class TasksForCommonProjectStructure:
1432
1434
 
1433
1435
  # Get artifacts from dependent codeunits
1434
1436
  if assume_dependent_codeunits_are_already_built:
1435
- self.build_dependent_code_units(repository_folder, codeunit_name, verbosity, target_environmenttype, additional_arguments_file,commandline_arguments)
1437
+ self.build_dependent_code_units(repository_folder, codeunit_name, verbosity, target_environmenttype, additional_arguments_file, commandline_arguments)
1436
1438
  self.copy_artifacts_from_dependent_code_units(repository_folder, codeunit_name)
1437
1439
 
1438
1440
  # Update codeunit-version
@@ -1502,8 +1504,7 @@ class TasksForCommonProjectStructure:
1502
1504
  # TODO
1503
1505
 
1504
1506
  @GeneralUtilities.check_arguments
1505
- def standardized_tasks_linting_for_angular_codeunit(self, linting_script_file: str, verbosity: int,
1506
- build_environment_target_type: str, commandline_arguments: list[str]) -> None:
1507
+ def standardized_tasks_linting_for_angular_codeunit(self, linting_script_file: str, verbosity: int, build_environment_target_type: str, commandline_arguments: list[str]) -> None:
1507
1508
  verbosity = TasksForCommonProjectStructure.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
1508
1509
  build_script_folder = os.path.dirname(linting_script_file)
1509
1510
  codeunit_folder = GeneralUtilities.resolve_relative_path("../..", build_script_folder)
@@ -1517,15 +1518,13 @@ class TasksForCommonProjectStructure:
1517
1518
  codeunit_name = os.path.basename(codeunit_folder)
1518
1519
  src_folder = GeneralUtilities.resolve_relative_path(package_name, codeunit_folder)
1519
1520
  verbosity = self.get_verbosity_from_commandline_arguments(args, verbosity)
1520
- sc = ScriptCollectionCore()
1521
- sc.program_runner = ProgramRunnerEpew()
1522
- sc.run_program("flutter", "test --coverage", src_folder, verbosity)
1521
+ self.run_with_epew("flutter", "test --coverage", src_folder, verbosity)
1523
1522
  test_coverage_folder_relative = "Other/Artifacts/TestCoverage"
1524
1523
  test_coverage_folder = GeneralUtilities.resolve_relative_path(test_coverage_folder_relative, codeunit_folder)
1525
1524
  GeneralUtilities.ensure_directory_exists(test_coverage_folder)
1526
1525
  coverage_file_relative = f"{test_coverage_folder_relative}/TestCoverage.xml"
1527
1526
  coverage_file = GeneralUtilities.resolve_relative_path(coverage_file_relative, codeunit_folder)
1528
- sc.run_program("lcov_cobertura", f"coverage/lcov.info --base-dir . --excludes test --output ../{coverage_file_relative} --demangle", src_folder, verbosity)
1527
+ self.run_with_epew("lcov_cobertura", f"coverage/lcov.info --base-dir . --excludes test --output ../{coverage_file_relative} --demangle", src_folder, verbosity)
1529
1528
  content = GeneralUtilities.read_text_from_file(coverage_file)
1530
1529
  content = re.sub('<![^<]+>', '', content)
1531
1530
  content = re.sub('\\\\', '/', content)
@@ -1537,19 +1536,57 @@ class TasksForCommonProjectStructure:
1537
1536
 
1538
1537
  @GeneralUtilities.check_arguments
1539
1538
  def standardized_tasks_run_testcases_for_angular_codeunit(self, runtestcases_script_file: str, build_environment_target_type: str, generate_badges: bool, verbosity: int, commandline_arguments: list[str]) -> None:
1539
+ # prepare
1540
1540
  codeunit_name: str = os.path.basename(str(Path(os.path.dirname(runtestcases_script_file)).parent.parent.absolute()))
1541
1541
  verbosity = TasksForCommonProjectStructure.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
1542
1542
  codeunit_folder = GeneralUtilities.resolve_relative_path("../..", os.path.dirname(runtestcases_script_file))
1543
1543
  repository_folder = os.path.dirname(codeunit_folder)
1544
- self.run_with_epew(
1545
- "ng", "test --watch=false --browsers ChromeHeadless --code-coverage", codeunit_folder, verbosity=verbosity)
1544
+
1545
+ # run testcases
1546
+ self.run_with_epew("ng", "test --watch=false --browsers ChromeHeadless --code-coverage", codeunit_folder, verbosity=verbosity)
1547
+
1548
+ # rename file
1546
1549
  coverage_folder = os.path.join(codeunit_folder, "Other", "Artifacts", "TestCoverage")
1547
1550
  target_file = os.path.join(coverage_folder, "TestCoverage.xml")
1548
1551
  GeneralUtilities.ensure_file_does_not_exist(target_file)
1549
1552
  os.rename(os.path.join(coverage_folder, "cobertura-coverage.xml"), target_file)
1550
1553
  self.__rename_packagename_in_coverage_file(target_file, codeunit_name)
1554
+
1555
+ # adapt backslashs to slashs
1551
1556
  content = GeneralUtilities.read_text_from_file(target_file)
1552
1557
  content = re.sub('\\\\', '/', content)
1558
+ GeneralUtilities.write_text_to_file(target_file, content)
1559
+
1560
+ # aggregate packages in testcoverage-file
1561
+ roottree: etree._ElementTree = etree.parse(target_file)
1562
+ existing_classes = list(roottree.xpath('//coverage/packages/package/classes/class'))
1563
+
1564
+ old_packages_list = roottree.xpath('//coverage/packages/package')
1565
+ for package in old_packages_list:
1566
+ package.getparent().remove(package)
1567
+
1568
+ root = roottree.getroot()
1569
+ packages_element = root.find("packages")
1570
+ package_element = etree.SubElement(packages_element, "package")
1571
+ package_element.attrib['name'] = codeunit_name
1572
+ package_element.attrib['lines-valid'] = root.attrib["lines-valid"]
1573
+ package_element.attrib['lines-covered'] = root.attrib["lines-covered"]
1574
+ package_element.attrib['line-rate'] = root.attrib["line-rate"]
1575
+ package_element.attrib['branches-valid'] = root.attrib["branches-valid"]
1576
+ package_element.attrib['branches-covered'] = root.attrib["branches-covered"]
1577
+ package_element.attrib['branch-rate'] = root.attrib["branch-rate"]
1578
+ package_element.attrib['timestamp'] = root.attrib["timestamp"]
1579
+ package_element.attrib['complexity'] = root.attrib["complexity"]
1580
+
1581
+ classes_element = etree.SubElement(package_element, "classes")
1582
+
1583
+ for existing_class in existing_classes:
1584
+ classes_element.append(existing_class)
1585
+
1586
+ result = etree.tostring(roottree, pretty_print=True).decode("utf-8")
1587
+ GeneralUtilities.write_text_to_file(target_file, result)
1588
+
1589
+ # post tasks
1553
1590
  self.run_testcases_common_post_task(repository_folder, codeunit_name, verbosity, generate_badges, build_environment_target_type, commandline_arguments)
1554
1591
 
1555
1592
  @GeneralUtilities.check_arguments
@@ -1664,7 +1701,7 @@ class TasksForCommonProjectStructure:
1664
1701
  raise ValueError("Too many results found.")
1665
1702
 
1666
1703
  @GeneralUtilities.check_arguments
1667
- def copy_development_certificate_to_default_development_directory(self, codeunit_folder: str, build_environment: str, domain: str = None, certificate_resource_name: str = "DevelopmentCertificate") -> None:
1704
+ def copy_development_certificate_to_default_development_directory(self, codeunit_folder: str, build_environment: str, domain: str = None, certificate_resource_name: str = "DevelopmentCertificate") -> None:
1668
1705
  if build_environment == "Development":
1669
1706
  codeunit_name: str = os.path.basename(codeunit_folder)
1670
1707
  if domain is None:
@@ -1736,13 +1773,14 @@ class TasksForCommonProjectStructure:
1736
1773
  GeneralUtilities.write_message_to_stdout("Generate OpenAPI-specification-file...")
1737
1774
  codeunitname = os.path.basename(str(Path(os.path.dirname(buildscript_file)).parent.parent.absolute()))
1738
1775
  repository_folder = str(Path(os.path.dirname(buildscript_file)).parent.parent.parent.absolute())
1739
- artifacts_folder = os.path.join(repository_folder, codeunitname, "Other", "Artifacts")
1776
+ codeunit_folder = os.path.join(repository_folder, codeunitname)
1777
+ artifacts_folder = os.path.join(codeunit_folder, "Other", "Artifacts")
1740
1778
  GeneralUtilities.ensure_directory_exists(os.path.join(artifacts_folder, "APISpecification"))
1741
1779
  verbosity = self.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
1742
- codeunit_version = self.get_version_of_codeunit_folder(os.path.join(repository_folder, codeunitname))
1743
- self.__sc.run_program("swagger", f"tofile --output APISpecification\\{codeunitname}.v{codeunit_version}.api.json" +
1744
- f" BuildResult_DotNet_{runtime}\\{codeunitname}.dll {swagger_document_name}",
1745
- artifacts_folder, verbosity=verbosity)
1780
+ codeunit_version = self.get_version_of_codeunit_folder(codeunit_folder)
1781
+ versioned_api_spec_file = f"APISpecification/{codeunitname}.v{codeunit_version}.api.json"
1782
+ self.__sc.run_program("swagger", f"tofile --output {versioned_api_spec_file} BuildResult_DotNet_{runtime}/{codeunitname}.dll {swagger_document_name}", artifacts_folder, verbosity=verbosity)
1783
+ shutil.copyfile(os.path.join(artifacts_folder, versioned_api_spec_file), os.path.join(artifacts_folder, f"APISpecification/{codeunitname}.latest.api.json"))
1746
1784
 
1747
1785
  @GeneralUtilities.check_arguments
1748
1786
  def replace_version_in_packagejson_file(self, packagejson_file: str, codeunit_version: str) -> None:
@@ -1754,8 +1792,8 @@ class TasksForCommonProjectStructure:
1754
1792
  json.dump(data, f, indent=2)
1755
1793
 
1756
1794
  @GeneralUtilities.check_arguments
1757
- def build_dependent_code_units(self, repo_folder: str, codeunit_name: str, verbosity: int, target_environmenttype: str, additional_arguments_file: str, commandlinearguments:list[str]) -> None:
1758
- verbosity=self.get_verbosity_from_commandline_arguments(commandlinearguments,verbosity)
1795
+ def build_dependent_code_units(self, repo_folder: str, codeunit_name: str, verbosity: int, target_environmenttype: str, additional_arguments_file: str, commandlinearguments: list[str]) -> None:
1796
+ verbosity = self.get_verbosity_from_commandline_arguments(commandlinearguments, verbosity)
1759
1797
  codeunit_file = os.path.join(repo_folder, codeunit_name, codeunit_name + ".codeunit.xml")
1760
1798
  dependent_codeunits = self.get_dependent_code_units(codeunit_file)
1761
1799
  dependent_codeunits_folder = os.path.join(repo_folder, codeunit_name, "Other", "Resources", "DependentCodeUnits")
@@ -1763,7 +1801,7 @@ class TasksForCommonProjectStructure:
1763
1801
  if 0 < len(dependent_codeunits):
1764
1802
  GeneralUtilities.write_message_to_stdout(f"Start building dependent codeunits for codeunit {codeunit_name}.")
1765
1803
  for dependent_codeunit in dependent_codeunits:
1766
- self.__build_codeunit(os.path.join(repo_folder, dependent_codeunit), verbosity, target_environmenttype, additional_arguments_file,False,False,commandlinearguments)
1804
+ self.__build_codeunit(os.path.join(repo_folder, dependent_codeunit), verbosity, target_environmenttype, additional_arguments_file, False, False, commandlinearguments)
1767
1805
  if 0 < len(dependent_codeunits):
1768
1806
  GeneralUtilities.write_message_to_stdout(f"Finished building dependent codeunits for codeunit {codeunit_name}.")
1769
1807
 
@@ -1791,8 +1829,7 @@ class TasksForCommonProjectStructure:
1791
1829
  for codeunit in codeunits:
1792
1830
  artifact_files.append(self.__sc.find_file_by_extension(f"{build_artifacts_folder}\\{productname}\\{projectversion}\\{codeunit}", "Productive.Artifacts.zip"))
1793
1831
  changelog_file = os.path.join(repository_folder, "Other", "Resources", "Changelog", f"v{projectversion}.md")
1794
- self.__sc.run_program_argsasarray("gh", ["release", "create", f"v{projectversion}", "--repo", github_repo, "--notes-file", changelog_file,
1795
- "--title", f"Release v{projectversion}"]+artifact_files, verbosity=verbosity)
1832
+ self.__sc.run_program_argsasarray("gh", ["release", "create", f"v{projectversion}", "--repo", github_repo, "--notes-file", changelog_file, "--title", f"Release v{projectversion}"]+artifact_files, verbosity=verbosity)
1796
1833
 
1797
1834
  @GeneralUtilities.check_arguments
1798
1835
  def update_dependencies_of_typical_flutter_codeunit(self, update_script_file: str, verbosity: int, cmd_args: list[str]) -> None:
@@ -1830,6 +1867,9 @@ class TasksForCommonProjectStructure:
1830
1867
  @GeneralUtilities.check_arguments
1831
1868
  def run_local_test_service(self, file: str):
1832
1869
  example_folder = os.path.dirname(file)
1870
+ docker_compose_file = os.path.join(example_folder, "docker-compose.yml")
1871
+ for service in self.__sc.get_services_from_yaml_file(docker_compose_file):
1872
+ self.__sc.kill_docker_container(service)
1833
1873
  example_name = os.path.basename(example_folder)
1834
1874
  title = f"Test{example_name}"
1835
1875
  self.__sc.run_program("docker", f"compose -p {title.lower()} up", example_folder, title=title)
@@ -1915,33 +1955,31 @@ class TasksForCommonProjectStructure:
1915
1955
  raise ValueError(f"Invalid target-environmenttype: '{target_environmenttype}'")
1916
1956
 
1917
1957
  @GeneralUtilities.check_arguments
1918
- def build_codeunit(self, codeunit_folder: 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 = False,commandlinearguments:list[str]=[]) -> None:
1958
+ def build_codeunit(self, codeunit_folder: 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 = False, commandlinearguments: list[str] = []) -> None:
1919
1959
  codeunit_folder = GeneralUtilities.resolve_relative_path_from_current_working_directory(codeunit_folder)
1920
1960
  codeunit_name = os.path.basename(codeunit_folder)
1921
1961
  repository_folder = os.path.dirname(codeunit_folder)
1922
- self.build_specific_codeunits(repository_folder, [codeunit_name], verbosity, target_environmenttype, additional_arguments_file, is_pre_merge, export_target_directory, assume_dependent_codeunits_are_already_built,commandlinearguments)
1962
+ self.build_specific_codeunits(repository_folder, [codeunit_name], verbosity, target_environmenttype, additional_arguments_file, is_pre_merge, export_target_directory, assume_dependent_codeunits_are_already_built, commandlinearguments)
1923
1963
 
1924
1964
  @GeneralUtilities.check_arguments
1925
- def build_codeunitsC(self, repository_folder: str, image: str, verbosity: int = 1, target_environmenttype: str = "QualityCheck", additional_arguments_file: str = None,commandlinearguments:list[str]=[]) -> None:
1965
+ def build_codeunitsC(self, repository_folder: str, image: str, verbosity: int = 1, target_environmenttype: str = "QualityCheck", additional_arguments_file: str = None, commandlinearguments: list[str] = []) -> None:
1926
1966
  if target_environmenttype == "Development":
1927
1967
  raise ValueError(f"build_codeunitsC is not available for target_environmenttype {target_environmenttype}.")
1928
1968
  # TODO handle additional_arguments_file
1929
1969
  # TODO add option to allow building different codeunits in same project with different images due to their demands
1930
1970
  # TODO check if image provides all demands of codeunit
1931
1971
  self.__sc.run_program(
1932
- "docker", f"run --volume {repository_folder}:/Workspace/Repository " +
1933
- f"-e repositoryfolder=/Workspace/Repository -e verbosity={verbosity} -e targetenvironment={target_environmenttype} {image}",
1934
- repository_folder)
1972
+ "docker", f"run --volume {repository_folder}:/Workspace/Repository " + f"-e repositoryfolder=/Workspace/Repository -e verbosity={verbosity} -e targetenvironment={target_environmenttype} {image}", repository_folder)
1935
1973
 
1936
1974
  @GeneralUtilities.check_arguments
1937
- def build_codeunits(self, repository_folder: str, verbosity: int = 1, target_environmenttype: str = "QualityCheck", additional_arguments_file: str = None, is_pre_merge: bool = False, export_target_directory: str = None,commandline_arguments:list[str]=[]) -> None:
1975
+ def build_codeunits(self, repository_folder: str, verbosity: int = 1, target_environmenttype: str = "QualityCheck", additional_arguments_file: str = None, is_pre_merge: bool = False, export_target_directory: str = None, commandline_arguments: list[str] = []) -> None:
1938
1976
  self.__check_target_environmenttype(target_environmenttype)
1939
1977
  repository_folder = GeneralUtilities.resolve_relative_path_from_current_working_directory(repository_folder)
1940
1978
  codeunits = self.get_codeunits(repository_folder, False)
1941
- self.build_specific_codeunits(repository_folder, codeunits, verbosity, target_environmenttype, additional_arguments_file, is_pre_merge, export_target_directory,False,commandline_arguments)
1979
+ self.build_specific_codeunits(repository_folder, codeunits, verbosity, target_environmenttype, additional_arguments_file, is_pre_merge, export_target_directory, False, commandline_arguments)
1942
1980
 
1943
1981
  @GeneralUtilities.check_arguments
1944
- 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]=[]) -> None:
1982
+ 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] = []) -> None:
1945
1983
  self.__check_target_environmenttype(target_environmenttype)
1946
1984
  repository_folder = GeneralUtilities.resolve_relative_path_from_current_working_directory(repository_folder)
1947
1985
  contains_uncommitted_changes = self.__sc.git_repository_has_uncommitted_changes(repository_folder)
@@ -1971,8 +2009,7 @@ class TasksForCommonProjectStructure:
1971
2009
  line = "----------"
1972
2010
  for codeunit in sorted_codeunits:
1973
2011
  GeneralUtilities.write_message_to_stdout(line)
1974
- self.__build_codeunit(os.path.join(repository_folder, codeunit), verbosity, target_environmenttype,
1975
- additional_arguments_file, is_pre_merge, assume_dependent_codeunits_are_already_built,commandline_arguments)
2012
+ 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)
1976
2013
  GeneralUtilities.write_message_to_stdout(line)
1977
2014
  if not contains_uncommitted_changes and self.__sc.git_repository_has_uncommitted_changes(repository_folder) and not is_pre_merge:
1978
2015
  message = f'Due to the build-process the repository "{repository_folder}" has new uncommitted changes.'
@@ -2003,7 +2040,7 @@ class TasksForCommonProjectStructure:
2003
2040
 
2004
2041
  @GeneralUtilities.check_arguments
2005
2042
  def __check_if_folder_is_git_repository(self, repository_folder: str) -> None:
2006
- if(not self.__sc.is_git_repository(repository_folder)):
2043
+ if (not self.__sc.is_git_repository(repository_folder)):
2007
2044
  raise ValueError(f"Folder {repository_folder} is not a git-repository")
2008
2045
 
2009
2046
  @GeneralUtilities.check_arguments
@@ -2146,7 +2183,7 @@ class TasksForCommonProjectStructure:
2146
2183
  for file in GeneralUtilities.get_all_files_of_folder(files_folder):
2147
2184
  if file.endswith(".plantuml"):
2148
2185
  argument = ['-jar', f'{plant_uml_folder}/plantuml.jar', os.path.basename(file).replace("\\", "/"), '-tsvg']
2149
- sc.run_program_argsasarray("java", argument, os.path.dirname(file),verbosity=0)
2186
+ sc.run_program_argsasarray("java", argument, os.path.dirname(file), verbosity=0)
2150
2187
 
2151
2188
  @GeneralUtilities.check_arguments
2152
2189
  def load_deb_control_file_content(self, file: str, codeunitname: str, codeunitversion: str, installedsize: int, maintainername: str, maintaineremail: str, description: str,) -> str:
@@ -2224,7 +2261,7 @@ class TasksForCommonProjectStructure:
2224
2261
  GeneralUtilities.write_message_to_stderr(f"Warning: {message}")
2225
2262
 
2226
2263
  @GeneralUtilities.check_arguments
2227
- def __build_codeunit(self, codeunit_folder: str, verbosity: int = 1, target_environmenttype: str = "QualityCheck", additional_arguments_file: str = None, is_pre_merge: bool = False, assume_dependent_codeunits_are_already_built: bool = False,commandline_arguments:list[str]=[]) -> None:
2264
+ def __build_codeunit(self, codeunit_folder: str, verbosity: int = 1, target_environmenttype: str = "QualityCheck", additional_arguments_file: str = None, is_pre_merge: bool = False, assume_dependent_codeunits_are_already_built: bool = False, commandline_arguments: list[str] = []) -> None:
2228
2265
  now = datetime.now()
2229
2266
  codeunit_folder = GeneralUtilities.resolve_relative_path_from_current_working_directory(codeunit_folder)
2230
2267
  codeunit_name: str = os.path.basename(codeunit_folder)
@@ -2242,7 +2279,7 @@ class TasksForCommonProjectStructure:
2242
2279
  GeneralUtilities.write_message_to_stdout(f"Build-environmenttype: {target_environmenttype}")
2243
2280
  GeneralUtilities.ensure_directory_does_not_exist(artifacts_folder)
2244
2281
 
2245
- verbosity_for_executed_programs = self.get_verbosity_from_commandline_arguments(commandline_arguments,verbosity)
2282
+ verbosity_for_executed_programs = self.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
2246
2283
 
2247
2284
  other_folder = os.path.join(codeunit_folder, "Other")
2248
2285
  build_folder = os.path.join(other_folder, "Build")
@@ -2340,13 +2377,15 @@ class TasksForCommonProjectStructure:
2340
2377
  def generic_update_dependencies(self, repository_folder: str):
2341
2378
  codeunits = self.get_codeunits(repository_folder)
2342
2379
  updated_dependencies = False
2380
+ verbosity: int = 1 # TODO set value dynamically
2343
2381
  for codeunit in codeunits:
2344
2382
  codeunit_file = os.path.join(repository_folder, codeunit, f"{codeunit}.codeunit.xml")
2345
2383
  codeunit_has_updatable_dependencies = self.codeunit_has_updatable_dependencies(codeunit_file)
2346
2384
  if codeunit_has_updatable_dependencies:
2347
2385
  codeunit_folder = os.path.join(repository_folder, codeunit)
2348
2386
  update_dependencies_script_folder = os.path.join(codeunit_folder, "Other")
2349
- self.__sc.run_program("python", "UpdateDependencies.py", update_dependencies_script_folder)#TODO set verbosity
2387
+ GeneralUtilities.ensure_directory_exists(os.path.join(update_dependencies_script_folder, "Resources", "CodeAnalysisResult"))
2388
+ self.__sc.run_program("python", "UpdateDependencies.py", update_dependencies_script_folder, verbosity)
2350
2389
  if self.__sc.git_repository_has_uncommitted_changes(repository_folder):
2351
2390
  version_of_project = self.get_version_of_project(repository_folder)
2352
2391
  changelog_file = os.path.join(repository_folder, "Other", "Resources", "Changelog", f"v{version_of_project}.md")
@@ -2362,7 +2401,7 @@ class TasksForCommonProjectStructure:
2362
2401
  else:
2363
2402
  GeneralUtilities.write_message_to_stdout(f"There are no dependencies to update in codeunit {codeunit}.")
2364
2403
  if updated_dependencies:
2365
- self.__sc.run_program("scbuildcodeunits", "--targetenvironment QualityCheck", repository_folder)#TODO set verbosity
2404
+ self.__sc.run_program("scbuildcodeunits", "--targetenvironment QualityCheck", repository_folder) # TODO set verbosity
2366
2405
  self.__sc.git_commit(repository_folder, "Updated dependencies")
2367
2406
 
2368
2407
  class GenericPrepareNewReleaseArguments:
@@ -2389,7 +2428,7 @@ class TasksForCommonProjectStructure:
2389
2428
  # prepare
2390
2429
  self.assert_no_uncommitted_changes(repository_folder)
2391
2430
  self.__sc.git_checkout(repository_folder, merge_source_branch)
2392
- if not "--prevent-dependency-update" in generic_prepare_new_release_arguments.commandline_arguments:
2431
+ if "--dependencyupdate" in generic_prepare_new_release_arguments.commandline_arguments:
2393
2432
  self.generic_update_dependencies(repository_folder)
2394
2433
  self.merge_to_main_branch(repository_folder, merge_source_branch, verbosity=verbosity, fast_forward_source_branch=True)
2395
2434
  self.__sc.git_commit(build_repository_folder, "Updated submodule due to merge to main-branch.")
@@ -2401,7 +2440,7 @@ class TasksForCommonProjectStructure:
2401
2440
  artifacts_target_folder: str
2402
2441
  commandline_arguments: list[str]
2403
2442
 
2404
- def __init__(self, current_file: str, product_name: str, common_remote_name: str, artifacts_target_folder: str,commandline_arguments: list[str]):
2443
+ def __init__(self, current_file: str, product_name: str, common_remote_name: str, artifacts_target_folder: str, commandline_arguments: list[str]):
2405
2444
  self.current_file = current_file
2406
2445
  self.product_name = product_name
2407
2446
  self.common_remote_name = common_remote_name
@@ -2409,7 +2448,7 @@ class TasksForCommonProjectStructure:
2409
2448
  self.commandline_arguments = commandline_arguments
2410
2449
 
2411
2450
  @GeneralUtilities.check_arguments
2412
- def generic_create_release(self, generic_create_release_arguments:GenericCreateReleaseArguments) -> str:
2451
+ def generic_create_release(self, generic_create_release_arguments: GenericCreateReleaseArguments) -> str:
2413
2452
  folder_of_this_file = os.path.dirname(generic_create_release_arguments.current_file)
2414
2453
  build_repository_folder = GeneralUtilities.resolve_relative_path("../..", folder_of_this_file)
2415
2454
  repository_folder_name = generic_create_release_arguments.product_name
@@ -2418,10 +2457,18 @@ class TasksForCommonProjectStructure:
2418
2457
  verbosity: int = TasksForCommonProjectStructure.get_verbosity_from_commandline_arguments(generic_create_release_arguments.commandline_arguments, 1)
2419
2458
  createReleaseConfiguration: CreateReleaseConfiguration = CreateReleaseConfiguration(
2420
2459
  generic_create_release_arguments.product_name, generic_create_release_arguments.common_remote_name, generic_create_release_arguments.artifacts_target_folder, folder_of_this_file, verbosity, repository_folder, additional_arguments_file, repository_folder_name)
2460
+
2461
+ reference_repo: str = os.path.join(build_repository_folder, "Submodules", f"{generic_create_release_arguments.product_name}Reference")
2462
+ self.__sc.git_commit(reference_repo, "Updated reference")
2463
+
2421
2464
  self.__sc.git_commit(build_repository_folder, "Updated submodule")
2422
2465
 
2423
2466
  # create release
2424
2467
  new_version = self.merge_to_stable_branch(generic_create_release_arguments.current_file, createReleaseConfiguration)
2468
+
2469
+ merge_source_branch = "other/next-release"
2470
+ self.__sc.git_checkout(repository_folder, merge_source_branch)
2471
+
2425
2472
  return new_version
2426
2473
 
2427
2474
  class UpdateHTTPDocumentationArguments:
@@ -40,7 +40,7 @@ class CertificateUpdater:
40
40
  print(filenames)
41
41
  numbers = [int(file[len("privkey"):]) for file in filenames]
42
42
  # numbers=[]
43
- #print([os.path.basename(file) for file in filenames])
43
+ # print([os.path.basename(file) for file in filenames])
44
44
  result = max(numbers)
45
45
  return result
46
46
 
@@ -108,7 +108,7 @@ class CertificateUpdater:
108
108
  dockerargument = f"run --name {certbot_container_name} --volume {self.__letsencrypt_folder}:/etc/letsencrypt"
109
109
  dockerargument = dockerargument+f" --volume {self.__log_folder}:/var/log/letsencrypt -p 80:80 certbot/certbot:latest"
110
110
  certbotargument = f"--standalone --email {self.__email} --agree-tos --force-renewal --rsa-key-size 4096 --non-interactive --no-eff-email --domain {domain}"
111
- if(certificate_for_domain_already_exists):
111
+ if (certificate_for_domain_already_exists):
112
112
  self.__sc.run_program("docker", f"{dockerargument} certonly --no-random-sleep-on-renew {certbotargument}", self.__current_folder, throw_exception_if_exitcode_is_not_zero=True)
113
113
  self.__replace_symlinks_by_files(domain)
114
114
  else:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ScriptCollection
3
- Version: 3.5.3
3
+ Version: 3.5.4
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
@@ -37,6 +37,7 @@ Requires-Dist: pylint >=3.2.0
37
37
  Requires-Dist: pyOpenSSL >=24.1.0
38
38
  Requires-Dist: PyPDF2 >=3.0.1
39
39
  Requires-Dist: pytest >=8.2.0
40
+ Requires-Dist: PyYAML >=6.0.1
40
41
  Requires-Dist: qrcode >=7.4.2
41
42
  Requires-Dist: send2trash >=1.8.3
42
43
  Requires-Dist: twine >=5.0.0
@@ -0,0 +1,16 @@
1
+ ScriptCollection/Executables.py,sha256=PXXsKmof-Lw4gQcQ8IL0diYiU535FVxJfHRdAY7EntA,19233
2
+ ScriptCollection/GeneralUtilities.py,sha256=Mcp6ghb6AbS1KsOjEnRw3x4a4mBrAZ6DAjV2j8-LZFM,35589
3
+ ScriptCollection/ProcessesRunner.py,sha256=3mu4ZxzZleQo0Op6o9EYTCFiJfb6kx5ov2YfZfT89mU,1395
4
+ ScriptCollection/ProgramRunnerBase.py,sha256=W4MaDroJHARRtcvPkBC2AS_qgDSRIqOkMvGyycZjtPk,2371
5
+ ScriptCollection/ProgramRunnerEpew.py,sha256=lx_jR3W8KavBpZo44u2FrOca_EWWgUb3_w_YKGRrAyM,6471
6
+ ScriptCollection/ProgramRunnerPopen.py,sha256=5QFplojwfGS8_WdYrg5nE6__QFB5iaMA0EP8OGfgPoY,3526
7
+ ScriptCollection/RPStream.py,sha256=NRRHL3YSP3D9MuAV2jB_--0KUKCsvJGxeKnxgrRZ9kY,1545
8
+ ScriptCollection/ScriptCollectionCore.py,sha256=AxOvDgrExHfoBNBqRQbDtTdqOjvEfIhmRUKanNwZYCc,97562
9
+ ScriptCollection/TasksForCommonProjectStructure.py,sha256=JLp43wCRcY62rC0UErBCPOHQaKh6Ujtj3sDTxq3cz54,177788
10
+ ScriptCollection/UpdateCertificates.py,sha256=lfmVuify-Fqq-vGJusDDUsJVhA-rVLwW2Jx9iLwmkBo,7916
11
+ ScriptCollection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ ScriptCollection-3.5.4.dist-info/METADATA,sha256=u8vV56vbKQP8FoiLLJM4Q_nZ0qTd6NMlHMQDjddK4ZQ,7679
13
+ ScriptCollection-3.5.4.dist-info/WHEEL,sha256=-oYQCr74JF3a37z2nRlQays_SX2MqOANoqVjBBAP2yE,91
14
+ ScriptCollection-3.5.4.dist-info/entry_points.txt,sha256=dwvB9HRGvqst5xlYIGmmwuFN7lBKhxvndmnNrQOfu8w,2153
15
+ ScriptCollection-3.5.4.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
16
+ ScriptCollection-3.5.4.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (71.0.3)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,14 +0,0 @@
1
- ScriptCollection/Executables.py,sha256=PXXsKmof-Lw4gQcQ8IL0diYiU535FVxJfHRdAY7EntA,19233
2
- ScriptCollection/GeneralUtilities.py,sha256=Mcp6ghb6AbS1KsOjEnRw3x4a4mBrAZ6DAjV2j8-LZFM,35589
3
- ScriptCollection/ProgramRunnerBase.py,sha256=W4MaDroJHARRtcvPkBC2AS_qgDSRIqOkMvGyycZjtPk,2371
4
- ScriptCollection/ProgramRunnerEpew.py,sha256=lx_jR3W8KavBpZo44u2FrOca_EWWgUb3_w_YKGRrAyM,6471
5
- ScriptCollection/ProgramRunnerPopen.py,sha256=5QFplojwfGS8_WdYrg5nE6__QFB5iaMA0EP8OGfgPoY,3526
6
- ScriptCollection/ScriptCollectionCore.py,sha256=XZ27_3LwElxYJpbSGt8HKuFJ3nbkdl6iY7MCk4xop7k,99240
7
- ScriptCollection/TasksForCommonProjectStructure.py,sha256=CDVhsAJfRt_bQr4aYGtg1PD1Dl41EAMHNhD5sdiznWM,175039
8
- ScriptCollection/UpdateCertificates.py,sha256=3C_E9og5SZec35aD3BFYLchzJtonsg1KR4enFCb5Jzk,7914
9
- ScriptCollection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- ScriptCollection-3.5.3.dist-info/METADATA,sha256=LywbFi47FasPv7OMXGLtKv3kq9YRuozOBanMzEJnF2I,7648
11
- ScriptCollection-3.5.3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
12
- ScriptCollection-3.5.3.dist-info/entry_points.txt,sha256=dwvB9HRGvqst5xlYIGmmwuFN7lBKhxvndmnNrQOfu8w,2153
13
- ScriptCollection-3.5.3.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
14
- ScriptCollection-3.5.3.dist-info/RECORD,,