ScriptCollection 4.2.41__py3-none-any.whl → 4.2.43__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.
@@ -154,7 +154,9 @@ class GeneralUtilities:
154
154
  @staticmethod
155
155
  @check_arguments
156
156
  def datetime_to_string_with_timezone(value: datetime) -> str:
157
- return value.strftime(GeneralUtilities.__datetime_format_with_offset) # returns "2025-08-21 15:30:00 +0200" for example
157
+ result= value.strftime(GeneralUtilities.__datetime_format_with_offset) # returns "2025-08-21 15:30:00 +02:00" for example
158
+ result=result[:-2] + ":" + result[-2:]
159
+ return result
158
160
 
159
161
  @staticmethod
160
162
  @check_arguments
@@ -1,7 +1,8 @@
1
1
  import re
2
2
  from .GeneralUtilities import GeneralUtilities
3
3
 
4
- class CultureChooser:
4
+ class HTTPMaintenanceOverheadHelper:
5
+
5
6
  __culture_regex = re.compile(r"^[a-zA-Z]+(-[a-zA-Z]+)?$")
6
7
 
7
8
  def is_valid_culture(self,culture_string: str) -> bool:
@@ -27,3 +28,9 @@ class CultureChooser:
27
28
  content_as_string = content.decode("utf-8")
28
29
  result=GeneralUtilities.replace_variable("/*","supportedCultures","*/", ", ".join([f"\"{supported_language}\"" for supported_language in supported_languages]), content_as_string)
29
30
  return result
31
+
32
+ def get_maintenance_file(self,site_title:str) -> str:
33
+ content = GeneralUtilities._internal_load_resource("MaintenanceSite/MaintenanceSite.html")
34
+ content_as_string = content.decode("utf-8")
35
+ result=GeneralUtilities.replace_variable("<!--","title","-->", site_title, content_as_string)
36
+ return result
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+
4
+ <head>
5
+ <meta charset="utf-8">
6
+ <title><!--__title__--></title>
7
+ </head>
8
+
9
+ <body>
10
+ <h1><!--__title__--></h1>
11
+ <h2>Maintenance-mode</h2>
12
+ <!--__title__--> will be back again soon.
13
+ </body>
14
+
15
+ </html>
@@ -35,7 +35,7 @@ from .ProgramRunnerBase import ProgramRunnerBase
35
35
  from .ProgramRunnerPopen import ProgramRunnerPopen
36
36
  from .SCLog import SCLog, LogLevel
37
37
 
38
- version = "4.2.41"
38
+ version = "4.2.43"
39
39
  __version__ = version
40
40
 
41
41
 
@@ -2591,7 +2591,7 @@ OCR-content:
2591
2591
  GeneralUtilities.write_lines_to_file(target_file, new_lines)
2592
2592
 
2593
2593
  @GeneralUtilities.check_arguments
2594
- def do_and_log_task(self, name_of_task: str, task):
2594
+ def do_and_log_task(self, name_of_task: str, task,do_and_log_task:bool=True):
2595
2595
  try:
2596
2596
  self.log.log(f"Start action \"{name_of_task}\".", LogLevel.Information)
2597
2597
  result = task()
@@ -2602,7 +2602,8 @@ OCR-content:
2602
2602
  self.log.log_exception(f"Error while running action \"{name_of_task}\".", e, LogLevel.Error)
2603
2603
  return 1
2604
2604
  finally:
2605
- self.log.log(f"Finished action \"{name_of_task}\".", LogLevel.Information)
2605
+ if do_and_log_task:
2606
+ self.log.log(f"Finished action \"{name_of_task}\".", LogLevel.Information)
2606
2607
 
2607
2608
 
2608
2609
  default_excluded_patterns_for_loc: list[str] = ["**.txt", "**.md", "**.svg", "**.vscode", "**/Resources/**", "**/Reference/**", ".gitignore", ".gitattributes", "Other/Metrics/**"]
@@ -4,7 +4,7 @@ from lxml import etree
4
4
  from ...GeneralUtilities import GeneralUtilities
5
5
  from ...SCLog import LogLevel
6
6
  from ..TFCPS_CodeUnitSpecific_Base import TFCPS_CodeUnitSpecific_Base,TFCPS_CodeUnitSpecific_Base_CLI
7
- from ...CultureChooser import CultureChooser
7
+ from ...HTTPMaintenanceOverheadHelper import HTTPMaintenanceOverheadHelper
8
8
 
9
9
  class TFCPS_CodeUnitSpecific_NodeJS_Functions(TFCPS_CodeUnitSpecific_Base):
10
10
 
@@ -126,7 +126,7 @@ class TFCPS_CodeUnitSpecific_NodeJS_Functions(TFCPS_CodeUnitSpecific_Base):
126
126
  def add_culture_chooser(self,site_title:str,supported_cultures:list[str])->None:
127
127
  output_folder=self.get_codeunit_folder()+"/Other/Artifacts/BuildResult_WebApplication/browser"
128
128
  GeneralUtilities.assert_folder_exists(output_folder)
129
- cc:CultureChooser=CultureChooser()
129
+ cc:HTTPMaintenanceOverheadHelper=HTTPMaintenanceOverheadHelper()
130
130
 
131
131
  index_html_file=output_folder+"/index.html"
132
132
  GeneralUtilities.ensure_file_exists(index_html_file)
@@ -138,6 +138,20 @@ class TFCPS_CodeUnitSpecific_NodeJS_Functions(TFCPS_CodeUnitSpecific_Base):
138
138
  cc_script_content=cc.get_culture_chooser_script(supported_cultures)
139
139
  GeneralUtilities.write_text_to_file(cc_script_file, cc_script_content)
140
140
 
141
+ @GeneralUtilities.check_arguments
142
+ def add_maintenance_site(self,site_title:str)->None:
143
+ output_folder_base=self.get_codeunit_folder()+"/Other/Artifacts/BuildResult_WebApplication"
144
+ GeneralUtilities.assert_folder_exists(output_folder_base)
145
+ output_folder=os.path.join(output_folder_base,"maintenance")
146
+ GeneralUtilities.ensure_directory_exists(output_folder)
147
+ cc:HTTPMaintenanceOverheadHelper=HTTPMaintenanceOverheadHelper()
148
+
149
+ maintenance_file=output_folder+"/MaintenanceSite.html"
150
+ GeneralUtilities.ensure_file_exists(maintenance_file)
151
+ maintenance_content=cc.get_maintenance_file(site_title)
152
+ GeneralUtilities.write_text_to_file(maintenance_file, maintenance_content)
153
+
154
+
141
155
  @GeneralUtilities.check_arguments
142
156
  def get_available_cultures_for_angular_app(self)->None:
143
157
  return self._protected_sc.get_available_cultures_for_angular_app(self.get_codeunit_folder()+"/angular.json")
@@ -32,7 +32,8 @@ class TFCPS_CodeUnit_BuildCodeUnits:
32
32
  @GeneralUtilities.check_arguments
33
33
  def build_codeunits(self) -> None:
34
34
  self.sc.log.log(GeneralUtilities.get_line())
35
- self.sc.log.log(f"Start building codeunits. (Target environment-type: {self.target_environment_type})")
35
+ start_time:datetime=GeneralUtilities.get_now()
36
+ self.sc.log.log(f"Start building codeunits at {GeneralUtilities.datetime_to_string_with_timezone(start_time)}. (Target environment-type: {self.target_environment_type})")
36
37
 
37
38
  #check if changelog exists
38
39
  changelog_file=os.path.join(self.repository,"Other","Resources","Changelog",f"v{self.tfcps_tools_general.get_version_of_project(self.repository)}.md")
@@ -67,7 +68,9 @@ class TFCPS_CodeUnit_BuildCodeUnits:
67
68
  if self.is_pre_merge():
68
69
  self.__collect_metrics()
69
70
  self.__generate_loc_diagram()
70
- self.sc.log.log("Finished building codeunits.")
71
+ end_time:datetime=GeneralUtilities.get_now()
72
+ duration=end_time-start_time
73
+ self.sc.log.log(f"Finished building codeunits at {GeneralUtilities.datetime_to_string_with_timezone(start_time)}. (Duration: {GeneralUtilities.timedelta_to_simple_string(duration)})")
71
74
  self.sc.log.log(GeneralUtilities.get_line())
72
75
 
73
76
  @GeneralUtilities.check_arguments
@@ -1,5 +1,6 @@
1
1
  from datetime import datetime,timezone
2
2
  from graphlib import TopologicalSorter
3
+ import math
3
4
  import os
4
5
  from pathlib import Path
5
6
  import shutil
@@ -1401,3 +1402,59 @@ class TFCPS_Tools_General:
1401
1402
  GeneralUtilities.write_lines_to_file(env_variables_file,lines)
1402
1403
  arguments=arguments + " --env-file Parameters.env pull --quiet"
1403
1404
  self.__sc.run_program_with_retry("docker",arguments,test_service_folder,print_live_output=self.__sc.log.loglevel==LogLevel.Debug)
1405
+
1406
+ def load_deb_control_file_content(self, file: str, codeunitname: str, codeunitversion: str, installedsize: int, maintainername: str, maintaineremail: str, description: str) -> str:
1407
+ content = GeneralUtilities.read_text_from_file(file)
1408
+ content = GeneralUtilities.replace_variable_in_string(content, "codeunitname", codeunitname)
1409
+ content = GeneralUtilities.replace_variable_in_string(content, "codeunitversion", codeunitversion)
1410
+ content = GeneralUtilities.replace_variable_in_string(content, "installedsize", str(installedsize))
1411
+ content = GeneralUtilities.replace_variable_in_string(content, "maintainername", maintainername)
1412
+ content = GeneralUtilities.replace_variable_in_string(content, "maintaineremail", maintaineremail)
1413
+ content = GeneralUtilities.replace_variable_in_string(content, "description", description)
1414
+ return content
1415
+
1416
+ def calculate_deb_package_size(self, binary_folder: str) -> int:
1417
+ size_in_bytes = 0
1418
+ for file in GeneralUtilities.get_all_files_of_folder(binary_folder):
1419
+ size_in_bytes = size_in_bytes+os.path.getsize(file)
1420
+ result = math.ceil(size_in_bytes/1024)
1421
+ return result
1422
+
1423
+ def create_deb_package_for_artifact(self,codeunit_folder: str, maintainername: str, maintaineremail: str, description: str) -> None:
1424
+ self.assert_is_codeunit_folder(codeunit_folder)
1425
+ codeunit_name = os.path.basename(codeunit_folder)
1426
+ binary_folder = GeneralUtilities.resolve_relative_path("Other/Artifacts/BuildResult_DotNet_linux-x64", codeunit_folder)
1427
+ deb_output_folder = GeneralUtilities.resolve_relative_path("Other/Artifacts/BuildResult_Deb", codeunit_folder)
1428
+ control_file = GeneralUtilities.resolve_relative_path("Other/Build/DebControlFile.txt", codeunit_folder)
1429
+ installedsize = self.calculate_deb_package_size(binary_folder)
1430
+ control_file_content = self.load_deb_control_file_content(control_file, codeunit_name, self.get_version_of_codeunit(os.path.join(codeunit_folder,f"{codeunit_name}.codeunit.xml")), installedsize, maintainername, maintaineremail, description)
1431
+ self.__sc.create_deb_package(codeunit_name, binary_folder, control_file_content, deb_output_folder, 555)
1432
+
1433
+ @GeneralUtilities.check_arguments
1434
+ def create_zip_file_for_artifact(self, codeunit_folder: str, artifact_source_name: str, name_of_new_artifact: str) -> None:
1435
+ self.assert_is_codeunit_folder(codeunit_folder)
1436
+ src_artifact_folder = GeneralUtilities.resolve_relative_path(f"Other/Artifacts/{artifact_source_name}", codeunit_folder)
1437
+ shutil.make_archive(name_of_new_artifact, 'zip', src_artifact_folder)
1438
+ archive_file = os.path.join(os.getcwd(), f"{name_of_new_artifact}.zip")
1439
+ target_folder = GeneralUtilities.resolve_relative_path(f"Other/Artifacts/{name_of_new_artifact}", codeunit_folder)
1440
+ GeneralUtilities.ensure_folder_exists_and_is_empty(target_folder)
1441
+ shutil.move(archive_file, target_folder)
1442
+
1443
+ def generate_winget_zip_manifest(self, codeunit_folder: str, artifact_name_of_zip: str):
1444
+ self.assert_is_codeunit_folder(codeunit_folder)
1445
+ codeunit_name = os.path.basename(codeunit_folder)
1446
+ codeunit_version = self.get_version_of_codeunit(os.path.join(codeunit_folder,f"{codeunit_name}.codeunit.xml"))
1447
+ build_folder = os.path.join(codeunit_folder, "Other", "Build")
1448
+ artifacts_folder = os.path.join(codeunit_folder, "Other", "Artifacts", artifact_name_of_zip)
1449
+ manifest_folder = os.path.join(codeunit_folder, "Other", "Artifacts", "WinGet-Manifest")
1450
+ GeneralUtilities.assert_folder_exists(artifacts_folder)
1451
+ artifacts_file = self.__sc.find_file_by_extension(artifacts_folder, "zip")
1452
+ winget_template_file = os.path.join(build_folder, "WinGet-Template.yaml")
1453
+ winget_manifest_file = os.path.join(manifest_folder, "WinGet-Manifest.yaml")
1454
+ GeneralUtilities.assert_file_exists(winget_template_file)
1455
+ GeneralUtilities.ensure_directory_exists(manifest_folder)
1456
+ GeneralUtilities.ensure_file_exists(winget_manifest_file)
1457
+ manifest_content = GeneralUtilities.read_text_from_file(winget_template_file)
1458
+ manifest_content = GeneralUtilities.replace_variable_in_string(manifest_content, "version", codeunit_version)
1459
+ manifest_content = GeneralUtilities.replace_variable_in_string(manifest_content, "sha256_hashvalue", GeneralUtilities.get_sha256_of_file(artifacts_file))
1460
+ GeneralUtilities.write_text_to_file(winget_manifest_file, manifest_content)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ScriptCollection
3
- Version: 4.2.41
3
+ Version: 4.2.43
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
@@ -36,7 +36,7 @@ Requires-Dist: pycdlib>=1.14.0
36
36
  Requires-Dist: Pygments>=2.19.2
37
37
  Requires-Dist: pylint>=4.0.5
38
38
  Requires-Dist: pyOpenSSL>=25.3.0
39
- Requires-Dist: PyPDF>=6.7.2
39
+ Requires-Dist: PyPDF>=6.7.3
40
40
  Requires-Dist: pytest>=8.4.2
41
41
  Requires-Dist: PyYAML>=6.0.3
42
42
  Requires-Dist: qrcode>=8.2.0
@@ -1,8 +1,8 @@
1
1
  ScriptCollection/AnionBuildPlatform.py,sha256=Sw35p6gKZ4qjvaDWtrnWW3iCHdUpHSUjtq5tc2iL_AI,11522
2
2
  ScriptCollection/CertificateUpdater.py,sha256=aCBF-bym5renP5joL32ev7WZW8HHh6hNm_mz6_hQKLc,9617
3
- ScriptCollection/CultureChooser.py,sha256=TX5DdFzu5645ir9SI80rkRHDtf3cQ9zeZrpYj3HJLZs,1653
4
3
  ScriptCollection/Executables.py,sha256=zP8EUkcl5q31AwHdYrADQRru2Wxwv2m67O-3m6PoGbs,43378
5
- ScriptCollection/GeneralUtilities.py,sha256=g0oBL8aFbvoIFwcAW93z2s5BAjJbrsFEMTQwLJesmZM,58667
4
+ ScriptCollection/GeneralUtilities.py,sha256=FfUGXUKTTVh6bWPqC39qkwPBolM2ICAMt8REpD66HKQ,58740
5
+ ScriptCollection/HTTPMaintenanceOverheadHelper.py,sha256=TToNtyO1XzsMbBsTBf3o0xgOK0v4Jf03qw2Z0xb2nCk,2007
6
6
  ScriptCollection/ImageUpdater.py,sha256=fxyz3oZkKlqyieYiyj0Yi1dQjOJEuHhu0WvL_JHsB90,38905
7
7
  ScriptCollection/ProcessesRunner.py,sha256=o5raxIt3lknNPoPrjNzJ2bprRPJ3SnL0rrR7crraD7E,1523
8
8
  ScriptCollection/ProgramRunnerBase.py,sha256=4A2eQgSg_rRgQcgSi-LYtUlM-uSQEpS7qFWn0tWt4uo,2171
@@ -10,7 +10,7 @@ ScriptCollection/ProgramRunnerMock.py,sha256=uTu-aFle1W_oKjeQEmuPsFPQpvo0kRf2FrR
10
10
  ScriptCollection/ProgramRunnerPopen.py,sha256=BPY7-ZMIlqT7JOKz8qlB5c0laF2Js-ijzqk09GxZC48,3821
11
11
  ScriptCollection/ProgramRunnerSudo.py,sha256=_khC3xuTdrPoLluBJZWfldltmmuKltABJPcbjZSFW-4,4835
12
12
  ScriptCollection/SCLog.py,sha256=8TRy1LeYMsPOIuWUcnUNNbO5pd-cNBS-3cn-kdzP8FU,4768
13
- ScriptCollection/ScriptCollectionCore.py,sha256=5q1jImWNzVG5Q5EUboBvSrXTBJQF_VgOs3Ufe1GpZoM,156757
13
+ ScriptCollection/ScriptCollectionCore.py,sha256=CnpKBw38cqjp66erQbJavnIzuhxR45FeekQgejFjihg,156819
14
14
  ScriptCollection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  ScriptCollection/OCIImages/AbstractImageHandler.py,sha256=Pa72cRybzBroy-OzzxZqKpFB58iY2kcf5yFfIAIPfXk,1627
16
16
  ScriptCollection/OCIImages/OCIImageManager.py,sha256=xTYnj68CRDkTjJiibSov1HSI0djmmcY6mwP6_fD0kCM,7141
@@ -22,15 +22,16 @@ ScriptCollection/OCIImages/ConcreteImageHandlers/ImageHandlerGenericV.py,sha256=
22
22
  ScriptCollection/OCIImages/ConcreteImageHandlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
23
23
  ScriptCollection/Resources/CultureChooser/CultureChooser.js,sha256=5-4pwGDq5j1UnpTZy850ZMoxlM9tYPeu781QpZBtCWM,951
24
24
  ScriptCollection/Resources/CultureChooser/index.html,sha256=gxQzbrSp4WU52TqN-gcBEtz2gJXmmM14OwTSFtFVRvw,276
25
+ ScriptCollection/Resources/MaintenanceSite/MaintenanceSite.html,sha256=CX9S1bdOz6xU2aGfr03tJRGczQrlpn-IeODc15d5kc0,232
25
26
  ScriptCollection/TFCPS/TFCPS_CodeUnitSpecific_Base.py,sha256=xpt-Z_jztEaKgpT1DDSX7wezWX0VKS5LQb7IKAzvi4U,27860
26
27
  ScriptCollection/TFCPS/TFCPS_CodeUnit_BuildCodeUnit.py,sha256=vnNrwvNePvW2dQhnSusBjgvOssI3a1P3g94bNxNIr3o,8069
27
- ScriptCollection/TFCPS/TFCPS_CodeUnit_BuildCodeUnits.py,sha256=YfyO1aSBnlKOpzEkqya0rLXQmZ3gw-mdwUqSXVQBbRE,14918
28
+ ScriptCollection/TFCPS/TFCPS_CodeUnit_BuildCodeUnits.py,sha256=GRLayAR2rEk_rnb0UDFfTPr6MD5YRxC8oVU25MZC2J8,15266
28
29
  ScriptCollection/TFCPS/TFCPS_CreateRelease.py,sha256=yqGstRjRfVVGbqrcBgtYStqth2x2SvBb3y2Ht8GsuMQ,6554
29
30
  ScriptCollection/TFCPS/TFCPS_Generic.py,sha256=O-0guM_LJCcZmPZJhMgTvXD2RXUJEBWWv6Bt6hDFhvM,1943
30
31
  ScriptCollection/TFCPS/TFCPS_MergeToMain.py,sha256=-Ev9D3bZDlUk2WFQhcmvzQ3FCS97OdsVUd0koAdmpZc,7474
31
32
  ScriptCollection/TFCPS/TFCPS_MergeToStable.py,sha256=Ajfy2pLajTuU6UpwItHt4C2a-gLF3gPc4z6BktL3Cio,22163
32
33
  ScriptCollection/TFCPS/TFCPS_PreBuildCodeunitsScript.py,sha256=f0Uq1cA_4LvmL72cal0crrbKF6PcxL13D9wBKuQ1YBw,2328
33
- ScriptCollection/TFCPS/TFCPS_Tools_General.py,sha256=brYs_0hqZL-BkxlLMATkNSEWbIwCyXdBKgwTKAGCSwg,89392
34
+ ScriptCollection/TFCPS/TFCPS_Tools_General.py,sha256=z3KL8R_Ni9YwTd3imBm2-B49GDJOP5HwK8N79D8Kuuc,93966
34
35
  ScriptCollection/TFCPS/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
36
  ScriptCollection/TFCPS/Docker/TFCPS_CodeUnitSpecific_Docker.py,sha256=krF-SYvXyG1cAepj-5witV76suBvEumTApn7nY6Zin0,10564
36
37
  ScriptCollection/TFCPS/Docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -43,12 +44,12 @@ ScriptCollection/TFCPS/Flutter/TFCPS_CodeUnitSpecific_Flutter.py,sha256=U8oBAOLR
43
44
  ScriptCollection/TFCPS/Flutter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
45
  ScriptCollection/TFCPS/Go/TFCPS_CodeUnitSpecific_Go.py,sha256=kyx26AnT1-LySFA46wfJ9yZUKYdMWTD0U2XZfSQbuB0,3497
45
46
  ScriptCollection/TFCPS/Go/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
- ScriptCollection/TFCPS/NodeJS/TFCPS_CodeUnitSpecific_NodeJS.py,sha256=5YNFOBY54IjTNFW52GaryYq5c1MDjhjxNUcjM3TAqLk,8281
47
+ ScriptCollection/TFCPS/NodeJS/TFCPS_CodeUnitSpecific_NodeJS.py,sha256=wKB5t-K7p3U6WhxZALGrKipU71c20YuL9f8twQaLrAA,9101
47
48
  ScriptCollection/TFCPS/NodeJS/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
49
  ScriptCollection/TFCPS/Python/TFCPS_CodeUnitSpecific_Python.py,sha256=nLw_eSUd_56jjgfcAvtUyzecSZ14mYmNJl0iu-1YNVk,13496
49
50
  ScriptCollection/TFCPS/Python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- scriptcollection-4.2.41.dist-info/METADATA,sha256=XpDhiRL0yE3myjIEC4HyYUQJwdY4PQG1-Jb-qcc9Phg,7690
51
- scriptcollection-4.2.41.dist-info/WHEEL,sha256=YCfwYGOYMi5Jhw2fU4yNgwErybb2IX5PEwBKV4ZbdBo,91
52
- scriptcollection-4.2.41.dist-info/entry_points.txt,sha256=m_HqkdaPXThWnd2chMMhs8dA5aRJu1ifrcwUnvw5SBE,4572
53
- scriptcollection-4.2.41.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
54
- scriptcollection-4.2.41.dist-info/RECORD,,
51
+ scriptcollection-4.2.43.dist-info/METADATA,sha256=uuDLYdS0gGlYbD0Xf9ZpmPpkoAUdaltq8MNYnOMa5wg,7690
52
+ scriptcollection-4.2.43.dist-info/WHEEL,sha256=YCfwYGOYMi5Jhw2fU4yNgwErybb2IX5PEwBKV4ZbdBo,91
53
+ scriptcollection-4.2.43.dist-info/entry_points.txt,sha256=m_HqkdaPXThWnd2chMMhs8dA5aRJu1ifrcwUnvw5SBE,4572
54
+ scriptcollection-4.2.43.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
55
+ scriptcollection-4.2.43.dist-info/RECORD,,