ScriptCollection 3.4.3__py3-none-any.whl → 3.4.6__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.
@@ -72,17 +72,6 @@ def CalculateBitcoinBlockHash() -> int:
72
72
  return 0
73
73
 
74
74
 
75
- def UpdateNugetpackagesInCsharpProject() -> int:
76
-
77
- parser = argparse.ArgumentParser(description="""TODO""")
78
- parser.add_argument('csprojfile')
79
- args = parser.parse_args()
80
- if ScriptCollectionCore().SCUpdateNugetpackagesInCsharpProject(args.csprojfile):
81
- return 1
82
- else:
83
- return 0
84
-
85
-
86
75
  def Show2FAAsQRCode():
87
76
 
88
77
  parser = argparse.ArgumentParser(description="""Always when you use 2-factor-authentication you have the problem:
@@ -319,6 +308,7 @@ def GenerateCertificateAuthority() -> int:
319
308
 
320
309
  def GenerateCertificate() -> int:
321
310
  parser = argparse.ArgumentParser()
311
+ parser.add_argument('--filename', required=True)
322
312
  parser.add_argument('--domain', required=True)
323
313
  parser.add_argument('--subj_c', required=True)
324
314
  parser.add_argument('--subj_st', required=True)
@@ -328,12 +318,14 @@ def GenerateCertificate() -> int:
328
318
  parser.add_argument('--days_until_expire', required=False, default=None, type=int)
329
319
  parser.add_argument('--password', required=False, default=None)
330
320
  args = parser.parse_args()
331
- ScriptCollectionCore().generate_certificate(os.getcwd(), args.domain, args.subj_c, args.subj_st, args.subj_l, args.subj_o, args.subj_ou, args.days_until_expire, args.password)
321
+ ScriptCollectionCore().generate_certificate(os.getcwd(), args.domain, args.filename, args.subj_c, args.subj_st,
322
+ args.subj_l, args.subj_o, args.subj_ou, args.days_until_expire, args.password)
332
323
  return 0
333
324
 
334
325
 
335
326
  def GenerateCertificateSignRequest() -> int:
336
327
  parser = argparse.ArgumentParser()
328
+ parser.add_argument('--filename', required=True)
337
329
  parser.add_argument('--domain', required=True)
338
330
  parser.add_argument('--subj_c', required=True)
339
331
  parser.add_argument('--subj_st', required=True)
@@ -341,7 +333,7 @@ def GenerateCertificateSignRequest() -> int:
341
333
  parser.add_argument('--subj_o', required=True)
342
334
  parser.add_argument('--subj_ou', required=True)
343
335
  args = parser.parse_args()
344
- ScriptCollectionCore().generate_certificate_sign_request(os.getcwd(), args.domain, args.subj_c, args.subj_st, args.subj_l, args.subj_o, args.sub_ou)
336
+ ScriptCollectionCore().generate_certificate_sign_request(os.getcwd(), args.domain, args.filename, args.subj_c, args.subj_st, args.subj_l, args.subj_o, args.sub_ou)
345
337
  return 0
346
338
 
347
339
 
@@ -350,7 +342,8 @@ def SignCertificate() -> int:
350
342
  parser.add_argument('--cafolder', required=True)
351
343
  parser.add_argument('--caname', required=True)
352
344
  parser.add_argument('--targetcertificate', required=True)
345
+ parser.add_argument('--filename', required=True)
353
346
  parser.add_argument('--days_until_expire', required=False, default=None, type=int)
354
347
  args = parser.parse_args()
355
- ScriptCollectionCore().sign_certificate(os.getcwd(), args.cafolder, args.caname, args.targetcertificate, args.args.days_until_expire)
348
+ ScriptCollectionCore().sign_certificate(os.getcwd(), args.cafolder, args.caname, args.targetcertificate, args.filename, args.args.days_until_expire)
356
349
  return 0
@@ -29,7 +29,7 @@ from .ProgramRunnerPopen import ProgramRunnerPopen
29
29
  from .ProgramRunnerEpew import ProgramRunnerEpew, CustomEpewArgument
30
30
 
31
31
 
32
- version = "3.4.3"
32
+ version = "3.4.6"
33
33
  __version__ = version
34
34
 
35
35
 
@@ -879,16 +879,6 @@ class ScriptCollectionCore:
879
879
  self.__print_qr_code_by_csv_line(line[0], line[1], line[2], line[3], line[4])
880
880
  GeneralUtilities.write_message_to_stdout(separator_line)
881
881
 
882
- @GeneralUtilities.check_arguments
883
- def SCUpdateNugetpackagesInCsharpProject(self, csprojfile: str) -> int:
884
- outdated_packages = self.get_nuget_packages_of_csproj_file(csprojfile, True)
885
- GeneralUtilities.write_message_to_stdout("The following packages will be updated:")
886
- for outdated_package in outdated_packages:
887
- GeneralUtilities.write_message_to_stdout(outdated_package)
888
- self.update_nuget_package(csprojfile, outdated_package)
889
- GeneralUtilities.write_message_to_stdout(f"{len(outdated_packages)} package(s) were updated")
890
- return len(outdated_packages) > 0
891
-
892
882
  @GeneralUtilities.check_arguments
893
883
  def SCUploadFileToFileHost(self, file: str, host: str) -> int:
894
884
  try:
@@ -1118,25 +1108,6 @@ class ScriptCollectionCore:
1118
1108
  GeneralUtilities.ensure_file_does_not_exist(coveragefile)
1119
1109
  os.rename(os.path.join(repository_folder, "coverage.xml"), coveragefile)
1120
1110
 
1121
- @GeneralUtilities.check_arguments
1122
- def get_nuget_packages_of_csproj_file(self, csproj_file: str, only_outdated_packages: bool) -> bool:
1123
- self.run_program("dotnet", f'restore --disable-parallel --force --force-evaluate "{csproj_file}"')
1124
- if only_outdated_packages:
1125
- only_outdated_packages_argument = " --outdated"
1126
- else:
1127
- only_outdated_packages_argument = ""
1128
- stdout = self.run_program("dotnet", f'list "{csproj_file}" package{only_outdated_packages_argument}')[1]
1129
- result = []
1130
- for line in stdout.splitlines():
1131
- trimmed_line = line.replace("\t", "").strip()
1132
- if trimmed_line.startswith(">"):
1133
- result.append(trimmed_line[2:].split(" ")[0])
1134
- return result
1135
-
1136
- @GeneralUtilities.check_arguments
1137
- def update_nuget_package(self, csproj_file: str, name: str) -> None:
1138
- self.run_program("dotnet", f'add "{csproj_file}" package {name}')
1139
-
1140
1111
  @GeneralUtilities.check_arguments
1141
1112
  def get_file_permission(self, file: str) -> str:
1142
1113
  """This function returns an usual octet-triple, for example "0700"."""
@@ -1546,19 +1517,19 @@ class ScriptCollectionCore:
1546
1517
  f'-keyout {name}.key -out {name}.crt', folder)
1547
1518
 
1548
1519
  @GeneralUtilities.check_arguments
1549
- def generate_certificate(self, folder: str, domain: str, subj_c: str, subj_st: str, subj_l: str, subj_o: str, subj_ou: str,
1520
+ def generate_certificate(self, folder: str, domain: str, filename: str, subj_c: str, subj_st: str, subj_l: str, subj_o: str, subj_ou: str,
1550
1521
  days_until_expire: int = None, password: str = None) -> None:
1551
1522
  if days_until_expire is None:
1552
1523
  days_until_expire = 397
1553
1524
  if password is None:
1554
1525
  password = GeneralUtilities.generate_password()
1555
1526
  rsa_key_length = 4096
1556
- self.run_program("openssl", f'genrsa -out {domain}.key {rsa_key_length}', folder)
1527
+ self.run_program("openssl", f'genrsa -out {filename}.key {rsa_key_length}', folder)
1557
1528
  self.run_program("openssl", f'req -new -subj /C={subj_c}/ST={subj_st}/L={subj_l}/O={subj_o}/CN={domain}/OU={subj_ou} -x509 ' +
1558
- f'-key {domain}.key -out {domain}.unsigned.crt -days {days_until_expire}', folder)
1559
- self.run_program("openssl", f'pkcs12 -export -out {domain}.selfsigned.pfx -password pass:{password} -inkey {domain}.key -in {domain}.unsigned.crt', folder)
1560
- GeneralUtilities.write_text_to_file(os.path.join(folder, f"{domain}.password"), password)
1561
- GeneralUtilities.write_text_to_file(os.path.join(folder, f"{domain}.san.conf"), f"""[ req ]
1529
+ f'-key {filename}.key -out {filename}.unsigned.crt -days {days_until_expire}', folder)
1530
+ self.run_program("openssl", f'pkcs12 -export -out {filename}.selfsigned.pfx -password pass:{password} -inkey {filename}.key -in {filename}.unsigned.crt', folder)
1531
+ GeneralUtilities.write_text_to_file(os.path.join(folder, f"{filename}.password"), password)
1532
+ GeneralUtilities.write_text_to_file(os.path.join(folder, f"{filename}.san.conf"), f"""[ req ]
1562
1533
  default_bits = {rsa_key_length}
1563
1534
  distinguished_name = req_distinguished_name
1564
1535
  req_extensions = v3_req
@@ -1582,20 +1553,20 @@ DNS = {domain}
1582
1553
  """)
1583
1554
 
1584
1555
  @GeneralUtilities.check_arguments
1585
- def generate_certificate_sign_request(self, folder: str, domain: str, subj_c: str, subj_st: str, subj_l: str, subj_o: str, subj_ou: str) -> None:
1556
+ def generate_certificate_sign_request(self, folder: str, domain: str, filename: str, subj_c: str, subj_st: str, subj_l: str, subj_o: str, subj_ou: str) -> None:
1586
1557
  self.run_program("openssl", f'req -new -subj /C={subj_c}/ST={subj_st}/L={subj_l}/O={subj_o}/CN={domain}/OU={subj_ou} ' +
1587
- f'-key {domain}.key -out {domain}.csr -config {domain}.san.conf', folder)
1558
+ f'-key {filename}.key -out {filename}.csr -config {filename}.san.conf', folder)
1588
1559
 
1589
1560
  @GeneralUtilities.check_arguments
1590
- def sign_certificate(self, folder: str, ca_folder: str, ca_name: str, domain: str, days_until_expire: int = None) -> None:
1561
+ def sign_certificate(self, folder: str, ca_folder: str, ca_name: str, domain: str, filename: str, days_until_expire: int = None) -> None:
1591
1562
  if days_until_expire is None:
1592
1563
  days_until_expire = 397
1593
1564
  ca = os.path.join(ca_folder, ca_name)
1594
- password_file = os.path.join(folder, f"{domain}.password")
1565
+ password_file = os.path.join(folder, f"{filename}.password")
1595
1566
  password = GeneralUtilities.read_text_from_file(password_file)
1596
- self.run_program("openssl", f'x509 -req -in {domain}.csr -CA {ca}.crt -CAkey {ca}.key -CAcreateserial -CAserial {ca}.srl ' +
1597
- f'-out {domain}.crt -days {days_until_expire} -sha256 -extensions v3_req -extfile {domain}.san.conf', folder)
1598
- self.run_program("openssl", f'pkcs12 -export -out {domain}.pfx -inkey {domain}.key -in {domain}.crt -password pass:{password}', folder)
1567
+ self.run_program("openssl", f'x509 -req -in {filename}.csr -CA {ca}.crt -CAkey {ca}.key -CAcreateserial -CAserial {ca}.srl ' +
1568
+ f'-out {filename}.crt -days {days_until_expire} -sha256 -extensions v3_req -extfile {filename}.san.conf', folder)
1569
+ self.run_program("openssl", f'pkcs12 -export -out {filename}.pfx -inkey {filename}.key -in {filename}.crt -password pass:{password}', folder)
1599
1570
 
1600
1571
  @GeneralUtilities.check_arguments
1601
1572
  def update_dependencies_of_python_in_requirementstxt_file(self, file: str, verbosity: int):
@@ -272,7 +272,7 @@ class TasksForCommonProjectStructure:
272
272
  if gpg_identity is None:
273
273
  gpg_identity_argument = ""
274
274
  else:
275
- pass # gpg_identity_argument = f" --sign --identity {gpg_identity}"
275
+ gpg_identity_argument = "" # f" --sign --identity {gpg_identity}"
276
276
  # disabled due to https://blog.pypi.org/posts/2023-05-23-removing-pgp/
277
277
 
278
278
  if verbosity > 2:
@@ -763,8 +763,7 @@ class TasksForCommonProjectStructure:
763
763
 
764
764
  @GeneralUtilities.check_arguments
765
765
  def standardized_tasks_run_testcases_for_dotnet_project(self, runtestcases_file: str, targetenvironmenttype: str, verbosity: int, generate_badges: bool,
766
- target_environmenttype_mapping: dict[str, str], commandline_arguments: list[str]):
767
- dotnet_build_configuration: str = target_environmenttype_mapping[targetenvironmenttype]
766
+ commandline_arguments: list[str]):
768
767
  codeunit_name: str = os.path.basename(str(Path(os.path.dirname(runtestcases_file)).parent.parent.absolute()))
769
768
  verbosity = TasksForCommonProjectStructure.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
770
769
  repository_folder: str = str(Path(os.path.dirname(runtestcases_file)).parent.parent.parent.absolute())
@@ -774,7 +773,7 @@ class TasksForCommonProjectStructure:
774
773
  runsettings_file = self.dotnet_runsettings_file
775
774
  if os.path.isfile(os.path.join(working_directory, runsettings_file)):
776
775
  runsettings_argument = f"--settings {runsettings_file} "
777
- arg = f"collect dotnet test {runsettings_argument}-c {dotnet_build_configuration} --output-format cobertura --output Other\\Artifacts\\TestCoverage\\Testcoverage"
776
+ arg = f"collect dotnet test {runsettings_argument} --no-build --output-format cobertura --output Other\\Artifacts\\TestCoverage\\Testcoverage"
778
777
  self.__sc.run_program("dotnet-coverage", arg, working_directory, verbosity=verbosity)
779
778
  os.rename(os.path.join(coverage_file_folder, "Testcoverage.cobertura.xml"), os.path.join(coverage_file_folder, "TestCoverage.xml"))
780
779
  self.run_testcases_common_post_task(repository_folder, codeunit_name, verbosity, generate_badges, targetenvironmenttype, commandline_arguments)
@@ -1009,14 +1008,18 @@ class TasksForCommonProjectStructure:
1009
1008
  raise ValueError(f"Repository '{repository_folder}' has uncommitted changes.")
1010
1009
 
1011
1010
  @GeneralUtilities.check_arguments
1012
- def generate_certificate_for_nonproductive_purposes(self, codeunit_folder: str,
1013
- resource_name: str = "DevelopmentCertificate"):
1014
- resources_folder = os.path.join(codeunit_folder, "Other", "Resources")
1015
- certificate_folder = os.path.join(resources_folder, resource_name)
1016
- dev_ca_name = "DevelopmentCertificateAuthority"
1017
- ca_folder = os.path.join(resources_folder, dev_ca_name)
1011
+ def generate_certificate_for_development_purposes(self, codeunit_folder: str, domain: str = None):
1018
1012
  codeunit_name = os.path.basename(codeunit_folder)
1019
- domain = f"{codeunit_name.lower()}.test.local"
1013
+ if domain is None:
1014
+ domain = f"{codeunit_name}.test.local"
1015
+ domain = domain.lower()
1016
+ resources_folder: str = os.path.join(codeunit_folder, "Other", "Resources")
1017
+ resource_name: str = "DevelopmentCertificate"
1018
+ certificate_folder: str = os.path.join(resources_folder, resource_name)
1019
+ resource_content_filename: str = codeunit_name+resource_name
1020
+ ca_resource_name: str = f"{resource_name}Authority"
1021
+ dev_ca_name = codeunit_name+ca_resource_name
1022
+ ca_folder = os.path.join(resources_folder, ca_resource_name)
1020
1023
  certificate_file = os.path.join(certificate_folder, f"{domain}.crt")
1021
1024
  unsignedcertificate_file = os.path.join(certificate_folder, f"{domain}.unsigned.crt")
1022
1025
  certificate_exists = os.path.exists(certificate_file)
@@ -1032,9 +1035,9 @@ class TasksForCommonProjectStructure:
1032
1035
  GeneralUtilities.ensure_directory_exists(ca_folder)
1033
1036
  GeneralUtilities.write_message_to_stdout("Generate TLS-certificate for development-purposes.")
1034
1037
  self.__sc.generate_certificate_authority(ca_folder, dev_ca_name, "DE", "SubjST", "SubjL", "SubjO", "SubjOU")
1035
- self.__sc.generate_certificate(certificate_folder, domain, "DE", "SubjST", "SubjL", "SubjO", "SubjOU")
1036
- self.__sc.generate_certificate_sign_request(certificate_folder, domain, "DE", "SubjST", "SubjL", "SubjO", "SubjOU")
1037
- self.__sc.sign_certificate(certificate_folder, ca_folder, dev_ca_name, domain)
1038
+ self.__sc.generate_certificate(certificate_folder, domain, resource_content_filename, "DE", "SubjST", "SubjL", "SubjO", "SubjOU")
1039
+ self.__sc.generate_certificate_sign_request(certificate_folder, domain, resource_content_filename, "DE", "SubjST", "SubjL", "SubjO", "SubjOU")
1040
+ self.__sc.sign_certificate(certificate_folder, ca_folder, dev_ca_name, domain, resource_content_filename)
1038
1041
  GeneralUtilities.ensure_file_does_not_exist(unsignedcertificate_file)
1039
1042
 
1040
1043
  @GeneralUtilities.check_arguments
@@ -1520,10 +1523,12 @@ class TasksForCommonProjectStructure:
1520
1523
  raise ValueError("Too many results found.")
1521
1524
 
1522
1525
  @GeneralUtilities.check_arguments
1523
- def set_constants_for_certificate_public_information(self, codeunit_folder: str, source_constant_name: str = "DevelopmentCertificate"):
1526
+ def set_constants_for_certificate_public_information(self, codeunit_folder: str, source_constant_name: str = "DevelopmentCertificate", domain: str = None):
1524
1527
  """Expects a certificate-resource and generates a constant for its public information"""
1525
1528
  codeunit_name = os.path.basename(codeunit_folder)
1526
- domain = f"{codeunit_name}.test.local"
1529
+ if domain is None:
1530
+ domain = f"{codeunit_name}.test.local"
1531
+ domain = domain.lower()
1527
1532
  certificate_file = os.path.join(codeunit_folder, "Other", "Resources", source_constant_name, f"{domain}.crt")
1528
1533
  with open(certificate_file, encoding="utf-8") as text_wrapper:
1529
1534
  certificate = crypto.load_certificate(crypto.FILETYPE_PEM, text_wrapper.read())
@@ -1533,9 +1538,10 @@ class TasksForCommonProjectStructure:
1533
1538
  @GeneralUtilities.check_arguments
1534
1539
  def set_constants_for_certificate_private_information(self, codeunit_folder: str, certificate_resource_name: str = "DevelopmentCertificate", domain: str = None):
1535
1540
  """Expects a certificate-resource and generates a constant for its sensitive information in hex-format"""
1541
+ codeunit_name = os.path.basename(codeunit_folder)
1536
1542
  if domain is None:
1537
- codeunit_name = os.path.basename(codeunit_folder)
1538
- domain = codeunit_name
1543
+ domain = f"{codeunit_name}.test.local"
1544
+ domain = domain.lower()
1539
1545
  self.generate_constant_from_resource_by_filename(codeunit_folder, certificate_resource_name, f"{domain}.test.local.pfx", "PFX")
1540
1546
  self.generate_constant_from_resource_by_filename(codeunit_folder, certificate_resource_name, f"{domain}.test.local.password", "Password")
1541
1547
 
@@ -1635,6 +1641,7 @@ class TasksForCommonProjectStructure:
1635
1641
 
1636
1642
  @GeneralUtilities.check_arguments
1637
1643
  def update_dependencies_of_typical_python_codeunit(self, update_script_file: str, verbosity: int, cmd_args: list[str]):
1644
+ # TODO generalize and add option to ignore certain dependencies
1638
1645
  verbosity = self.get_verbosity_from_commandline_arguments(cmd_args, verbosity)
1639
1646
  codeunit_folder = GeneralUtilities.resolve_relative_path("..", os.path.dirname(update_script_file))
1640
1647
  self.__sc.update_dependencies_of_python_in_setupcfg_file(os.path.join(codeunit_folder, "setup.cfg"), verbosity)
@@ -1644,6 +1651,7 @@ class TasksForCommonProjectStructure:
1644
1651
 
1645
1652
  @GeneralUtilities.check_arguments
1646
1653
  def update_dependencies_of_typical_dotnet_codeunit(self, update_script_file: str, verbosity: int, cmd_args: list[str]):
1654
+ # TODO generalize and add option to ignore certain dependencies
1647
1655
  verbosity = self.get_verbosity_from_commandline_arguments(cmd_args, verbosity)
1648
1656
  codeunit_folder = GeneralUtilities.resolve_relative_path("..", os.path.dirname(update_script_file))
1649
1657
  codeunit_name = os.path.basename(codeunit_folder)
@@ -1654,7 +1662,7 @@ class TasksForCommonProjectStructure:
1654
1662
 
1655
1663
  @GeneralUtilities.check_arguments
1656
1664
  def update_dependencies_of_typical_node_codeunit(self, update_script_file: str, verbosity: int, cmd_args: list[str]):
1657
- pass # TODO
1665
+ pass # TODO generalize and add option to ignore certain dependencies
1658
1666
 
1659
1667
  @GeneralUtilities.check_arguments
1660
1668
  def standardized_tasks_update_version_in_docker_examples(self, file, codeunit_version):
@@ -1963,6 +1971,7 @@ class TasksForCommonProjectStructure:
1963
1971
  additional_arguments_r: str = ""
1964
1972
  additional_arguments_l: str = ""
1965
1973
  additional_arguments_g: str = ""
1974
+ additional_arguments_f: str = ""
1966
1975
  general_argument = f' --overwrite_verbosity={str(verbosity)} --overwrite_targetenvironmenttype={target_environmenttype}'
1967
1976
 
1968
1977
  c_additionalargumentsfile_argument = ""
@@ -1982,15 +1991,17 @@ class TasksForCommonProjectStructure:
1982
1991
  config.read(additional_arguments_file)
1983
1992
  section_name = f"{codeunit_name}_Configuration"
1984
1993
  if config.has_option(section_name, "ArgumentsForCommonTasks"):
1985
- additional_arguments_c = " "+config.get(section_name, "ArgumentsForCommonTasks")
1994
+ additional_arguments_c = " " + config.get(section_name, "ArgumentsForCommonTasks")
1986
1995
  if config.has_option(section_name, "ArgumentsForBuild"):
1987
- additional_arguments_b = " "+config.get(section_name, "ArgumentsForBuild")
1996
+ additional_arguments_b = " " + config.get(section_name, "ArgumentsForBuild")
1988
1997
  if config.has_option(section_name, "ArgumentsForRunTestcases"):
1989
- additional_arguments_r = " "+config.get(section_name, "ArgumentsForRunTestcases")
1998
+ additional_arguments_r = " " + config.get(section_name, "ArgumentsForRunTestcases")
1990
1999
  if config.has_option(section_name, "ArgumentsForLinting"):
1991
- additional_arguments_l = " "+config.get(section_name, "ArgumentsForLinting")
2000
+ additional_arguments_l = " " + config.get(section_name, "ArgumentsForLinting")
1992
2001
  if config.has_option(section_name, "ArgumentsForGenerateReference"):
1993
- additional_arguments_g = " "+config.get(section_name, "ArgumentsForGenerateReference")
2002
+ additional_arguments_g = " " + config.get(section_name, "ArgumentsForGenerateReference")
2003
+ if config.has_option(section_name, "ArgumentsForOnFinish"):
2004
+ additional_arguments_f = " " + config.get(section_name, "ArgumentsForOnFinish")
1994
2005
  c_additionalargumentsfile_argument = f' --overwrite_additionalargumentsfile="{additional_arguments_file}"'
1995
2006
 
1996
2007
  GeneralUtilities.write_message_to_stdout('Run "CommonTasks.py"...')
@@ -2030,6 +2041,13 @@ class TasksForCommonProjectStructure:
2030
2041
  raise ValueError(f"GenerateReference.py resulted in exitcode {execution_result[0]}. StdOut: '{execution_result[1]}' StdOut: '{execution_result[2]}'")
2031
2042
  self.verify_artifact_exists(codeunit_folder, dict[str, bool]({"Reference": True}))
2032
2043
 
2044
+ if os.path.isfile(os.path.join(other_folder, "OnBuildingFinished.py")):
2045
+ GeneralUtilities.write_message_to_stdout('Run "OnBuildingFinished.py"...')
2046
+ execution_result = self.__sc.run_program(
2047
+ "python", f"OnBuildingFinished.py{additional_arguments_f}{general_argument}", other_folder, verbosity=verbosity_for_executed_programs, throw_exception_if_exitcode_is_not_zero=False)
2048
+ if execution_result[0] != 0:
2049
+ raise ValueError(f"OnBuildingFinished.py resulted in exitcode {execution_result[0]}. StdOut: '{execution_result[1]}' StdOut: '{execution_result[2]}'")
2050
+
2033
2051
  artifactsinformation_file = os.path.join(artifacts_folder, f"{codeunit_name}.artifactsinformation.xml")
2034
2052
  codeunit_version = self.get_version_of_codeunit(codeunit_file)
2035
2053
  GeneralUtilities.ensure_file_exists(artifactsinformation_file)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ScriptCollection
3
- Version: 3.4.3
3
+ Version: 3.4.6
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
@@ -23,7 +23,7 @@ Classifier: Topic :: Utilities
23
23
  Requires-Python: >=3.10
24
24
  Description-Content-Type: text/markdown
25
25
  Requires-Dist: coverage (>=7.2.7)
26
- Requires-Dist: cyclonedx-bom (>=3.11.0)
26
+ Requires-Dist: cyclonedx-bom (>=3.11.2)
27
27
  Requires-Dist: defusedxml (>=0.7.1)
28
28
  Requires-Dist: keyboard (>=0.13.5)
29
29
  Requires-Dist: lxml (>=4.9.3)
@@ -0,0 +1,14 @@
1
+ ScriptCollection/Executables.py,sha256=srooVN3-X76sJKG99BxKBV4kuF_GFNq-SuV-zTmNJGw,19002
2
+ ScriptCollection/GeneralUtilities.py,sha256=vZDiW5lWJRCrIZVs1bTCZ-O5slQnM5dv4GcJ-RTMowY,34378
3
+ ScriptCollection/ProgramRunnerBase.py,sha256=2kyOuoM3oFjBfLc9Q5t5RTz7Ya2CjUxFtB1rBBDmnjU,1937
4
+ ScriptCollection/ProgramRunnerEpew.py,sha256=nIzY4dG6W-xEpkeoTbozwNZtFSIo-bU_W6t6u1AZKtE,6275
5
+ ScriptCollection/ProgramRunnerPopen.py,sha256=HOs1QVnXiQtwXy1_xvH79bWBdd0i-2tUyyLloQBvMto,3023
6
+ ScriptCollection/ScriptCollectionCore.py,sha256=hOkgV6v1XGqiX9TU7_Oqe-UJlYFmFmEwxKwaIybI2JI,94554
7
+ ScriptCollection/TasksForCommonProjectStructure.py,sha256=3ZXzRX7YAzLS8NurwSG0WLfnByVEbmmzx-s8zBME4vs,145487
8
+ ScriptCollection/UpdateCertificates.py,sha256=Go-JJK-YTi7aBB1phlLxypa8GHkmFHBEPB0_TT9G-bw,7918
9
+ ScriptCollection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ ScriptCollection-3.4.6.dist-info/METADATA,sha256=a0a1ZlEkJK2t1C0-CV_bSxnINH0Hjw-AXuakJ6UPfSY,7650
11
+ ScriptCollection-3.4.6.dist-info/WHEEL,sha256=AtBG6SXL3KF_v0NxLf0ehyVOh0cold-JbJYXNGorC6Q,92
12
+ ScriptCollection-3.4.6.dist-info/entry_points.txt,sha256=dJKdWcH41owxlKx_khj4P7DItr9lhxWP9JU2Dq8GSsQ,2088
13
+ ScriptCollection-3.4.6.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
14
+ ScriptCollection-3.4.6.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.40.0)
2
+ Generator: bdist_wheel (0.41.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,14 +0,0 @@
1
- ScriptCollection/Executables.py,sha256=BanfD3ls0ov3ECnsbuyzNstdYjqz_HplreQYJxrB8Ag,19068
2
- ScriptCollection/GeneralUtilities.py,sha256=vZDiW5lWJRCrIZVs1bTCZ-O5slQnM5dv4GcJ-RTMowY,34378
3
- ScriptCollection/ProgramRunnerBase.py,sha256=2kyOuoM3oFjBfLc9Q5t5RTz7Ya2CjUxFtB1rBBDmnjU,1937
4
- ScriptCollection/ProgramRunnerEpew.py,sha256=nIzY4dG6W-xEpkeoTbozwNZtFSIo-bU_W6t6u1AZKtE,6275
5
- ScriptCollection/ProgramRunnerPopen.py,sha256=HOs1QVnXiQtwXy1_xvH79bWBdd0i-2tUyyLloQBvMto,3023
6
- ScriptCollection/ScriptCollectionCore.py,sha256=f-nUf0mVi4GfCOS83VWqLvRqfbCZXEODacBxeacD4pw,96083
7
- ScriptCollection/TasksForCommonProjectStructure.py,sha256=R2a1LKlWrdp5TMjQSvdTsGv-F_3v7EpKidYZflxHJv4,144215
8
- ScriptCollection/UpdateCertificates.py,sha256=Go-JJK-YTi7aBB1phlLxypa8GHkmFHBEPB0_TT9G-bw,7918
9
- ScriptCollection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- ScriptCollection-3.4.3.dist-info/METADATA,sha256=lGelemdj5ymuM5sEHWH_aBfjGDWenkohDcNovW9FCZU,7650
11
- ScriptCollection-3.4.3.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
12
- ScriptCollection-3.4.3.dist-info/entry_points.txt,sha256=dJKdWcH41owxlKx_khj4P7DItr9lhxWP9JU2Dq8GSsQ,2088
13
- ScriptCollection-3.4.3.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
14
- ScriptCollection-3.4.3.dist-info/RECORD,,