ScriptCollection 4.0.21__py3-none-any.whl → 4.0.22__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.
@@ -10,18 +10,21 @@ class AnionBuildPlatformConfiguration:
10
10
  additional_arguments_file:str
11
11
  verbosity:LogLevel
12
12
  source_branch:str
13
+ common_remote_name:str
13
14
 
14
15
  def __init__(self,
15
16
  build_repositories_folder:str,
16
17
  project_to_build:str,
17
18
  additional_arguments_file:str,
18
19
  verbosity:LogLevel,
19
- source_branch:str):
20
+ source_branch:str,
21
+ common_remote_name:str):
20
22
  self.build_repositories_folder=build_repositories_folder
21
23
  self.project_to_build=project_to_build
22
24
  self.additional_arguments_file=additional_arguments_file
23
25
  self.verbosity=verbosity
24
26
  self.source_branch=source_branch
27
+ self.common_remote_name=common_remote_name
25
28
 
26
29
  class AnionBuildPlatform:
27
30
 
@@ -34,16 +37,27 @@ class AnionBuildPlatform:
34
37
  self.__sc.log.loglevel=configuration.verbosity
35
38
 
36
39
  def run(self) -> None:
40
+ # Checkout source branch
37
41
  build_repo_folder:str=os.path.join(self.__configuration.build_repositories_folder,self.__configuration.project_to_build+"Build")
38
42
  self.__sc.assert_is_git_repository(build_repo_folder)
43
+ repository:str=os.path.join(self.__configuration,self.__configuration.project_to_build+"Build","Submodules",self.__configuration.project_to_build)
44
+ self.__sc.assert_no_uncommitted_changes(build_repo_folder)
45
+ self.__sc.git_checkout(repository,self.__configuration.source_branch)
46
+
47
+ # Pull changes from remote
48
+ self.__sc.git_fetch(repository)
49
+ self.__sc.git_merge(repository,self.__configuration.common_remote_name+"/"+self.__configuration.source_branch,self.__configuration.source_branch,fastforward=True)#TODO check if is anchestor and throw exception if nor
50
+ self.__sc.git_commit(build_repo_folder,"Updated changes")
51
+
52
+ #Do release
39
53
  scripts_folder:str=os.path.join(build_repo_folder,"Scripts","CreateRelease")
40
- self.__sc.run_program("python",f"MergeToMain",scripts_folder)
41
- self.__sc.run_program("python","MergeToStable",scripts_folder)
54
+ self.__sc.run_program("python","MergeToMain.py",scripts_folder)
55
+ self.__sc.run_program("python","MergeToStable.py",scripts_folder)
42
56
 
43
57
  class TFCPS_AnionBuildPlatform_CLI:
44
58
 
45
59
  @staticmethod
46
- def get_with_overwritable_defaults(default_project_to_build:str=None,default_loglevel:LogLevel=None,default_additionalargumentsfile:str=None,default_build_repositories_folder:str=None,default_source_branch:str=None)->AnionBuildPlatform:
60
+ def get_with_overwritable_defaults(default_project_to_build:str=None,default_loglevel:LogLevel=None,default_additionalargumentsfile:str=None,default_build_repositories_folder:str=None,default_source_branch:str=None,default_remote_name:str=None)->AnionBuildPlatform:
47
61
  parser = argparse.ArgumentParser()
48
62
  verbosity_values = ", ".join(f"{lvl.value}={lvl.name}" for lvl in LogLevel)
49
63
  parser.add_argument('-r', '--buildrepositoriesfolder', required=False,default=None)
@@ -51,6 +65,7 @@ class TFCPS_AnionBuildPlatform_CLI:
51
65
  parser.add_argument('-a', '--additionalargumentsfile', required=False, default=None)
52
66
  parser.add_argument('-v', '--verbosity', required=False, default=3, help=f"Sets the loglevel. Possible values: {verbosity_values}")
53
67
  parser.add_argument('-s', '--sourcebranch', required=False, default="other/next-release")
68
+ parser.add_argument('-r', '--defaultremotename', required=False, default="origin")
54
69
  args=parser.parse_args()
55
70
 
56
71
  if args.projecttobuild is not None:
@@ -78,6 +93,10 @@ class TFCPS_AnionBuildPlatform_CLI:
78
93
  default_source_branch=args.sourcebranch
79
94
  GeneralUtilities.assert_not_null(default_build_repositories_folder,"sourcebranch is not set")
80
95
 
81
- config:AnionBuildPlatformConfiguration=AnionBuildPlatformConfiguration(default_build_repositories_folder,default_project_to_build,default_additionalargumentsfile,default_loglevel,default_source_branch)
96
+ if args.defaultremotename is not None:
97
+ default_remote_name=args.defaultremotename
98
+ GeneralUtilities.assert_not_null(default_remote_name,"defaultremotename is not set")
99
+
100
+ config:AnionBuildPlatformConfiguration=AnionBuildPlatformConfiguration(default_build_repositories_folder,default_project_to_build,default_additionalargumentsfile,default_loglevel,default_source_branch,default_remote_name)
82
101
  tFCPS_MergeToMain:AnionBuildPlatform=AnionBuildPlatform(config)
83
102
  return tFCPS_MergeToMain
@@ -3,10 +3,8 @@ import os
3
3
  import argparse
4
4
  import time
5
5
  import traceback
6
- #import sys
7
6
  import shutil
8
7
  import keyboard
9
- from .AnionBuildPlatform import AnionBuildPlatform, TFCPS_AnionBuildPlatform_CLI
10
8
  from .ScriptCollectionCore import ScriptCollectionCore
11
9
  from .GeneralUtilities import GeneralUtilities
12
10
  from .SCLog import LogLevel
@@ -263,8 +261,8 @@ def BuildCodeUnit() -> int:
263
261
  parser.add_argument('--codeunitfolder', required=False, default=".")
264
262
  verbosity_values = ", ".join(f"{lvl.value}={lvl.name}" for lvl in LogLevel)
265
263
  parser.add_argument('-v', '--verbosity', required=False, default=3, help=f"Sets the loglevel. Possible values: {verbosity_values}")
266
- parser.add_argument('e','--targetenvironment', required=False, default="QualityCheck")
267
- parser.add_argument('a','--additionalargumentsfile', required=False, default=None)
264
+ parser.add_argument('-e','--targetenvironment', required=False, default="QualityCheck")
265
+ parser.add_argument('-a','--additionalargumentsfile', required=False, default=None)
268
266
  parser.add_argument('--assume_dependent_codeunits_are_already_built', type=GeneralUtilities.string_to_boolean, const=True, default=False, nargs='?')
269
267
  #args = parser.parse_args()
270
268
  #t=TasksForCommonProjectStructure(args)
@@ -279,8 +277,8 @@ def BuildCodeUnits() -> int:
279
277
  parser.add_argument('--repositoryfolder', required=False, default=".")
280
278
  verbosity_values = ", ".join(f"{lvl.value}={lvl.name}" for lvl in LogLevel)
281
279
  parser.add_argument('-v', '--verbosity', required=False, default=3, help=f"Sets the loglevel. Possible values: {verbosity_values}")
282
- parser.add_argument('e','--targetenvironment', required=False, default="QualityCheck")
283
- parser.add_argument('a','--additionalargumentsfile', required=False, default=None)
280
+ parser.add_argument('-e','--targetenvironment', required=False, default="QualityCheck")
281
+ parser.add_argument('-a','--additionalargumentsfile', required=False, default=None)
284
282
  parser.add_argument("-c",'--nocache', required=False, default=False, action='store_true')
285
283
  parser.add_argument('--ispremerge', required=False, default=False, action='store_true')
286
284
 
@@ -817,22 +815,45 @@ def LOC() -> int:
817
815
  parser.add_argument('-d', '--do_not_add_default_pattern', action='store_true', default=False)
818
816
  parser.add_argument('-v', '--verbose', action='store_true', default=False)
819
817
  args = parser.parse_args()
818
+
820
819
  folder: str = None
821
820
  if os.path.isabs(args.repository):
822
821
  folder = args.repository
823
822
  else:
824
823
  folder = GeneralUtilities.resolve_relative_path(args.repository, os.getcwd())
825
824
  excluded_patterns: list[str] = []
825
+
826
826
  if not args.do_not_add_default_pattern:
827
827
  excluded_patterns = excluded_patterns + sc.default_excluded_patterns_for_loc
828
828
  if args.excluded_pattern is not None:
829
829
  excluded_patterns = excluded_patterns + args.excluded_pattern
830
+
830
831
  if args.verbose:
831
832
  sc.log.loglevel=LogLevel.Debug
833
+ else:
834
+ sc.log.loglevel=LogLevel.Information
835
+
832
836
  GeneralUtilities.write_message_to_stdout(str(sc.get_lines_of_code(folder, excluded_patterns)))
833
837
  return 0
834
838
 
835
839
  def CreateRelease()->int:
836
- anionBuildPlatform:AnionBuildPlatform=TFCPS_AnionBuildPlatform_CLI.get_with_overwritable_defaults()
837
- anionBuildPlatform.run()
840
+ sc = ScriptCollectionCore()
841
+ parser = argparse.ArgumentParser(description="Creates a release in a git-repository which uses the anion-build-platform.")
842
+ parser.add_argument('-b', '--buildrepository', required=True)
843
+ parser.add_argument('-v', '--verbose', action='store_true', default=False)
844
+ args = parser.parse_args()
845
+
846
+ folder: str = None
847
+ if os.path.isabs(args.buildrepository):
848
+ folder = args.buildrepository
849
+ else:
850
+ folder = GeneralUtilities.resolve_relative_path(args.repository, os.getcwd())
851
+
852
+ if args.verbose:
853
+ sc.log.loglevel=LogLevel.Debug
854
+ else:
855
+ sc.log.loglevel=LogLevel.Information
856
+
857
+ sc.run_program("python","CreateRelease",os.path.join(folder,"Scripts","CreateRelease"))
858
+
838
859
  return 0
@@ -36,7 +36,7 @@ from .ProgramRunnerPopen import ProgramRunnerPopen
36
36
  from .ProgramRunnerEpew import ProgramRunnerEpew, CustomEpewArgument
37
37
  from .SCLog import SCLog, LogLevel
38
38
 
39
- version = "4.0.21"
39
+ version = "4.0.22"
40
40
  __version__ = version
41
41
 
42
42
 
@@ -101,6 +101,7 @@ class TFCPS_CodeUnit_BuildCodeUnit:
101
101
  # TODO validate artifactsinformation_file against xsd
102
102
  self.sc.log.log(f"Finished building codeunit {self.codeunit_name} without errors.")
103
103
 
104
+
104
105
  @GeneralUtilities.check_arguments
105
106
  def verify_artifact_exists(self, codeunit_folder: str, artifact_name_regexes: dict[str, bool]) -> None:
106
107
  codeunit_name: str = os.path.basename(codeunit_folder)
@@ -1,4 +1,5 @@
1
1
  import os
2
+ from datetime import datetime, timedelta
2
3
  from ..GeneralUtilities import GeneralUtilities
3
4
  from ..ScriptCollectionCore import ScriptCollectionCore
4
5
  from ..SCLog import LogLevel
@@ -31,8 +32,12 @@ class TFCPS_CodeUnit_BuildCodeUnits:
31
32
  def build_codeunits(self) -> None:
32
33
  self.sc.log.log(GeneralUtilities.get_line())
33
34
  self.sc.log.log(f"Start building codeunits. (Target environment-type: {self.target_environment_type})")
35
+
36
+ #check if changelog exists
34
37
  changelog_file=os.path.join(self.repository,"Other","Resources","Changelog",f"v{self.tFCPS_Other.get_version_of_project(self.repository)}.md")
35
38
  GeneralUtilities.assert_file_exists(changelog_file,f"Changelogfile \"{changelog_file}\" does not exist. Try to create it for example using \"sccreatechangelogentry -m ...\".")
39
+
40
+ #run prepare-script
36
41
  if os.path.isfile( os.path.join(self.repository,"Other","Scripts","PrepareBuildCodeunits.py")):
37
42
  arguments:str=f"--targetenvironmenttype {self.target_environment_type} --additionalargumentsfile {self.additionalargumentsfile} --verbosity {int(self.sc.log.loglevel)}"
38
43
  if not self.__use_cache:
@@ -41,9 +46,22 @@ class TFCPS_CodeUnit_BuildCodeUnits:
41
46
  self.sc.log.log("No-cache-option can not be applied because there are uncommited changes in the repository.",LogLevel.Warning)
42
47
  else:
43
48
  self.sc.run_program("git","clean -dfx",self.repository)
49
+
44
50
  self.sc.log.log("Prepare build codeunits...")
45
51
  self.sc.run_program("python", f"PrepareBuildCodeunits.py {arguments}", os.path.join(self.repository,"Other","Scripts"),print_live_output=True)
46
- codeunits:list[str]=self.tFCPS_Other.get_codeunits(self.repository)
52
+
53
+ #mark current version as supported
54
+ now = GeneralUtilities.get_now()
55
+ project_version:str=self.tFCPS_Other.get_version_of_project(self.repository)
56
+ if not self.tFCPS_Other.suport_information_exists(self.repository, project_version):
57
+ amount_of_years_for_support:int=1
58
+ support_time = timedelta(days=365*amount_of_years_for_support+30*3+1)
59
+ until = now + support_time
60
+ until_day = datetime(until.year, until.month, until.day, 0, 0, 0)
61
+ from_day = datetime(now.year, now.month, now.day, 0, 0, 0)
62
+ self.tFCPS_Other.mark_current_version_as_supported(self.repository,project_version,from_day,until_day)
63
+
64
+ codeunits:list[str]=self.tFCPS_Other.get_codeunits(self.repository)
47
65
  self.sc.log.log("Codeunits will be built in the following order:")
48
66
  for codeunit_name in codeunits:
49
67
  self.sc.log.log(" - "+codeunit_name)
@@ -55,7 +73,6 @@ class TFCPS_CodeUnit_BuildCodeUnits:
55
73
  self.sc.log.log("Finished building codeunits.")
56
74
  self.sc.log.log(GeneralUtilities.get_line())
57
75
 
58
-
59
76
  @GeneralUtilities.check_arguments
60
77
  def use_cache(self) -> bool:
61
78
  return self.__use_cache
@@ -83,11 +83,7 @@ class TFCPS_MergeToStable:
83
83
  except Exception:
84
84
  self.sc.git_undo_all_changes(self.createRelease_configuration.repository)
85
85
  raise
86
-
87
- eov_enabled=False
88
- if eov_enabled:
89
- self.sc.log.log("Remove outdated versions...")
90
- self.__remove_outdated_version()
86
+
91
87
 
92
88
  self.sc.log.log("Release artifacts...")
93
89
  for codeunit in self.tFCPS_Tools_General.get_codeunits(self.createRelease_configuration.repository):
@@ -110,7 +106,7 @@ class TFCPS_MergeToStable:
110
106
  else:
111
107
  self.sc.log.log(f"Codeunit {codeunit} does not have artifacts to push. (Scriptfile \"{push_script}\" does not exist.)",LogLevel.Debug)
112
108
 
113
- # Generate reference
109
+ # update codeunit-reference
114
110
  self.sc.log.log(f"Release artifacts of codeunit {codeunit}...")
115
111
  reference_folder:str=os.path.join(self.createRelease_configuration.reference_repo,"ReferenceContent")
116
112
  repository:str=self.createRelease_configuration.repository
@@ -121,6 +117,8 @@ class TFCPS_MergeToStable:
121
117
  codeunit_version=self.tFCPS_Tools_General.get_version_of_codeunit(os.path.join(repository,codeunit,f"{codeunit}.codeunit.xml"))
122
118
  self.__export_codeunit_reference_content_to_reference_repository(f"v{project_version}", False, reference_folder, repository, codeunit, projectname, codeunit_version, public_repository_url, f"v{project_version}")
123
119
  self.__export_codeunit_reference_content_to_reference_repository("Latest", True, reference_folder, repository, codeunit, projectname, codeunit_version, public_repository_url, main_branch_name)
120
+
121
+ # Generate reference
124
122
  self.__generate_entire_reference(projectname, project_version, reference_folder)
125
123
 
126
124
  self.sc.log.log("Finishing merging to stable...")
@@ -146,6 +144,9 @@ class TFCPS_MergeToStable:
146
144
 
147
145
  @GeneralUtilities.check_arguments
148
146
  def __generate_entire_reference(self, projectname: str, project_version: str, reference_folder: str) -> None:
147
+ self.sc.log.log("Remove outdated versions...")
148
+ self.__remove_outdated_version()
149
+ self.sc.log.log("Generate reference...")
149
150
  all_available_version_identifier_folders_of_reference: list[str] = list(folder for folder in GeneralUtilities.get_direct_folders_of_folder(reference_folder))
150
151
  all_available_version_identifier_folders_of_reference = sorted(all_available_version_identifier_folders_of_reference, key=cmp_to_key(TFCPS_Tools_General.sort_reference_folder))
151
152
  reference_versions_html_lines = []
@@ -1061,3 +1061,29 @@ class TFCPS_Tools_General:
1061
1061
  def push_nuget_build_artifact(self, push_script_file: str, repository_folder_name: str, codeunitname: str, registry_address: str,api_key: str):
1062
1062
  build_artifact_folder = GeneralUtilities.resolve_relative_path(f"../../Submodules/{repository_folder_name}/{codeunitname}/Other/Artifacts/BuildResult_NuGet", os.path.dirname(push_script_file))
1063
1063
  self.__sc.push_nuget_build_artifact(self.__sc.find_file_by_extension(build_artifact_folder, "nupkg"), registry_address, api_key)
1064
+
1065
+ @GeneralUtilities.check_arguments
1066
+ def suport_information_exists(self, repository_folder: str, version_of_product: str) -> bool:
1067
+ self.__sc.assert_is_git_repository(repository_folder)
1068
+ folder = os.path.join(repository_folder, "Other", "Resources", "Support")
1069
+ file = os.path.join(folder, "InformationAboutSupportedVersions.csv")
1070
+ if not os.path.isfile(file):
1071
+ return False
1072
+ entries = GeneralUtilities.read_csv_file(file, True)
1073
+ for entry in entries:
1074
+ if entry[0] == version_of_product:
1075
+ return True
1076
+ return False
1077
+
1078
+ @GeneralUtilities.check_arguments
1079
+ def mark_current_version_as_supported(self, repository_folder: str, version_of_product: str, supported_from: datetime, supported_until: datetime):
1080
+ self.__sc.assert_is_git_repository(repository_folder)
1081
+ if self.suport_information_exists(repository_folder, version_of_product):
1082
+ raise ValueError(f"Version-support for v{version_of_product} already defined.")
1083
+ folder = os.path.join(repository_folder, "Other", "Resources", "Support")
1084
+ GeneralUtilities.ensure_directory_exists(folder)
1085
+ file = os.path.join(folder, "InformationAboutSupportedVersions.csv")
1086
+ if not os.path.isfile(file):
1087
+ GeneralUtilities.ensure_file_exists(file)
1088
+ GeneralUtilities.append_line_to_file(file, "Version;SupportBegin;SupportEnd")
1089
+ GeneralUtilities.append_line_to_file(file, f"{version_of_product};{GeneralUtilities.datetime_to_string(supported_from)};{GeneralUtilities.datetime_to_string(supported_until)}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ScriptCollection
3
- Version: 4.0.21
3
+ Version: 4.0.22
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,6 +1,6 @@
1
- ScriptCollection/AnionBuildPlatform.py,sha256=RShCPLYC1_d5zr58PO9DEI2sBDVVtn4uHqGf-Q9qSRE,4194
1
+ ScriptCollection/AnionBuildPlatform.py,sha256=y_c2MxFeRAlXm49I1etG3MUmZ8G2jSRJC-4bYNvriJc,5375
2
2
  ScriptCollection/CertificateUpdater.py,sha256=GXPxmYaW-ufOqsiP9kUYdtI6eNg1-GzrrCqsZdwW_HY,9199
3
- ScriptCollection/Executables.py,sha256=HiKhhPCMez9DnMWN9Beicz2IRK2JfD7ec7F6ub0t1BE,40664
3
+ ScriptCollection/Executables.py,sha256=AXdlKf66zdTFmBJXtwl2zzE0DdQ7BMNRNFAHNQpAP7E,41252
4
4
  ScriptCollection/GeneralUtilities.py,sha256=9Xd9aKPj3TkpVtdHXzFMILrRoXAfJCph69XRTstdsBo,49280
5
5
  ScriptCollection/ImageUpdater.py,sha256=qTe3yoqzQJY7LZdXBbjbWvrsSQaeHy1VwmOxaRzU2ig,29305
6
6
  ScriptCollection/ProcessesRunner.py,sha256=3mu4ZxzZleQo0Op6o9EYTCFiJfb6kx5ov2YfZfT89mU,1395
@@ -9,18 +9,18 @@ ScriptCollection/ProgramRunnerEpew.py,sha256=TJdDx9zIMSiCaXh8X-ekrMlbXfGtmd0Mmyx
9
9
  ScriptCollection/ProgramRunnerMock.py,sha256=uTu-aFle1W_oKjeQEmuPsFPQpvo0kRf2FrRjAPIwT5Y,37
10
10
  ScriptCollection/ProgramRunnerPopen.py,sha256=BPY7-ZMIlqT7JOKz8qlB5c0laF2Js-ijzqk09GxZC48,3821
11
11
  ScriptCollection/SCLog.py,sha256=dxGOI4E9lG5v9jk_LajXCkM5nghliCDV8YB8Ihn160s,4541
12
- ScriptCollection/ScriptCollectionCore.py,sha256=3XkHEiExak4h3ixU16M5M-0h7fBmWiptezdWKLOZ98Q,140617
12
+ ScriptCollection/ScriptCollectionCore.py,sha256=bhgSfV4wdtW-EAq4By1h0NMu4GbEGHG-LaKgU3rkNNg,140617
13
13
  ScriptCollection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  ScriptCollection/TFCPS/TFCPS_CodeUnitSpecific_Base.py,sha256=Cj89Xhzf5CRSDVH_-0JachQMsPHfjkz8jtRi_BpiGvY,25979
15
- ScriptCollection/TFCPS/TFCPS_CodeUnit_BuildCodeUnit.py,sha256=xfZ2iFCH-eIqi-AdhqcYaSYqb3JP1VE4o7LrHEtqFQA,7388
16
- ScriptCollection/TFCPS/TFCPS_CodeUnit_BuildCodeUnits.py,sha256=GXFF1xem3fe8Vosb7dsVyOSe3mS1KtFO0WSlCg1XZ6Q,4733
15
+ ScriptCollection/TFCPS/TFCPS_CodeUnit_BuildCodeUnit.py,sha256=4rYKgTAga11NiDx8YUqz3K_Q4eX_n3kC6lvNdXEa24s,7389
16
+ ScriptCollection/TFCPS/TFCPS_CodeUnit_BuildCodeUnits.py,sha256=DGaQk85r8P5ANDhga9pEcTiJSRpZrDykfUOFhJR-bYY,5551
17
17
  ScriptCollection/TFCPS/TFCPS_CreateRelease.py,sha256=d8L1WR2Fx-Ps-5So5fbR_fwTrSKosgzwXHu_wJUtyc8,6510
18
18
  ScriptCollection/TFCPS/TFCPS_Generic.py,sha256=O-0guM_LJCcZmPZJhMgTvXD2RXUJEBWWv6Bt6hDFhvM,1943
19
19
  ScriptCollection/TFCPS/TFCPS_MergeToMain.py,sha256=wX7oF_JYATofrJNQ7XtPKCg8cjr_XSAmE-Dn0BseaNo,7746
20
- ScriptCollection/TFCPS/TFCPS_MergeToStable.py,sha256=AUM6hJDYmFzcP4wCwrn2htf3fTBK9mstxnLWWHaxxPE,22652
20
+ ScriptCollection/TFCPS/TFCPS_MergeToStable.py,sha256=AhmDhGx_eS7LzkRvp_RyIJz9yuj00mvuDNyqWzo26u0,22682
21
21
  ScriptCollection/TFCPS/TFCPS_PreBuildCodeunitsScript.py,sha256=CxdwUklhZVuJGp0vcokoH_KMXFzmlUlZwj77xFYijho,2242
22
22
  ScriptCollection/TFCPS/TFCPS_Tools_Dependencies.py,sha256=o7HI3ki3WWqlAiUsrh3Lky_w6UhYh9hdjYPGOhubQGA,414
23
- ScriptCollection/TFCPS/TFCPS_Tools_General.py,sha256=TU42CTlhiq7G0o0eH0xTEqr_QGR7AX7bukpgM6j5adk,66637
23
+ ScriptCollection/TFCPS/TFCPS_Tools_General.py,sha256=Ueji9NKGK5ABhb3iWwFWtXDx-z-eS3h9GVDoxU51Ah0,68256
24
24
  ScriptCollection/TFCPS/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
25
  ScriptCollection/TFCPS/Docker/TFCPS_CodeUnitSpecific_Docker.py,sha256=-g8h2gCf9rh0KJXUBeQD5d0qLJgBU3Q8DNZXM1UXC04,5259
26
26
  ScriptCollection/TFCPS/Docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -35,8 +35,8 @@ ScriptCollection/TFCPS/NodeJS/TFCPS_CodeUnitSpecific_NodeJS.py,sha256=dnuDlQXThF
35
35
  ScriptCollection/TFCPS/NodeJS/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
36
  ScriptCollection/TFCPS/Python/TFCPS_CodeUnitSpecific_Python.py,sha256=q7msAxCb5VIZ-xhFg1MfzUvWomQRKYldqmW42KFhyMU,6868
37
37
  ScriptCollection/TFCPS/Python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- scriptcollection-4.0.21.dist-info/METADATA,sha256=Xnr9Sp6kMa3g4br2kRCNzPGqiN1nf3ZXSVAm1EYzW38,7688
39
- scriptcollection-4.0.21.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
40
- scriptcollection-4.0.21.dist-info/entry_points.txt,sha256=NeU26D6q7d8n2cmKQiOvHK21w1C7D2kxoNRJaKiyZ5w,4295
41
- scriptcollection-4.0.21.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
42
- scriptcollection-4.0.21.dist-info/RECORD,,
38
+ scriptcollection-4.0.22.dist-info/METADATA,sha256=IGCjSKJZmutDpRN1Cq_mo-Refp8Ip4BI-R-O0Bx4X_0,7688
39
+ scriptcollection-4.0.22.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
40
+ scriptcollection-4.0.22.dist-info/entry_points.txt,sha256=NeU26D6q7d8n2cmKQiOvHK21w1C7D2kxoNRJaKiyZ5w,4295
41
+ scriptcollection-4.0.22.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
42
+ scriptcollection-4.0.22.dist-info/RECORD,,