ScriptCollection 3.5.66__py3-none-any.whl → 3.5.68__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.
- ScriptCollection/Executables.py +42 -6
- ScriptCollection/GeneralUtilities.py +3 -2
- ScriptCollection/ScriptCollectionCore.py +34 -3
- ScriptCollection/TasksForCommonProjectStructure.py +15 -0
- {ScriptCollection-3.5.66.dist-info → ScriptCollection-3.5.68.dist-info}/METADATA +1 -1
- ScriptCollection-3.5.68.dist-info/RECORD +16 -0
- {ScriptCollection-3.5.66.dist-info → ScriptCollection-3.5.68.dist-info}/entry_points.txt +1 -0
- ScriptCollection-3.5.66.dist-info/RECORD +0 -16
- {ScriptCollection-3.5.66.dist-info → ScriptCollection-3.5.68.dist-info}/WHEEL +0 -0
- {ScriptCollection-3.5.66.dist-info → ScriptCollection-3.5.68.dist-info}/top_level.txt +0 -0
ScriptCollection/Executables.py
CHANGED
|
@@ -3,6 +3,7 @@ import argparse
|
|
|
3
3
|
import time
|
|
4
4
|
import traceback
|
|
5
5
|
import sys
|
|
6
|
+
import shutil
|
|
6
7
|
import keyboard
|
|
7
8
|
from .TasksForCommonProjectStructure import TasksForCommonProjectStructure
|
|
8
9
|
from .ScriptCollectionCore import ScriptCollectionCore
|
|
@@ -528,13 +529,30 @@ def Rename() -> int:
|
|
|
528
529
|
return 0
|
|
529
530
|
|
|
530
531
|
|
|
532
|
+
def Copy() -> int:
|
|
533
|
+
parser = argparse.ArgumentParser(description="This function copies a file or folder.")
|
|
534
|
+
parser.add_argument('-s', '--source', required=True)
|
|
535
|
+
parser.add_argument('-t', '--target', required=True)
|
|
536
|
+
args = parser.parse_args()
|
|
537
|
+
if os.path.isfile(args.target) or os.path.isdir(args.target):
|
|
538
|
+
raise ValueError(f"Can not copy to '{args.target}' because the target already exists.")
|
|
539
|
+
if os.path.isfile(args.source):
|
|
540
|
+
shutil.copyfile(args.source, args.target)
|
|
541
|
+
elif os.path.isdir(args.source):
|
|
542
|
+
GeneralUtilities.ensure_directory_exists(args.target)
|
|
543
|
+
GeneralUtilities.copy_content_of_folder(args.source,args.target)
|
|
544
|
+
else:
|
|
545
|
+
raise ValueError(f"'{args.source}' can not be copied because the path does not exist.")
|
|
546
|
+
return 0
|
|
547
|
+
|
|
548
|
+
|
|
531
549
|
def PrintOSName() -> int:
|
|
532
550
|
GeneralUtilities.write_exception_to_stderr("This function is not implemented yet.")
|
|
533
551
|
if GeneralUtilities.current_system_is_windows():
|
|
534
552
|
GeneralUtilities.write_message_to_stdout("Windows")
|
|
535
553
|
elif GeneralUtilities.current_system_is_linux():
|
|
536
554
|
GeneralUtilities.write_message_to_stdout("Linux")
|
|
537
|
-
# TODO
|
|
555
|
+
# TODO consider Mac, Unix, etc. too
|
|
538
556
|
else:
|
|
539
557
|
GeneralUtilities.write_message_to_stderr("Unknown OS.")
|
|
540
558
|
return 1
|
|
@@ -548,12 +566,30 @@ def PrintCurrecntWorkingDirectory() -> int:
|
|
|
548
566
|
|
|
549
567
|
def ListFolderContent() -> int:
|
|
550
568
|
GeneralUtilities.write_exception_to_stderr("This function is not implemented yet.")
|
|
551
|
-
|
|
552
|
-
|
|
569
|
+
parser = argparse.ArgumentParser(description="This function lists folder-content.")
|
|
570
|
+
parser.add_argument('-p', '--path', required=True)
|
|
571
|
+
parser.add_argument('-f', '--excludefiles', action='store_true', required=False,default=False)
|
|
572
|
+
parser.add_argument('-d', '--excludedirectories', action='store_true', required=False,default=False)
|
|
573
|
+
parser.add_argument('-n', '--printonlynamewithoutpath', action='store_true', required=False,default=False)
|
|
553
574
|
# TODO add option to also list transitively list subfolder
|
|
554
|
-
# TODO add option to
|
|
555
|
-
|
|
556
|
-
|
|
575
|
+
# TODO add option to show only content which matches a filter by extension or regex or glob-pattern
|
|
576
|
+
args=parser.parse_args()
|
|
577
|
+
folder=args.path
|
|
578
|
+
if not os.path.isabs(folder):
|
|
579
|
+
folder=GeneralUtilities.resolve_relative_path(folder,os.getcwd())
|
|
580
|
+
content=[]
|
|
581
|
+
if not args.excludefiles:
|
|
582
|
+
content=content+GeneralUtilities.get_direct_files_of_folder(folder)
|
|
583
|
+
if not args.excludedirectories:
|
|
584
|
+
content=content+GeneralUtilities.get_direct_folders_of_folder(folder)
|
|
585
|
+
for contentitem in content:
|
|
586
|
+
content_to_print:str=None
|
|
587
|
+
if args.printonlynamewithoutpath:
|
|
588
|
+
content_to_print=os.path.basename(contentitem)
|
|
589
|
+
else:
|
|
590
|
+
content_to_print= contentitem
|
|
591
|
+
GeneralUtilities.write_message_to_stdout(content_to_print)
|
|
592
|
+
return 0
|
|
557
593
|
|
|
558
594
|
|
|
559
595
|
def ForEach() -> int:
|
|
@@ -930,13 +930,14 @@ class GeneralUtilities:
|
|
|
930
930
|
enabled = True
|
|
931
931
|
while enabled:
|
|
932
932
|
try:
|
|
933
|
-
action()
|
|
934
|
-
return
|
|
933
|
+
result=action()
|
|
934
|
+
return result
|
|
935
935
|
except Exception:
|
|
936
936
|
amount_of_fails = amount_of_fails+1
|
|
937
937
|
GeneralUtilities.assert_condition(not (amount_of_attempts < amount_of_fails))
|
|
938
938
|
if amount_of_fails == amount_of_attempts:
|
|
939
939
|
raise
|
|
940
|
+
return None
|
|
940
941
|
|
|
941
942
|
@staticmethod
|
|
942
943
|
@check_arguments
|
|
@@ -16,6 +16,7 @@ from pathlib import Path
|
|
|
16
16
|
from subprocess import Popen
|
|
17
17
|
import re
|
|
18
18
|
import shutil
|
|
19
|
+
from typing import IO
|
|
19
20
|
import uuid
|
|
20
21
|
import tempfile
|
|
21
22
|
import io
|
|
@@ -31,7 +32,7 @@ from .ProgramRunnerBase import ProgramRunnerBase
|
|
|
31
32
|
from .ProgramRunnerPopen import ProgramRunnerPopen
|
|
32
33
|
from .ProgramRunnerEpew import ProgramRunnerEpew, CustomEpewArgument
|
|
33
34
|
|
|
34
|
-
version = "3.5.
|
|
35
|
+
version = "3.5.68"
|
|
35
36
|
__version__ = version
|
|
36
37
|
|
|
37
38
|
|
|
@@ -617,6 +618,31 @@ class ScriptCollectionCore:
|
|
|
617
618
|
for renamed_item, original_name in renamed_items.items():
|
|
618
619
|
os.rename(renamed_item, original_name)
|
|
619
620
|
|
|
621
|
+
@GeneralUtilities.check_arguments
|
|
622
|
+
def list_content(self, path: str,include_files:bool,include_folder:bool) -> list[str]:
|
|
623
|
+
if self.program_runner.will_be_executed_locally():
|
|
624
|
+
result=[]
|
|
625
|
+
if include_files:
|
|
626
|
+
result=result + GeneralUtilities.get_direct_files_of_folder(path)
|
|
627
|
+
if include_folder:
|
|
628
|
+
result=result + GeneralUtilities.get_direct_folders_of_folder(path)
|
|
629
|
+
return result
|
|
630
|
+
else:
|
|
631
|
+
arguments=["--path", path]
|
|
632
|
+
if not include_files:
|
|
633
|
+
arguments=arguments+["--excludefiles"]
|
|
634
|
+
if not include_folder:
|
|
635
|
+
arguments=arguments+["--excludedirectories"]
|
|
636
|
+
exit_code, stdout, stderr, _ = self.run_program_argsasarray("sclistfoldercontent", arguments)
|
|
637
|
+
if exit_code == 0:
|
|
638
|
+
result:list[str]=[]
|
|
639
|
+
for line in stdout.split("\n"):
|
|
640
|
+
normalized_line=line.replace("\r","")
|
|
641
|
+
result.append(normalized_line)
|
|
642
|
+
return result
|
|
643
|
+
else:
|
|
644
|
+
raise ValueError(f"Fatal error occurrs while checking whether file '{path}' exists. StdErr: '{stderr}'")
|
|
645
|
+
|
|
620
646
|
@GeneralUtilities.check_arguments
|
|
621
647
|
def is_file(self, path: str) -> bool:
|
|
622
648
|
if self.program_runner.will_be_executed_locally():
|
|
@@ -1277,7 +1303,7 @@ class ScriptCollectionCore:
|
|
|
1277
1303
|
return popen
|
|
1278
1304
|
|
|
1279
1305
|
@staticmethod
|
|
1280
|
-
def __enqueue_output(file, queue):
|
|
1306
|
+
def __enqueue_output(file:IO, queue:Queue):
|
|
1281
1307
|
for line in iter(file.readline, ''):
|
|
1282
1308
|
queue.put(line)
|
|
1283
1309
|
file.close()
|
|
@@ -1432,6 +1458,11 @@ class ScriptCollectionCore:
|
|
|
1432
1458
|
except Exception as e:
|
|
1433
1459
|
raise e
|
|
1434
1460
|
|
|
1461
|
+
# Return-values program_runner: Exitcode, StdOut, StdErr, Pid
|
|
1462
|
+
@GeneralUtilities.check_arguments
|
|
1463
|
+
def run_program_with_retry(self, program: str, arguments: 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, print_live_output: bool = False,amount_of_attempts:int=5) -> tuple[int, str, str, int]:
|
|
1464
|
+
return GeneralUtilities.retry_action(lambda: self.run_program(program, arguments,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,print_live_output), amount_of_attempts)
|
|
1465
|
+
|
|
1435
1466
|
# Return-values program_runner: Exitcode, StdOut, StdErr, Pid
|
|
1436
1467
|
@GeneralUtilities.check_arguments
|
|
1437
1468
|
def run_program(self, program: str, arguments: 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, print_live_output: bool = False) -> tuple[int, str, str, int]:
|
|
@@ -1730,7 +1761,7 @@ DNS = {domain}
|
|
|
1730
1761
|
folder = os.path.dirname(csproj_file)
|
|
1731
1762
|
csproj_filename = os.path.basename(csproj_file)
|
|
1732
1763
|
GeneralUtilities.write_message_to_stderr(f"Check for updates in {csproj_filename}")
|
|
1733
|
-
result = self.
|
|
1764
|
+
result = self.run_program_with_retry("dotnet", f"list {csproj_filename} package --outdated", folder)
|
|
1734
1765
|
for line in result[1].replace("\r", "").split("\n"):
|
|
1735
1766
|
# Relevant output-lines are something like " > NJsonSchema 10.7.0 10.7.0 10.9.0"
|
|
1736
1767
|
if ">" in line:
|
|
@@ -1015,6 +1015,7 @@ class TasksForCommonProjectStructure:
|
|
|
1015
1015
|
|
|
1016
1016
|
@GeneralUtilities.check_arguments
|
|
1017
1017
|
def __standardized_tasks_release_artifact(self, information: CreateReleaseInformationForProjectInCommonProjectFormat) -> None:
|
|
1018
|
+
GeneralUtilities.write_message_to_stdout("Release artifacts...")
|
|
1018
1019
|
project_version = self.__sc.get_semver_version_from_gitversion(information.repository)
|
|
1019
1020
|
target_folder_base = os.path.join(information.artifacts_folder, information.projectname, project_version)
|
|
1020
1021
|
GeneralUtilities.ensure_directory_exists(target_folder_base)
|
|
@@ -1243,6 +1244,7 @@ class TasksForCommonProjectStructure:
|
|
|
1243
1244
|
def merge_to_main_branch(self, repository_folder: str, source_branch: str = "other/next-release", target_branch: str = "main", verbosity: int = 1, additional_arguments_file: str = None, fast_forward_source_branch: bool = False) -> None:
|
|
1244
1245
|
# This is an automatization for automatic merges. Usual this merge would be done by a pull request in a sourcecode-version-control-platform
|
|
1245
1246
|
# (like GitHub, GitLab or Azure DevOps)
|
|
1247
|
+
GeneralUtilities.write_message_to_stdout(f"Merge to main-branch...")
|
|
1246
1248
|
self.__sc.assert_is_git_repository(repository_folder)
|
|
1247
1249
|
self.assert_no_uncommitted_changes(repository_folder)
|
|
1248
1250
|
|
|
@@ -1262,6 +1264,7 @@ class TasksForCommonProjectStructure:
|
|
|
1262
1264
|
def merge_to_stable_branch(self, create_release_file: str, createRelease_configuration: CreateReleaseConfiguration):
|
|
1263
1265
|
|
|
1264
1266
|
GeneralUtilities.write_message_to_stdout(f"Create release for project {createRelease_configuration.projectname}.")
|
|
1267
|
+
GeneralUtilities.write_message_to_stdout(f"Merge to stable-branch...")
|
|
1265
1268
|
self.__sc.assert_is_git_repository(createRelease_configuration.repository_folder)
|
|
1266
1269
|
folder_of_create_release_file_file = os.path.abspath(os.path.dirname(create_release_file))
|
|
1267
1270
|
|
|
@@ -2439,6 +2442,8 @@ class TasksForCommonProjectStructure:
|
|
|
2439
2442
|
|
|
2440
2443
|
@GeneralUtilities.check_arguments
|
|
2441
2444
|
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) -> None:
|
|
2445
|
+
if verbosity>2:
|
|
2446
|
+
GeneralUtilities.write_message_to_stdout(f"Start building codeunits for repository '{repository_folder}'...")
|
|
2442
2447
|
self.__sc.assert_is_git_repository(repository_folder)
|
|
2443
2448
|
self.__check_target_environmenttype(target_environmenttype)
|
|
2444
2449
|
repository_folder = GeneralUtilities.resolve_relative_path_from_current_working_directory(repository_folder)
|
|
@@ -2520,6 +2525,11 @@ class TasksForCommonProjectStructure:
|
|
|
2520
2525
|
archive_file = os.path.join(os.getcwd(), f"{filename_without_extension}.zip")
|
|
2521
2526
|
shutil.move(archive_file, target_folder)
|
|
2522
2527
|
|
|
2528
|
+
message2 = f"Finished build codeunits in product {repository_name}."
|
|
2529
|
+
if note is not None:
|
|
2530
|
+
message2 = f"{message2} ({note})"
|
|
2531
|
+
GeneralUtilities.write_message_to_stdout(message2)
|
|
2532
|
+
|
|
2523
2533
|
@GeneralUtilities.check_arguments
|
|
2524
2534
|
def __do_repository_checks(self, repository_folder: str, project_version: str) -> None:
|
|
2525
2535
|
self.__sc.assert_is_git_repository(repository_folder)
|
|
@@ -2875,6 +2885,7 @@ class TasksForCommonProjectStructure:
|
|
|
2875
2885
|
@GeneralUtilities.check_arguments
|
|
2876
2886
|
def generic_update_dependencies(self, repository_folder: str, verbosity: int = 1):
|
|
2877
2887
|
# Prepare
|
|
2888
|
+
GeneralUtilities.write_message_to_stdout("Update dependencies...")
|
|
2878
2889
|
self.__sc.assert_is_git_repository(repository_folder)
|
|
2879
2890
|
codeunits = self.get_codeunits(repository_folder)
|
|
2880
2891
|
update_dependencies_script_filename = "UpdateDependencies.py"
|
|
@@ -2949,6 +2960,7 @@ class TasksForCommonProjectStructure:
|
|
|
2949
2960
|
self.generic_update_dependencies(repository_folder)
|
|
2950
2961
|
self.assert_no_uncommitted_changes(repository_folder)
|
|
2951
2962
|
|
|
2963
|
+
GeneralUtilities.write_message_to_stdout(f"Check reference-repository...")
|
|
2952
2964
|
now = datetime.now()
|
|
2953
2965
|
for unsupported_version in self.get_unsupported_versions(repository_folder, now):
|
|
2954
2966
|
reference_folder = f"{reference_folder}/ReferenceContent/v{unsupported_version}"
|
|
@@ -2962,6 +2974,8 @@ class TasksForCommonProjectStructure:
|
|
|
2962
2974
|
else:
|
|
2963
2975
|
self.merge_to_main_branch(repository_folder, merge_source_branch, verbosity=verbosity, fast_forward_source_branch=True)
|
|
2964
2976
|
self.__sc.git_commit(build_repository_folder, "Updated submodule due to merge to main-branch.")
|
|
2977
|
+
GeneralUtilities.write_message_to_stdout(f"Finished prepare release for {generic_prepare_new_release_arguments.product_name}.")
|
|
2978
|
+
|
|
2965
2979
|
|
|
2966
2980
|
class GenericCreateReleaseArguments():
|
|
2967
2981
|
current_file: str
|
|
@@ -3006,6 +3020,7 @@ class TasksForCommonProjectStructure:
|
|
|
3006
3020
|
|
|
3007
3021
|
# create release
|
|
3008
3022
|
new_version = self.merge_to_stable_branch(generic_create_release_arguments.current_file, createReleaseConfiguration)
|
|
3023
|
+
GeneralUtilities.write_message_to_stdout(f"Finished create release for {generic_create_release_arguments.product_name}.")
|
|
3009
3024
|
return True, new_version
|
|
3010
3025
|
|
|
3011
3026
|
class UpdateHTTPDocumentationArguments:
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
ScriptCollection/Executables.py,sha256=dyToDh4vd0k0Ox9TE4E_4-jY46XU6A6rguOL5R6Moj4,29977
|
|
2
|
+
ScriptCollection/GeneralUtilities.py,sha256=WSBawT958x_0H-hnPg3S3DGzP3KOQTADtZtP145I-M4,39473
|
|
3
|
+
ScriptCollection/ProcessesRunner.py,sha256=3mu4ZxzZleQo0Op6o9EYTCFiJfb6kx5ov2YfZfT89mU,1395
|
|
4
|
+
ScriptCollection/ProgramRunnerBase.py,sha256=2kMIAqdc65UjBAddOZkzy_aFx9h5roZ5a4bQNM6RV6Y,2480
|
|
5
|
+
ScriptCollection/ProgramRunnerEpew.py,sha256=4pjEd0r9Fcz3TTDv0MdTSd5KkigYXcWUVI1X43regfU,6477
|
|
6
|
+
ScriptCollection/ProgramRunnerPopen.py,sha256=BPY7-ZMIlqT7JOKz8qlB5c0laF2Js-ijzqk09GxZC48,3821
|
|
7
|
+
ScriptCollection/RPStream.py,sha256=NRRHL3YSP3D9MuAV2jB_--0KUKCsvJGxeKnxgrRZ9kY,1545
|
|
8
|
+
ScriptCollection/ScriptCollectionCore.py,sha256=Zbc-oWrgLEqz6dB2M0EJORG_9eU1byGaziHI2iFZUSo,114066
|
|
9
|
+
ScriptCollection/TasksForCommonProjectStructure.py,sha256=F6e045gUvSxpOcHk61OVnlod_Zn9JSNXrv6I2SzWoVc,214997
|
|
10
|
+
ScriptCollection/UpdateCertificates.py,sha256=Eynbgu7k9jLxApP2D_8Il77B6BFjJap6K7oTeEAZYbk,7790
|
|
11
|
+
ScriptCollection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
+
ScriptCollection-3.5.68.dist-info/METADATA,sha256=z55DUNqZEXZqXwh3pBsCcb5Ha8fy_XXkZa9SwB2tsh0,7664
|
|
13
|
+
ScriptCollection-3.5.68.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
14
|
+
ScriptCollection-3.5.68.dist-info/entry_points.txt,sha256=psYFu5te0W8zF5k444Qi21IZN4UwwGbw-XR22nvKTYE,3545
|
|
15
|
+
ScriptCollection-3.5.68.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
|
|
16
|
+
ScriptCollection-3.5.68.dist-info/RECORD,,
|
|
@@ -6,6 +6,7 @@ scbuildcodeunitsc = ScriptCollection.Executables:BuildCodeUnitsC
|
|
|
6
6
|
sccalculatebitcoinblockhash = ScriptCollection.Executables:CalculateBitcoinBlockHash
|
|
7
7
|
scchangefileextension = ScriptCollection.Executables:ChangeFileExtensions
|
|
8
8
|
scchangehashofprogram = ScriptCollection.Executables:ChangeHashOfProgram
|
|
9
|
+
sccopy = ScriptCollection.Executables:Copy
|
|
9
10
|
sccreatechangelogentry = ScriptCollection.Executables:CreateChangelogEntry
|
|
10
11
|
sccreateemptyfilewithspecificsize = ScriptCollection.Executables:CreateEmptyFileWithSpecificSize
|
|
11
12
|
sccreatefile = ScriptCollection.Executables:CreateFile
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
ScriptCollection/Executables.py,sha256=kON_jatJe84iCJj60uUjA-Aj0ytERRe0FUDWbOWUe6s,28089
|
|
2
|
-
ScriptCollection/GeneralUtilities.py,sha256=Ah-quoBRLNO3iTCfZaAlN0fhOC42b-UEGYRMW_XxgO0,39438
|
|
3
|
-
ScriptCollection/ProcessesRunner.py,sha256=3mu4ZxzZleQo0Op6o9EYTCFiJfb6kx5ov2YfZfT89mU,1395
|
|
4
|
-
ScriptCollection/ProgramRunnerBase.py,sha256=2kMIAqdc65UjBAddOZkzy_aFx9h5roZ5a4bQNM6RV6Y,2480
|
|
5
|
-
ScriptCollection/ProgramRunnerEpew.py,sha256=4pjEd0r9Fcz3TTDv0MdTSd5KkigYXcWUVI1X43regfU,6477
|
|
6
|
-
ScriptCollection/ProgramRunnerPopen.py,sha256=BPY7-ZMIlqT7JOKz8qlB5c0laF2Js-ijzqk09GxZC48,3821
|
|
7
|
-
ScriptCollection/RPStream.py,sha256=NRRHL3YSP3D9MuAV2jB_--0KUKCsvJGxeKnxgrRZ9kY,1545
|
|
8
|
-
ScriptCollection/ScriptCollectionCore.py,sha256=1mOEvi_s9UGBfwWaaBZpbCxj-MaNefvHqrGpNvoX3JA,111855
|
|
9
|
-
ScriptCollection/TasksForCommonProjectStructure.py,sha256=A5L4MujKd7RRHZGdnQtPBYvy7KqjS30wmhPHYU9g2iw,213981
|
|
10
|
-
ScriptCollection/UpdateCertificates.py,sha256=Eynbgu7k9jLxApP2D_8Il77B6BFjJap6K7oTeEAZYbk,7790
|
|
11
|
-
ScriptCollection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
-
ScriptCollection-3.5.66.dist-info/METADATA,sha256=XdmGidFR142BYPXQR4Che0TJchPlG9tct8Vs9iSyJtU,7664
|
|
13
|
-
ScriptCollection-3.5.66.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
14
|
-
ScriptCollection-3.5.66.dist-info/entry_points.txt,sha256=wspYVXWH8kon-wRQTAFEO11JoLJ0fEnOIG7tE7R-xtQ,3502
|
|
15
|
-
ScriptCollection-3.5.66.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
|
|
16
|
-
ScriptCollection-3.5.66.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|