ScriptCollection 3.5.4__py3-none-any.whl → 3.5.5__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.
@@ -259,11 +259,11 @@ def BuildCodeUnit() -> int:
259
259
  parser = argparse.ArgumentParser()
260
260
  parser.add_argument('--codeunitfolder', required=False, default=".")
261
261
  parser.add_argument('--verbosity', required=False, default=1)
262
- parser.add_argument('--targetenvironment', required=False, default="Development")
262
+ parser.add_argument('--targetenvironment', required=False, default="QualityCheck")
263
263
  parser.add_argument('--additionalargumentsfile', required=False, default=None)
264
264
  parser.add_argument('--assume_dependent_codeunits_are_already_built', type=GeneralUtilities.string_to_boolean, const=True, default=False, nargs='?')
265
265
  args = parser.parse_args()
266
- TasksForCommonProjectStructure().build_codeunit(args.codeunitfolder, int(args.verbosity), args.targetenvironment, args.additionalargumentsfile,False, None, args.assume_dependent_codeunits_are_already_built,sys.argv)
266
+ TasksForCommonProjectStructure().build_codeunit(args.codeunitfolder, int(args.verbosity), args.targetenvironment, args.additionalargumentsfile, False, None, args.assume_dependent_codeunits_are_already_built, sys.argv)
267
267
  return 0
268
268
 
269
269
 
@@ -271,10 +271,10 @@ def BuildCodeUnits() -> int:
271
271
  parser = argparse.ArgumentParser()
272
272
  parser.add_argument('--repositoryfolder', required=False, default=".")
273
273
  parser.add_argument('--verbosity', required=False, default=1)
274
- parser.add_argument('--targetenvironment', required=False, default="Development")
274
+ parser.add_argument('--targetenvironment', required=False, default="QualityCheck")
275
275
  parser.add_argument('--additionalargumentsfile', required=False, default=None)
276
276
  args = parser.parse_args()
277
- TasksForCommonProjectStructure().build_codeunits(args.repositoryfolder, int(args.verbosity), args.targetenvironment, args.additionalargumentsfile,False,None,sys.argv)
277
+ TasksForCommonProjectStructure().build_codeunits(args.repositoryfolder, int(args.verbosity), args.targetenvironment, args.additionalargumentsfile, False, None, sys.argv)
278
278
  return 0
279
279
 
280
280
 
@@ -287,7 +287,7 @@ def BuildCodeUnitsC() -> int:
287
287
  parser.add_argument('--image', required=False, default="scbuilder:latest")
288
288
  args = parser.parse_args()
289
289
  GeneralUtilities.reconfigure_standrd_input_and_outputs()
290
- TasksForCommonProjectStructure().build_codeunitsC(args.repositoryfolder, args.image, int(args.verbosity), args.targetenvironment, args.additionalargumentsfile,sys.argv)
290
+ TasksForCommonProjectStructure().build_codeunitsC(args.repositoryfolder, args.image, int(args.verbosity), args.targetenvironment, args.additionalargumentsfile, sys.argv)
291
291
  return 0
292
292
 
293
293
 
@@ -555,6 +555,12 @@ class GeneralUtilities:
555
555
  except AttributeError:
556
556
  return ctypes.windll.shell32.IsUserAnAdmin() == 1
557
557
 
558
+ @staticmethod
559
+ @check_arguments
560
+ def ensure_elevated_privileges() -> None:
561
+ if (not GeneralUtilities.current_user_has_elevated_privileges()):
562
+ raise ValueError("Not enough privileges.")
563
+
558
564
  @staticmethod
559
565
  @check_arguments
560
566
  def rename_names_of_all_files_and_folders(folder: str, replace_from: str, replace_to: str, replace_only_full_match=False):
@@ -29,7 +29,7 @@ from .ProgramRunnerBase import ProgramRunnerBase
29
29
  from .ProgramRunnerPopen import ProgramRunnerPopen
30
30
  from .ProgramRunnerEpew import ProgramRunnerEpew, CustomEpewArgument
31
31
 
32
- version = "3.5.4"
32
+ version = "3.5.5"
33
33
  __version__ = version
34
34
 
35
35
 
@@ -1240,25 +1240,9 @@ class ScriptCollectionCore:
1240
1240
  # 2=Full (Prints StdOut and StdErr of the executed program.)
1241
1241
  # 3=Verbose (Same as "Full" but with some more information.)
1242
1242
 
1243
- if arguments_for_log is None:
1244
- arguments_for_log = ' '.join(arguments_as_array)
1245
- else:
1246
- arguments_for_log = ' '.join(arguments_for_log)
1247
- working_directory = self.__adapt_workingdirectory(working_directory)
1248
- cmd = f'{working_directory}>{program} {arguments_for_log}'
1249
-
1250
- if GeneralUtilities.string_is_none_or_whitespace(title):
1251
- info_for_log = cmd
1252
- else:
1253
- info_for_log = title
1254
-
1255
- if verbosity >= 3:
1256
- GeneralUtilities.write_message_to_stdout(f"Run '{info_for_log}'.")
1257
-
1258
1243
  if isinstance(self.program_runner, ProgramRunnerEpew):
1259
1244
  custom_argument = CustomEpewArgument(print_errors_as_information, log_file, timeoutInSeconds, addLogOverhead, title, log_namespace, verbosity, arguments_for_log)
1260
- popen: Popen = self.program_runner.run_program_argsasarray_async_helper(
1261
- program, arguments_as_array, working_directory, custom_argument, interactive)
1245
+ popen: Popen = self.program_runner.run_program_argsasarray_async_helper(program, arguments_as_array, working_directory, custom_argument, interactive)
1262
1246
  return popen
1263
1247
 
1264
1248
  # Return-values program_runner: Exitcode, StdOut, StdErr, Pid
@@ -1275,12 +1259,16 @@ class ScriptCollectionCore:
1275
1259
  if mock_loader_result[0]:
1276
1260
  return mock_loader_result[1]
1277
1261
 
1262
+ working_directory = self.__adapt_workingdirectory(working_directory)
1263
+
1278
1264
  if arguments_for_log is None:
1279
- arguments_for_log = arguments_as_array
1265
+ arguments_for_log = ' '.join(arguments_as_array)
1266
+ else:
1267
+ arguments_for_log = ' '.join(arguments_for_log)
1280
1268
 
1281
- arguments_for_exception_as_string = ' '.join(arguments_for_log)
1269
+ arguments_for_exception_as_string = arguments_for_log
1282
1270
 
1283
- arguments_for_log_as_string = ' '.join(arguments_for_log)
1271
+ arguments_for_log_as_string = arguments_for_log
1284
1272
  cmd = f'{working_directory}>{program} {arguments_for_log_as_string}'
1285
1273
 
1286
1274
  if GeneralUtilities.string_is_none_or_whitespace(title):
@@ -1387,7 +1375,7 @@ class ScriptCollectionCore:
1387
1375
  mock_loader_result = self.__try_load_mock(program, ' '.join(arguments_as_array), working_directory)
1388
1376
  if mock_loader_result[0]:
1389
1377
  return mock_loader_result[1]
1390
- process: Popen = self.__run_program_argsasarray_async_helper(program, arguments_as_array, working_directory, verbosity, print_errors_as_information, log_file, timeoutInSeconds, addLogOverhead, title, log_namespace, arguments_for_log, custom_argument, interactive)
1378
+ process: Popen = self.__run_program_argsasarray_async_helper(program, arguments_as_array, working_directory, verbosity, print_errors_as_information, log_file, timeoutInSeconds, addLogOverhead, title, log_namespace, arguments_for_log, custom_argument, interactive)
1391
1379
  return process.pid
1392
1380
 
1393
1381
  # Return-values program_runner: Pid
@@ -765,7 +765,7 @@ class TasksForCommonProjectStructure:
765
765
 
766
766
  @GeneralUtilities.check_arguments
767
767
  def standardized_tasks_generate_coverage_report(self, repository_folder: str, codeunitname: str, verbosity: int, generate_badges: bool, targetenvironmenttype: str, commandline_arguments: list[str], add_testcoverage_history_entry: bool = None) -> None:
768
- """This script expects that the file '<repositorybasefolder>/<codeunitname>/Other/Artifacts/TestCoverage/TestCoverage.xml'
768
+ """This function expects that the file '<repositorybasefolder>/<codeunitname>/Other/Artifacts/TestCoverage/TestCoverage.xml'
769
769
  which contains a test-coverage-report in the cobertura-format exists.
770
770
  This script expectes that the testcoverage-reportfolder is '<repositorybasefolder>/<codeunitname>/Other/Artifacts/TestCoverageReport'.
771
771
  This script expectes that a test-coverage-badges should be added to '<repositorybasefolder>/<codeunitname>/Other/Resources/Badges'."""
@@ -1491,10 +1491,17 @@ class TasksForCommonProjectStructure:
1491
1491
 
1492
1492
  @GeneralUtilities.check_arguments
1493
1493
  def standardized_tasks_build_for_angular_codeunit(self, build_script_file: str, build_environment_target_type: str, verbosity: int, commandline_arguments: list[str]) -> None:
1494
+ build_script_folder = os.path.dirname(build_script_file)
1495
+ codeunit_folder = GeneralUtilities.resolve_relative_path("../..", build_script_folder)
1496
+ GeneralUtilities.ensure_directory_does_not_exist(f"{codeunit_folder}/.angular")
1497
+ self.standardized_tasks_build_for_angular_codeunit(build_script_file, build_environment_target_type, verbosity, commandline_arguments)
1498
+
1499
+ @GeneralUtilities.check_arguments
1500
+ def standardized_tasks_build_for_node_codeunit(self, build_script_file: str, build_environment_target_type: str, verbosity: int, commandline_arguments: list[str]) -> None:
1494
1501
  verbosity = TasksForCommonProjectStructure.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
1495
1502
  build_script_folder = os.path.dirname(build_script_file)
1496
1503
  codeunit_folder = GeneralUtilities.resolve_relative_path("../..", build_script_folder)
1497
- self.run_with_epew("ng", f"build --configuration {build_environment_target_type}", codeunit_folder, verbosity=verbosity)
1504
+ self.run_with_epew("npm", f"run build-{build_environment_target_type}", codeunit_folder, verbosity=verbosity)
1498
1505
  self.standardized_tasks_build_bom_for_node_project(codeunit_folder, verbosity, commandline_arguments)
1499
1506
  self.copy_source_files_to_output_directory(build_script_file)
1500
1507
 
@@ -1505,11 +1512,14 @@ class TasksForCommonProjectStructure:
1505
1512
 
1506
1513
  @GeneralUtilities.check_arguments
1507
1514
  def standardized_tasks_linting_for_angular_codeunit(self, linting_script_file: str, verbosity: int, build_environment_target_type: str, commandline_arguments: list[str]) -> None:
1515
+ self.standardized_tasks_linting_for_node_codeunit(linting_script_file, verbosity, build_environment_target_type, commandline_arguments)
1516
+
1517
+ @GeneralUtilities.check_arguments
1518
+ def standardized_tasks_linting_for_node_codeunit(self, linting_script_file: str, verbosity: int, build_environment_target_type: str, commandline_arguments: list[str]) -> None:
1508
1519
  verbosity = TasksForCommonProjectStructure.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
1509
1520
  build_script_folder = os.path.dirname(linting_script_file)
1510
1521
  codeunit_folder = GeneralUtilities.resolve_relative_path("../..", build_script_folder)
1511
1522
  self.run_with_epew("ng", "lint", codeunit_folder, verbosity=verbosity)
1512
- # TODO check if there are errors in sarif-file
1513
1523
 
1514
1524
  @GeneralUtilities.check_arguments
1515
1525
  def standardized_tasks_run_testcases_for_flutter_project_in_common_project_structure(self, script_file: str, verbosity: int, args: list[str], package_name: str, build_environment_target_type: str, generate_badges: bool):
@@ -1543,7 +1553,7 @@ class TasksForCommonProjectStructure:
1543
1553
  repository_folder = os.path.dirname(codeunit_folder)
1544
1554
 
1545
1555
  # run testcases
1546
- self.run_with_epew("ng", "test --watch=false --browsers ChromeHeadless --code-coverage", codeunit_folder, verbosity=verbosity)
1556
+ self.standardized_tasks_run_testcases_for_node_codeunit(runtestcases_script_file, build_environment_target_type, generate_badges, verbosity, commandline_arguments)
1547
1557
 
1548
1558
  # rename file
1549
1559
  coverage_folder = os.path.join(codeunit_folder, "Other", "Artifacts", "TestCoverage")
@@ -1589,6 +1599,12 @@ class TasksForCommonProjectStructure:
1589
1599
  # post tasks
1590
1600
  self.run_testcases_common_post_task(repository_folder, codeunit_name, verbosity, generate_badges, build_environment_target_type, commandline_arguments)
1591
1601
 
1602
+ @GeneralUtilities.check_arguments
1603
+ def standardized_tasks_run_testcases_for_node_codeunit(self, runtestcases_script_file: str, build_environment_target_type: str, generate_badges: bool, verbosity: int, commandline_arguments: list[str]) -> None:
1604
+ verbosity = TasksForCommonProjectStructure.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
1605
+ codeunit_folder = GeneralUtilities.resolve_relative_path("../..", os.path.dirname(runtestcases_script_file))
1606
+ self.run_with_epew("npm", f"run test-{build_environment_target_type}", codeunit_folder, verbosity=verbosity)
1607
+
1592
1608
  @GeneralUtilities.check_arguments
1593
1609
  def __rename_packagename_in_coverage_file(self, file: str, codeunit_name: str) -> None:
1594
1610
  root: etree._ElementTree = etree.parse(file)
@@ -1600,13 +1616,13 @@ class TasksForCommonProjectStructure:
1600
1616
 
1601
1617
  @GeneralUtilities.check_arguments
1602
1618
  def do_npm_install(self, package_json_folder: str, verbosity: int) -> None:
1603
- self.run_with_epew("npm", "install", package_json_folder, verbosity=verbosity)
1619
+ self.run_with_epew("npm", "clean-install", package_json_folder, verbosity=verbosity)
1604
1620
 
1605
1621
  @GeneralUtilities.check_arguments
1606
- def run_with_epew(self, program: str, argument: str, working_directory: str, verbosity: int) -> None:
1622
+ def run_with_epew(self, program: str, argument: str = "", working_directory: str = None, verbosity: int = 1, print_errors_as_information: bool = False, log_file: str = None, timeoutInSeconds: int = 600, addLogOverhead: bool = False, title: str = None, log_namespace: str = "", arguments_for_log: list[str] = None, throw_exception_if_exitcode_is_not_zero: bool = True, custom_argument: object = None, interactive: bool = False) -> tuple[int, str, str, int]:
1607
1623
  sc: ScriptCollectionCore = ScriptCollectionCore()
1608
1624
  sc.program_runner = ProgramRunnerEpew()
1609
- sc.run_program(program, argument, working_directory, verbosity=verbosity)
1625
+ return sc.run_program(program, argument, working_directory, verbosity, print_errors_as_information, log_file, timeoutInSeconds, addLogOverhead, title, log_namespace, arguments_for_log, throw_exception_if_exitcode_is_not_zero, custom_argument, interactive)
1610
1626
 
1611
1627
  @GeneralUtilities.check_arguments
1612
1628
  def set_default_constants(self, codeunit_folder: str) -> None:
@@ -1833,7 +1849,7 @@ class TasksForCommonProjectStructure:
1833
1849
 
1834
1850
  @GeneralUtilities.check_arguments
1835
1851
  def update_dependencies_of_typical_flutter_codeunit(self, update_script_file: str, verbosity: int, cmd_args: list[str]) -> None:
1836
- pass # TODO
1852
+ pass # TODO generalize and add option to ignore certain dependencies
1837
1853
 
1838
1854
  @GeneralUtilities.check_arguments
1839
1855
  def update_dependencies_of_typical_python_codeunit(self, update_script_file: str, verbosity: int, cmd_args: list[str]) -> None:
@@ -1862,7 +1878,29 @@ class TasksForCommonProjectStructure:
1862
1878
 
1863
1879
  @GeneralUtilities.check_arguments
1864
1880
  def update_dependencies_of_typical_node_codeunit(self, update_script_file: str, verbosity: int, cmd_args: list[str]) -> None:
1865
- pass # TODO generalize and add option to ignore certain dependencies
1881
+ current_folder = os.path.dirname(update_script_file)
1882
+ result = self.run_with_epew("npm", "outdated", current_folder, verbosity, throw_exception_if_exitcode_is_not_zero=False)
1883
+ if result[0] == 0:
1884
+ return # all dependencies up to date
1885
+ elif result[0] == 1:
1886
+ package_json_content = None
1887
+ package_json_file = f"{current_folder}/package.json"
1888
+ with open(package_json_file, "r", encoding="utf-8") as package_json_file_object:
1889
+ package_json_content = json.load(package_json_file_object)
1890
+ lines = GeneralUtilities.string_to_lines(result[1])[1:][:-1]
1891
+ for line in lines:
1892
+ normalized_line_splitted = ' '.join(line.split()).split(" ")
1893
+ package = normalized_line_splitted[0]
1894
+ latest_version = normalized_line_splitted[3]
1895
+ if package in package_json_content["dependencies"]:
1896
+ package_json_content["dependencies"][package] = latest_version
1897
+ if package in package_json_content["devDependencies"]:
1898
+ package_json_content["devDependencies"][package] = latest_version
1899
+ with open(package_json_file, "w", encoding="utf-8") as package_json_file_object:
1900
+ json.dump(package_json_content, package_json_file_object, indent=4)
1901
+ self.run_with_epew("npm", "install --force", current_folder, verbosity)
1902
+ else:
1903
+ GeneralUtilities.write_message_to_stderr("Update dependencies resulted in an error.")
1866
1904
 
1867
1905
  @GeneralUtilities.check_arguments
1868
1906
  def run_local_test_service(self, file: str):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ScriptCollection
3
- Version: 3.5.4
3
+ Version: 3.5.5
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
@@ -0,0 +1,16 @@
1
+ ScriptCollection/Executables.py,sha256=0I_yTMX-mkbgatm8O7Pvtv2rG5Ep4C0iqUYDL92hINE,19241
2
+ ScriptCollection/GeneralUtilities.py,sha256=urvslHJx_ptJgzGjRoc4KKyFtPYWvs2ifLD_MKACnxg,35810
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=2HgYhQ22DDDs9s1Qjuvd7fKUWsOPrnaYSoHimWbC_ow,97054
9
+ ScriptCollection/TasksForCommonProjectStructure.py,sha256=kz6AZENxwC7oYJp3Neuhs-oLbyXkn-p0j-2AQ6fHBMA,181486
10
+ ScriptCollection/UpdateCertificates.py,sha256=lfmVuify-Fqq-vGJusDDUsJVhA-rVLwW2Jx9iLwmkBo,7916
11
+ ScriptCollection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ ScriptCollection-3.5.5.dist-info/METADATA,sha256=K1hVO826FAyAgMcqSqTxuf1lJ3F_Y4rIQbQ7QVffMQg,7679
13
+ ScriptCollection-3.5.5.dist-info/WHEEL,sha256=Wyh-_nZ0DJYolHNn1_hMa4lM7uDedD_RGVwbmTjyItk,91
14
+ ScriptCollection-3.5.5.dist-info/entry_points.txt,sha256=dwvB9HRGvqst5xlYIGmmwuFN7lBKhxvndmnNrQOfu8w,2153
15
+ ScriptCollection-3.5.5.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
16
+ ScriptCollection-3.5.5.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (71.0.3)
2
+ Generator: setuptools (71.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,16 +0,0 @@
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,,