ScriptCollection 3.5.157__py3-none-any.whl → 3.5.158__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.
@@ -16,7 +16,7 @@ def FilenameObfuscator() -> int:
16
16
  parser = argparse.ArgumentParser(description=''''Obfuscates the names of all files in the given folder.
17
17
  Caution: This script can cause harm if you pass a wrong inputfolder-argument.''')
18
18
 
19
- parser.add_argument('--printtableheadline', type=GeneralUtilities.string_to_boolean, const=True, default=True, nargs='?', help='Prints column-titles in the name-mapping-csv-file')
19
+ parser.add_argument('--printtableheadline', type=GeneralUtilities.string_to_boolean, const=True, default=True, nargs='?', help='Prints column-titles in the name-mapping-csv-file')
20
20
  parser.add_argument('--namemappingfile', default="NameMapping.csv", help='Specifies the file where the name-mapping will be written to')
21
21
  parser.add_argument('--extensions', default="exe,py,sh",
22
22
  help='Comma-separated list of file-extensions of files where this tool should be applied. Use "*" to obfuscate all')
@@ -763,14 +763,24 @@ def UpdateTimestampInFile() -> int:
763
763
 
764
764
 
765
765
  def LOC() -> int:
766
- parser = argparse.ArgumentParser(description="Counts the lines of code in a git-repository")
766
+ sc = ScriptCollectionCore()
767
+ default_patterns: list[str] = sc.default_excluded_patterns_for_loc
768
+ default_patterns_joined = ",".join(default_patterns)
769
+ parser = argparse.ArgumentParser(description=f"Counts the lines of code in a git-repository. Default patterns are: {default_patterns_joined}")
767
770
  parser.add_argument('-r', '--repository', required=True)
771
+ parser.add_argument('-e', '--excluded_pattern', nargs='+')
772
+ parser.add_argument('-d', '--do_not_add_default_pattern', action='store_true', default=False)
773
+ parser.add_argument('-v', '--verbose', action='store_true', default=False)
768
774
  args = parser.parse_args()
769
- sc = ScriptCollectionCore()
770
775
  folder: str = None
771
776
  if os.path.isabs(args.repository):
772
777
  folder = args.repository
773
778
  else:
774
779
  folder = GeneralUtilities.resolve_relative_path(args.repository, os.getcwd())
775
- GeneralUtilities.write_message_to_stdout(sc.get_lines_of_code(folder))
780
+ excluded_patterns: list[str] = []
781
+ if not args.do_not_add_default_pattern:
782
+ excluded_patterns = excluded_patterns + sc.default_excluded_patterns_for_loc
783
+ if args.excluded_pattern is not None:
784
+ excluded_patterns = excluded_patterns + args.excluded_pattern
785
+ GeneralUtilities.write_message_to_stdout(str(sc.get_lines_of_code(folder, excluded_patterns, args.verbose)))
776
786
  return 0
@@ -16,7 +16,7 @@ from enum import Enum
16
16
  import traceback
17
17
  import warnings
18
18
  import functools
19
- from datetime import datetime, timedelta, date
19
+ from datetime import datetime, timedelta, date, timezone
20
20
  from os import listdir
21
21
  from os.path import isfile, join, isdir
22
22
  from pathlib import Path
@@ -368,6 +368,8 @@ class GeneralUtilities:
368
368
  @staticmethod
369
369
  @check_arguments
370
370
  def datetime_to_string_for_logfile_entry(datetime_object: datetime, add_milliseconds: bool = False) -> str:
371
+ if datetime_object.tzinfo is None:
372
+ datetime_object=datetime_object.replace(tzinfo=timezone.utc)#assume utc when no timezone is given
371
373
  pattern: str = None
372
374
  if add_milliseconds:
373
375
  pattern = "%Y-%m-%dT%H:%M:%S.%f%z"
@@ -607,7 +609,7 @@ class GeneralUtilities:
607
609
  @check_arguments
608
610
  def write_lines_to_file(file: str, lines: list, encoding="utf-8") -> None:
609
611
  lines = [GeneralUtilities.strip_new_line_character(line) for line in lines]
610
- content = os.linesep.join(lines)
612
+ content = "\n".join(lines)
611
613
  GeneralUtilities.write_text_to_file(file, content, encoding)
612
614
 
613
615
  @staticmethod
@@ -622,13 +624,22 @@ class GeneralUtilities:
622
624
  file_object.write(content)
623
625
 
624
626
  @staticmethod
625
- def is_binary_file(path:str):
626
- return b'\x00' in GeneralUtilities.read_binary_from_file(path)
627
+ def is_binary_file(path: str):
628
+ content = GeneralUtilities.read_binary_from_file(path)
629
+ binary_content_indicators = [b'\x00', b'\x01', b'\x02', b'\x03', b'\x04', b'\x05', b'\x06', b'\x07', b'\x08', b'\x0E', b'\x1F']
630
+ for binary_content_indicator in binary_content_indicators:
631
+ if binary_content_indicator in content:
632
+ return True
633
+ return False
627
634
 
628
635
  @staticmethod
629
636
  @check_arguments
630
637
  def read_lines_from_file(file: str, encoding="utf-8") -> list[str]:
631
- return [GeneralUtilities.strip_new_line_character(line) for line in GeneralUtilities.read_text_from_file(file, encoding).split('\n')]
638
+ content=GeneralUtilities.read_text_from_file(file, encoding)
639
+ if len(content)==0:
640
+ return []
641
+ else:
642
+ return [GeneralUtilities.strip_new_line_character(line) for line in content.split('\n')]
632
643
 
633
644
  @staticmethod
634
645
  @check_arguments
@@ -847,16 +858,18 @@ class GeneralUtilities:
847
858
 
848
859
  @staticmethod
849
860
  @check_arguments
850
- def get_time_based_logfile_by_folder(folder: str, name: str = "Log", in_utc: bool = False) -> str:
851
- return os.path.join(GeneralUtilities.resolve_relative_path_from_current_working_directory(folder), f"{GeneralUtilities.get_time_based_logfilename(name, in_utc)}.log")
861
+ def get_time_based_logfile_by_folder(folder: str, name: str = "Log") -> str:
862
+ return os.path.join(GeneralUtilities.resolve_relative_path_from_current_working_directory(folder), f"{GeneralUtilities.get_time_based_logfilename(name)}.log")
852
863
 
853
864
  @staticmethod
854
865
  @check_arguments
855
- def get_time_based_logfilename(name: str = "Log", in_utc: bool = False) -> str:
856
- if (in_utc):
857
- d = datetime.utcnow()
858
- else:
859
- d = datetime.now()
866
+ def get_now() -> datetime:
867
+ return datetime.now().astimezone()
868
+
869
+ @staticmethod
870
+ @check_arguments
871
+ def get_time_based_logfilename(name: str = "Log") -> str:
872
+ d=GeneralUtilities.get_now()
860
873
  return f"{name}_{GeneralUtilities.datetime_to_string_for_logfile_name(d)}"
861
874
 
862
875
  @staticmethod
@@ -1027,7 +1040,7 @@ class GeneralUtilities:
1027
1040
  @staticmethod
1028
1041
  @check_arguments
1029
1042
  def certificate_is_expired(certificate_file: str) -> bool:
1030
- return GeneralUtilities.get_certificate_expiry_date(certificate_file) < datetime.now()
1043
+ return GeneralUtilities.get_certificate_expiry_date(certificate_file) <GeneralUtilities.get_now()
1031
1044
 
1032
1045
  @staticmethod
1033
1046
  @check_arguments
@@ -19,6 +19,7 @@ from subprocess import Popen
19
19
  import re
20
20
  import shutil
21
21
  from typing import IO
22
+ import fnmatch
22
23
  import uuid
23
24
  import tempfile
24
25
  import io
@@ -35,7 +36,7 @@ from .ProgramRunnerPopen import ProgramRunnerPopen
35
36
  from .ProgramRunnerEpew import ProgramRunnerEpew, CustomEpewArgument
36
37
  from .SCLog import SCLog, LogLevel
37
38
 
38
- version = "3.5.157"
39
+ version = "3.5.158"
39
40
  __version__ = version
40
41
 
41
42
 
@@ -1861,7 +1862,7 @@ class ScriptCollectionCore:
1861
1862
 
1862
1863
  @GeneralUtilities.check_arguments
1863
1864
  def system_time_equals_internet_time(self, maximal_tolerance_difference: timedelta) -> bool:
1864
- return abs(datetime.now() - self.get_internet_time()) < maximal_tolerance_difference
1865
+ return abs(GeneralUtilities.get_now() - self.get_internet_time()) < maximal_tolerance_difference
1865
1866
 
1866
1867
  @GeneralUtilities.check_arguments
1867
1868
  def system_time_equals_internet_time_with_default_tolerance(self) -> bool:
@@ -2122,7 +2123,7 @@ chmod {permission} {link_file}
2122
2123
 
2123
2124
  @GeneralUtilities.check_arguments
2124
2125
  def update_year_in_copyright_tags(self, file: str) -> None:
2125
- current_year = str(datetime.now().year)
2126
+ current_year = str(GeneralUtilities.get_now().year)
2126
2127
  lines = GeneralUtilities.read_lines_from_file(file)
2127
2128
  lines_result = []
2128
2129
  for line in lines:
@@ -2137,7 +2138,7 @@ chmod {permission} {link_file}
2137
2138
 
2138
2139
  @GeneralUtilities.check_arguments
2139
2140
  def update_year_in_first_line_of_file(self, file: str) -> None:
2140
- current_year = str(datetime.now().year)
2141
+ current_year = str(GeneralUtilities.get_now().year)
2141
2142
  lines = GeneralUtilities.read_lines_from_file(file)
2142
2143
  lines[0] = re.sub("\\d\\d\\d\\d", current_year, lines[0])
2143
2144
  GeneralUtilities.write_lines_to_file(file, lines)
@@ -2357,8 +2358,8 @@ TXDX
2357
2358
 
2358
2359
  @GeneralUtilities.check_arguments
2359
2360
  def install_requirementstxt_file(self, requirements_txt_file: str, verbosity: int):
2360
- folder:str=os.path.dirname(requirements_txt_file)
2361
- filename:str=os.path.basename(requirements_txt_file)
2361
+ folder: str = os.path.dirname(requirements_txt_file)
2362
+ filename: str = os.path.basename(requirements_txt_file)
2362
2363
  self.run_program_argsasarray("pip", ["install", "-r", filename], folder, verbosity=verbosity)
2363
2364
 
2364
2365
  @GeneralUtilities.check_arguments
@@ -2447,7 +2448,7 @@ OCR-content:
2447
2448
  prefix: str = "# last update: "
2448
2449
  for line in lines:
2449
2450
  if line.startswith(prefix):
2450
- new_lines.append(prefix+GeneralUtilities.datetime_to_string_with_timezone(datetime.now()))
2451
+ new_lines.append(prefix+GeneralUtilities.datetime_to_string_with_timezone(GeneralUtilities.get_now()))
2451
2452
  else:
2452
2453
  new_lines.append(line)
2453
2454
  GeneralUtilities.write_lines_to_file(target_file, new_lines)
@@ -2465,13 +2466,39 @@ OCR-content:
2465
2466
  finally:
2466
2467
  self.log.log(f"Finished action \"{name_of_task}\".", LogLevel.Information)
2467
2468
 
2468
- def get_lines_of_code(self,repository:str)->int:
2469
+ def get_lines_of_code_with_default_excluded_patterns(self, repository: str) -> int:
2470
+ return self.get_lines_of_code(repository, self.default_excluded_patterns_for_loc, False)
2471
+
2472
+ default_excluded_patterns_for_loc: list[str] = [".txt", ".md",".vscode", "Resources", "Reference", ".gitignore", ".gitattributes", "Other/Metrics"]
2473
+
2474
+ def get_lines_of_code(self, repository: str, excluded_pattern: list[str], verbose: bool) -> int:
2469
2475
  self.assert_is_git_repository(repository)
2470
- result:int=0
2471
- result=self.run_program("git","ls-files",repository)
2472
- files:list[str]=GeneralUtilities.string_to_lines(result[1])
2476
+ result: int = 0
2477
+ if verbose:
2478
+ GeneralUtilities.write_message_to_stdout(f"Calculate lines of code in repository '{repository}' with excluded patterns: {', '.join(excluded_pattern)}")
2479
+ git_response = self.run_program("git", "ls-files", repository)
2480
+ files: list[str] = GeneralUtilities.string_to_lines(git_response[1])
2481
+ very_verbose: bool = False
2482
+ if very_verbose:
2483
+ verbose = True
2473
2484
  for file in files:
2474
- full_file:str=os.path.join(repository,file)
2475
- if not GeneralUtilities.is_binary_file(full_file):
2476
- result=result+len(GeneralUtilities.read_nonempty_lines_from_file(full_file))
2485
+ if self.__is_excluded_by_glob_pattern(file, excluded_pattern):
2486
+ if very_verbose:
2487
+ GeneralUtilities.write_message_to_stdout(f"File '{file}' is ignored because it matches an excluded pattern.")
2488
+ else:
2489
+ full_file: str = os.path.join(repository, file)
2490
+ if GeneralUtilities.is_binary_file(full_file):
2491
+ if very_verbose:
2492
+ GeneralUtilities.write_message_to_stdout(f"File '{file}' is ignored because it is a binary-file.")
2493
+ else:
2494
+ if verbose:
2495
+ GeneralUtilities.write_message_to_stdout(f"Count lines of file '{file}'.")
2496
+ length = len(GeneralUtilities.read_nonempty_lines_from_file(full_file))
2497
+ result = result+length
2477
2498
  return result
2499
+
2500
+ def __is_excluded_by_glob_pattern(self, file: str, excluded_patterns: list[str]) -> bool:
2501
+ for pattern in excluded_patterns:
2502
+ if fnmatch.fnmatch(file, f"*{pattern}*"):
2503
+ return True
2504
+ return False
@@ -1,4 +1,4 @@
1
- from datetime import datetime, timedelta
1
+ from datetime import datetime, timedelta, timezone
2
2
  from graphlib import TopologicalSorter
3
3
  import os
4
4
  from pathlib import Path
@@ -1175,7 +1175,7 @@ class TasksForCommonProjectStructure:
1175
1175
  @GeneralUtilities.check_arguments
1176
1176
  def ensure_certificate_authority_for_development_purposes_is_generated(self, product_folder: str):
1177
1177
  product_name: str = os.path.basename(product_folder)
1178
- now = datetime.now()
1178
+ now = GeneralUtilities.get_now()
1179
1179
  ca_name = f"{product_name}CA_{now.year:04}{now.month:02}{now.day:02}{now.hour:02}{now.min:02}{now.second:02}"
1180
1180
  ca_folder = os.path.join(product_folder, "Other", "Resources", "CA")
1181
1181
  generate_certificate = True
@@ -1675,31 +1675,37 @@ class TasksForCommonProjectStructure:
1675
1675
  return False
1676
1676
 
1677
1677
  @GeneralUtilities.check_arguments
1678
- def get_versions(self, repository_folder: str) -> list[(str, datetime, datetime)]:
1678
+ def get_versions(self, repository_folder: str) -> list[tuple[str, datetime, datetime]]:
1679
1679
  self.__sc.assert_is_git_repository(repository_folder)
1680
1680
  folder = os.path.join(repository_folder, "Other", "Resources", "Support")
1681
1681
  file = os.path.join(folder, "InformationAboutSupportedVersions.csv")
1682
- result: list[str] = list[(str, datetime, datetime)]()
1682
+ result: list[(str, datetime, datetime)] = list[(str, datetime, datetime)]()
1683
1683
  if not os.path.isfile(file):
1684
1684
  return result
1685
1685
  entries = GeneralUtilities.read_csv_file(file, True)
1686
1686
  for entry in entries:
1687
- result.append((entry[0], GeneralUtilities.string_to_datetime(entry[1]), GeneralUtilities.string_to_datetime(entry[2])))
1687
+ d1 = GeneralUtilities.string_to_datetime(entry[1])
1688
+ if d1.tzinfo is None:
1689
+ d1 = d1.replace(tzinfo=timezone.utc)
1690
+ d2 = GeneralUtilities.string_to_datetime(entry[2])
1691
+ if d2.tzinfo is None:
1692
+ d2 = d2.replace(tzinfo=timezone.utc)
1693
+ result.append((entry[0], d1, d2))
1688
1694
  return result
1689
1695
 
1690
1696
  @GeneralUtilities.check_arguments
1691
- def get_supported_versions(self, repository_folder: str, moment: datetime) -> list[(str, datetime, datetime)]:
1697
+ def get_supported_versions(self, repository_folder: str, moment: datetime) -> list[tuple[str, datetime, datetime]]:
1692
1698
  self.__sc.assert_is_git_repository(repository_folder)
1693
- result: list[str] = list[(str, datetime, datetime)]()
1699
+ result: list[tuple[str, datetime, datetime]] = list[tuple[str, datetime, datetime]]()
1694
1700
  for entry in self.get_versions(repository_folder):
1695
1701
  if entry[1] <= moment and moment <= entry[2]:
1696
1702
  result.append(entry)
1697
1703
  return result
1698
1704
 
1699
1705
  @GeneralUtilities.check_arguments
1700
- def get_unsupported_versions(self, repository_folder: str, moment: datetime) -> list[(str, datetime, datetime)]:
1706
+ def get_unsupported_versions(self, repository_folder: str, moment: datetime) -> list[tuple[str, datetime, datetime]]:
1701
1707
  self.__sc.assert_is_git_repository(repository_folder)
1702
- result: list[str] = list[(str, datetime, datetime)]()
1708
+ result: list[tuple[str, datetime, datetime]] = list[tuple[str, datetime, datetime]]()
1703
1709
  for entry in self.get_versions(repository_folder):
1704
1710
  if not (entry[1] <= moment and moment <= entry[2]):
1705
1711
  result.append(entry)
@@ -2628,7 +2634,7 @@ class TasksForCommonProjectStructure:
2628
2634
  codeunits = self.get_codeunits(repository_folder, False)
2629
2635
  project_version = self.get_version_of_project(repository_folder)
2630
2636
 
2631
- now = datetime.now()
2637
+ now = GeneralUtilities.get_now()
2632
2638
 
2633
2639
  project_resources_folder = os.path.join(repository_folder, "Other", "Scripts")
2634
2640
  PrepareBuildCodeunits_script_name = "PrepareBuildCodeunits.py"
@@ -2650,23 +2656,29 @@ class TasksForCommonProjectStructure:
2650
2656
  from_day = datetime(now.year, now.month, now.day, 0, 0, 0)
2651
2657
  self.mark_current_version_as_supported(repository_folder, project_version, from_day, until_day)
2652
2658
  self.build_specific_codeunits(repository_folder, codeunits, verbosity, target_environmenttype, additional_arguments_file, is_pre_merge, export_target_directory, False, commandline_arguments, do_git_clean_when_no_changes, note)
2653
- self.__save_lines_of_code(repository_folder)
2659
+ self.__save_lines_of_code(repository_folder, project_version)
2654
2660
 
2655
2661
  @GeneralUtilities.check_arguments
2656
- def __save_lines_of_code(self, repository_folder: str) -> None:
2657
- loc = self.__sc.get_lines_of_code(repository_folder)
2662
+ def __save_lines_of_code(self, repository_folder: str, project_version: str) -> None:
2663
+ loc = self.__sc.get_lines_of_code_with_default_excluded_patterns(repository_folder)
2658
2664
  loc_metric_folder = os.path.join(repository_folder, "Other", "Metrics")
2659
2665
  GeneralUtilities.ensure_directory_exists(loc_metric_folder)
2660
- loc_metric_file = os.path.join(loc_metric_folder, "LinesOfCode.txt")
2666
+ loc_metric_file = os.path.join(loc_metric_folder, "LinesOfCode.csv")
2661
2667
  GeneralUtilities.ensure_file_exists(loc_metric_file)
2662
- GeneralUtilities.write_text_to_file(loc_metric_file, str(loc))
2668
+ old_lines = GeneralUtilities.read_lines_from_file(loc_metric_file)
2669
+ new_lines = []
2670
+ for line in old_lines:
2671
+ if not line.startswith(f"v{project_version};"):
2672
+ new_lines.append(line)
2673
+ new_lines.append(f"v{project_version};{loc}")
2674
+ GeneralUtilities.write_lines_to_file(loc_metric_file, new_lines)
2663
2675
 
2664
2676
  @GeneralUtilities.check_arguments
2665
2677
  def build_specific_codeunits(self, repository_folder: str, codeunits: list[str], verbosity: int = 1, target_environmenttype: str = "QualityCheck", additional_arguments_file: str = None, is_pre_merge: bool = False, export_target_directory: str = None, assume_dependent_codeunits_are_already_built: bool = True, commandline_arguments: list[str] = [], do_git_clean_when_no_changes: bool = False, note: str = None, check_for_new_files: bool = True) -> None:
2666
- now_begin: datetime = datetime.now()
2667
- codeunits_list = "{"+", ".join(["a", "b"])+"}"
2678
+ now_begin: datetime = GeneralUtilities.get_now()
2679
+ codeunits_list = "{"+", ".join(codeunits)+"}"
2668
2680
  if verbosity > 2:
2669
- GeneralUtilities.write_message_to_stdout(f"Start building codeunits ({codeunits_list}) in repository '{repository_folder}'...")
2681
+ GeneralUtilities.write_message_to_stdout(f"Start building codeunits {codeunits_list} in repository '{repository_folder}'...")
2670
2682
  self.__sc.assert_is_git_repository(repository_folder)
2671
2683
  self.__check_target_environmenttype(target_environmenttype)
2672
2684
  repository_folder = GeneralUtilities.resolve_relative_path_from_current_working_directory(repository_folder)
@@ -2729,7 +2741,7 @@ class TasksForCommonProjectStructure:
2729
2741
  archive_file = os.path.join(os.getcwd(), f"{filename_without_extension}.zip")
2730
2742
  shutil.move(archive_file, target_folder)
2731
2743
 
2732
- now_end: datetime = datetime.now()
2744
+ now_end: datetime = GeneralUtilities.get_now()
2733
2745
  message2 = f"Finished build codeunits in product {repository_name}. (Finished: {GeneralUtilities.datetime_to_string_for_logfile_entry(now_end)})"
2734
2746
  if note is not None:
2735
2747
  message2 = f"{message2} ({note})"
@@ -3107,7 +3119,7 @@ class TasksForCommonProjectStructure:
3107
3119
  @GeneralUtilities.check_arguments
3108
3120
  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:
3109
3121
  self.assert_is_codeunit_folder(codeunit_folder)
3110
- now = datetime.now()
3122
+ now = GeneralUtilities.get_now()
3111
3123
  codeunit_folder = GeneralUtilities.resolve_relative_path_from_current_working_directory(codeunit_folder)
3112
3124
  repository_folder = GeneralUtilities.resolve_relative_path("..", codeunit_folder)
3113
3125
  codeunit_name: str = os.path.basename(codeunit_folder)
@@ -3324,9 +3336,9 @@ class TasksForCommonProjectStructure:
3324
3336
  GeneralUtilities.write_message_to_stdout("Debug: Dependency-update skipped.")
3325
3337
 
3326
3338
  GeneralUtilities.write_message_to_stdout(f"Check reference-repository...")
3327
- now = datetime.now()
3339
+ now = GeneralUtilities.get_now()
3328
3340
  for unsupported_version in self.get_unsupported_versions(repository_folder, now):
3329
- reference_folder = f"{reference_folder}/ReferenceContent/v{unsupported_version}"
3341
+ reference_folder = f"{reference_folder}/ReferenceContent/v{unsupported_version[0]}"
3330
3342
  GeneralUtilities.ensure_directory_does_not_exist(reference_folder)
3331
3343
  self.__sc.git_commit(reference_folder, "Removed reference of outdated versions.")
3332
3344
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ScriptCollection
3
- Version: 3.5.157
3
+ Version: 3.5.158
4
4
  Summary: The ScriptCollection is the place for reusable scripts.
5
5
  Home-page: https://github.com/anionDev/ScriptCollection
6
6
  Author: Marius Göcke
@@ -1,17 +1,17 @@
1
1
  ScriptCollection/CertificateUpdater.py,sha256=OAxrG21k_o3W3niOOGNSZzUPJlvolOWc1lRB2dMhc3g,9212
2
- ScriptCollection/Executables.py,sha256=jfg8X22SxE2WkLhLHrB1ny4u32udEV8ORcw9b2aICcY,37570
3
- ScriptCollection/GeneralUtilities.py,sha256=l2uEoh73ZGAx_0OTT7zr2FjqCuL3SEBVakq_FTj95zw,48183
2
+ ScriptCollection/Executables.py,sha256=xWXG2lKx82y697vFDC3EsG1K3FqyX1Fo0bnfLSXIY1A,38282
3
+ ScriptCollection/GeneralUtilities.py,sha256=3pjPt7jPK73MgdQ9CAANDrEWn2WI6vpjLkkvZI8JKww,48752
4
4
  ScriptCollection/ImageUpdater.py,sha256=qTe3yoqzQJY7LZdXBbjbWvrsSQaeHy1VwmOxaRzU2ig,29305
5
5
  ScriptCollection/ProcessesRunner.py,sha256=3mu4ZxzZleQo0Op6o9EYTCFiJfb6kx5ov2YfZfT89mU,1395
6
6
  ScriptCollection/ProgramRunnerBase.py,sha256=2kMIAqdc65UjBAddOZkzy_aFx9h5roZ5a4bQNM6RV6Y,2480
7
7
  ScriptCollection/ProgramRunnerEpew.py,sha256=4pjEd0r9Fcz3TTDv0MdTSd5KkigYXcWUVI1X43regfU,6477
8
8
  ScriptCollection/ProgramRunnerPopen.py,sha256=BPY7-ZMIlqT7JOKz8qlB5c0laF2Js-ijzqk09GxZC48,3821
9
9
  ScriptCollection/SCLog.py,sha256=rMdrEzBKQZBdObPJ9nZ5XCEXRoIFqPh8fAoiX6ZOVuw,4493
10
- ScriptCollection/ScriptCollectionCore.py,sha256=m0r_oEirO8wmimxVwq5r-jvAyuaI7PPFap24AWv2Pxw,139775
11
- ScriptCollection/TasksForCommonProjectStructure.py,sha256=TjGG7ZfP5TXXerx2Zc21cKT2zIbuE0MLub8YntGb1yo,247844
10
+ ScriptCollection/ScriptCollectionCore.py,sha256=zm3KiuLoFiz99JZkqUkPhnKVhKD24bDqxpUiAplON24,141383
11
+ ScriptCollection/TasksForCommonProjectStructure.py,sha256=nXhwH6rfA-XXdQVXYQoxXUQ5sA82d1bDF2EVKdZIfo8,248595
12
12
  ScriptCollection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- scriptcollection-3.5.157.dist-info/METADATA,sha256=93r89YmBKkaLd_J5cFRDocPZ56HH0ff6sQbVhZFmgds,7689
14
- scriptcollection-3.5.157.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
15
- scriptcollection-3.5.157.dist-info/entry_points.txt,sha256=EBRDrnGDURysHNyK0Z0fPCnL7uCCO_Mxc6WYJ47KxAI,4234
16
- scriptcollection-3.5.157.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
17
- scriptcollection-3.5.157.dist-info/RECORD,,
13
+ scriptcollection-3.5.158.dist-info/METADATA,sha256=RLxzi_qgfzjf-_uC_-neTKRG22TJhJK5VKyDRg2SplU,7689
14
+ scriptcollection-3.5.158.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
15
+ scriptcollection-3.5.158.dist-info/entry_points.txt,sha256=EBRDrnGDURysHNyK0Z0fPCnL7uCCO_Mxc6WYJ47KxAI,4234
16
+ scriptcollection-3.5.158.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
17
+ scriptcollection-3.5.158.dist-info/RECORD,,