ScriptCollection 3.5.103__py3-none-any.whl → 3.5.105__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/GeneralUtilities.py +36 -0
- ScriptCollection/SCLog.py +67 -1
- ScriptCollection/ScriptCollectionCore.py +8 -3
- ScriptCollection/TasksForCommonProjectStructure.py +32 -4
- ScriptCollection/UpdateCertificates.py +1 -1
- {scriptcollection-3.5.103.dist-info → scriptcollection-3.5.105.dist-info}/METADATA +4 -4
- scriptcollection-3.5.105.dist-info/RECORD +16 -0
- ScriptCollection/RPStream.py +0 -42
- scriptcollection-3.5.103.dist-info/RECORD +0 -17
- {scriptcollection-3.5.103.dist-info → scriptcollection-3.5.105.dist-info}/WHEEL +0 -0
- {scriptcollection-3.5.103.dist-info → scriptcollection-3.5.105.dist-info}/entry_points.txt +0 -0
- {scriptcollection-3.5.103.dist-info → scriptcollection-3.5.105.dist-info}/top_level.txt +0 -0
@@ -21,6 +21,7 @@ from os.path import isfile, join, isdir
|
|
21
21
|
from pathlib import Path
|
22
22
|
from shutil import copyfile
|
23
23
|
import typing
|
24
|
+
import psutil
|
24
25
|
from defusedxml.minidom import parse
|
25
26
|
from OpenSSL import crypto
|
26
27
|
|
@@ -1027,3 +1028,38 @@ class GeneralUtilities:
|
|
1027
1028
|
GeneralUtilities.assert_condition("." in plain_str)
|
1028
1029
|
splitted: list[str] = plain_str.split(".")
|
1029
1030
|
return splitted[0].zfill(leading_zeroplaces)+"."+splitted[1].ljust(trailing_zeroplaces, '0')
|
1031
|
+
|
1032
|
+
@staticmethod
|
1033
|
+
@check_arguments
|
1034
|
+
def process_is_running_by_name(process_name: str) -> bool:
|
1035
|
+
processes: list[psutil.Process] = list(psutil.process_iter())
|
1036
|
+
for p in processes:
|
1037
|
+
if p.name() == process_name:
|
1038
|
+
return True
|
1039
|
+
return False
|
1040
|
+
|
1041
|
+
|
1042
|
+
@staticmethod
|
1043
|
+
@check_arguments
|
1044
|
+
def process_is_running_by_id(process_id: int) -> bool:
|
1045
|
+
processes: list[psutil.Process] = list(psutil.process_iter())
|
1046
|
+
for p in processes:
|
1047
|
+
if p.pid == process_id:
|
1048
|
+
return True
|
1049
|
+
return False
|
1050
|
+
|
1051
|
+
|
1052
|
+
@staticmethod
|
1053
|
+
@check_arguments
|
1054
|
+
def kill_process(process_id:int,include_child_processes:bool) -> bool:
|
1055
|
+
if GeneralUtilities. process_is_running_by_id(process_id):
|
1056
|
+
GeneralUtilities.write_message_to_stdout(f"Process with id {process_id} is running. Terminating it...")
|
1057
|
+
process = psutil.Process(process_id)
|
1058
|
+
if include_child_processes:
|
1059
|
+
for child in process.children(recursive=True):
|
1060
|
+
if GeneralUtilities.process_is_running_by_id(child.pid):
|
1061
|
+
child.kill()
|
1062
|
+
if GeneralUtilities.process_is_running_by_id(process_id):
|
1063
|
+
process.kill()
|
1064
|
+
else:
|
1065
|
+
GeneralUtilities.write_message_to_stdout(f"Process with id {process_id} is not running anymore.")
|
ScriptCollection/SCLog.py
CHANGED
@@ -1,2 +1,68 @@
|
|
1
|
+
|
2
|
+
from enum import Enum
|
3
|
+
from datetime import datetime
|
4
|
+
from .GeneralUtilities import GeneralUtilities
|
5
|
+
|
6
|
+
|
7
|
+
class LogLevel(Enum):
|
8
|
+
Error = 1
|
9
|
+
Warning = 2
|
10
|
+
Information = 3
|
11
|
+
Debug = 4
|
12
|
+
|
13
|
+
def __int__(self):
|
14
|
+
return self.value
|
15
|
+
|
16
|
+
|
1
17
|
class SCLog:
|
2
|
-
|
18
|
+
loglevel: LogLevel
|
19
|
+
log_file: str
|
20
|
+
add_overhead: bool
|
21
|
+
|
22
|
+
def __init__(self, log_file: str = None):
|
23
|
+
self.add_overhead = False
|
24
|
+
self.loglevel = LogLevel.Information
|
25
|
+
self.log_file = log_file
|
26
|
+
|
27
|
+
@GeneralUtilities.check_arguments
|
28
|
+
def log_exception(self, message: str, ex: Exception, current_traceback):
|
29
|
+
self.log(f"Exception: {message}; Exception-details: {str(ex)}; Traceback: {current_traceback.format_exc()}", LogLevel.Error)
|
30
|
+
|
31
|
+
@GeneralUtilities.check_arguments
|
32
|
+
def log(self, message: str, loglevel: LogLevel):
|
33
|
+
if loglevel is None:
|
34
|
+
loglevel = LogLevel.Information
|
35
|
+
|
36
|
+
if int(loglevel) > int(self.loglevel):
|
37
|
+
return
|
38
|
+
|
39
|
+
if loglevel == LogLevel.Warning:
|
40
|
+
message = f"Warning: {message}"
|
41
|
+
if self.add_overhead:
|
42
|
+
if loglevel == LogLevel.Error:
|
43
|
+
message = f"[Error] {message}"
|
44
|
+
elif loglevel == LogLevel.Warning:
|
45
|
+
message = f"[Warning] {message}"
|
46
|
+
elif loglevel == LogLevel.Debug:
|
47
|
+
message = f"[Debug] {message}"
|
48
|
+
elif loglevel == LogLevel.Information:
|
49
|
+
message = f"[Information] {message}"
|
50
|
+
else:
|
51
|
+
raise ValueError("Unknown loglevel.")
|
52
|
+
|
53
|
+
message = f"[{GeneralUtilities.datetime_to_string_for_logfile_entry(datetime.now())}] {message}"
|
54
|
+
|
55
|
+
if loglevel == LogLevel.Error:
|
56
|
+
GeneralUtilities.write_message_to_stderr(message)
|
57
|
+
elif loglevel == LogLevel.Warning:
|
58
|
+
GeneralUtilities.write_message_to_stderr(message)
|
59
|
+
elif loglevel == LogLevel.Debug:
|
60
|
+
GeneralUtilities.write_message_to_stdout(message)
|
61
|
+
elif loglevel == LogLevel.Information:
|
62
|
+
GeneralUtilities.write_message_to_stdout(message)
|
63
|
+
else:
|
64
|
+
raise ValueError("Unknown loglevel.")
|
65
|
+
|
66
|
+
if self.log_file is not None:
|
67
|
+
GeneralUtilities.ensure_file_exists(self.log_file)
|
68
|
+
GeneralUtilities.append_line_to_file(self.log_file, message)
|
@@ -33,7 +33,7 @@ from .ProgramRunnerBase import ProgramRunnerBase
|
|
33
33
|
from .ProgramRunnerPopen import ProgramRunnerPopen
|
34
34
|
from .ProgramRunnerEpew import ProgramRunnerEpew, CustomEpewArgument
|
35
35
|
|
36
|
-
version = "3.5.
|
36
|
+
version = "3.5.105"
|
37
37
|
__version__ = version
|
38
38
|
|
39
39
|
|
@@ -1868,7 +1868,8 @@ DNS = {domain}
|
|
1868
1868
|
self.run_program_argsasarray("openssl", ['pkcs12', '-export', '-out', f'{filename}.pfx', f'-inkey', f'{filename}.key', '-in', f'{filename}.crt', '-password', f'pass:{password}'], folder)
|
1869
1869
|
|
1870
1870
|
@GeneralUtilities.check_arguments
|
1871
|
-
def update_dependencies_of_python_in_requirementstxt_file(self, file: str, verbosity: int):
|
1871
|
+
def update_dependencies_of_python_in_requirementstxt_file(self, file: str,ignored_dependencies:list[str], verbosity: int):
|
1872
|
+
#TODO consider ignored_dependencies
|
1872
1873
|
lines = GeneralUtilities.read_lines_from_file(file)
|
1873
1874
|
new_lines = []
|
1874
1875
|
for line in lines:
|
@@ -1898,7 +1899,8 @@ DNS = {domain}
|
|
1898
1899
|
raise ValueError(f'Unexpected line in requirements-file: "{line}"')
|
1899
1900
|
|
1900
1901
|
@GeneralUtilities.check_arguments
|
1901
|
-
def update_dependencies_of_python_in_setupcfg_file(self, setup_cfg_file: str, verbosity: int):
|
1902
|
+
def update_dependencies_of_python_in_setupcfg_file(self, setup_cfg_file: str,ignored_dependencies:list[str], verbosity: int):
|
1903
|
+
#TODO consider ignored_dependencies
|
1902
1904
|
lines = GeneralUtilities.read_lines_from_file(setup_cfg_file)
|
1903
1905
|
new_lines = []
|
1904
1906
|
requirement_parsing_mode = False
|
@@ -2277,3 +2279,6 @@ TXDX
|
|
2277
2279
|
element = ET.XML(GeneralUtilities.read_text_from_file(file, encoding))
|
2278
2280
|
ET.indent(element)
|
2279
2281
|
GeneralUtilities.write_text_to_file(file, ET.tostring(element, encoding="unicode"), encoding)
|
2282
|
+
|
2283
|
+
def install_requirementstxt_file(self,requirements_txt_file: str, folder: str, verbosity: int):
|
2284
|
+
self.run_program_argsasarray("pip", ["install", "-r", requirements_txt_file], folder, verbosity=verbosity)
|
@@ -1560,6 +1560,9 @@ class TasksForCommonProjectStructure:
|
|
1560
1560
|
combined_file = os.path.join(codeunit_folder, file)
|
1561
1561
|
if not os.path.isfile(combined_file):
|
1562
1562
|
raise ValueError(f'The mandatory file "{file}" does not exist in the codeunit-folder.')
|
1563
|
+
|
1564
|
+
if os.path.isfile(os.path.join(codeunit_folder,"Other","requirements.txt")):
|
1565
|
+
self.install_requirementstxt_for_codeunit(codeunit_folder,verbosity)
|
1563
1566
|
|
1564
1567
|
# Check developer
|
1565
1568
|
if self.validate_developers_of_repository:
|
@@ -2264,16 +2267,32 @@ class TasksForCommonProjectStructure:
|
|
2264
2267
|
ignored_dependencies = self.get_dependencies_which_are_ignored_from_updates(codeunit_folder, True)
|
2265
2268
|
# TODO implement
|
2266
2269
|
|
2270
|
+
@GeneralUtilities.check_arguments
|
2271
|
+
def update_dependencies_of_typical_python_repository_requirements(self, repository_folder: str, verbosity: int, cmd_args: list[str]) -> None:
|
2272
|
+
verbosity = self.get_verbosity_from_commandline_arguments(cmd_args, verbosity)
|
2273
|
+
|
2274
|
+
development_requirements_file = os.path.join(repository_folder, "Other","requirements.txt")
|
2275
|
+
if (os.path.isfile(development_requirements_file)):
|
2276
|
+
self.__sc.update_dependencies_of_python_in_requirementstxt_file(development_requirements_file,[], verbosity)
|
2277
|
+
|
2267
2278
|
@GeneralUtilities.check_arguments
|
2268
2279
|
def update_dependencies_of_typical_python_codeunit(self, update_script_file: str, verbosity: int, cmd_args: list[str]) -> None:
|
2269
2280
|
codeunit_folder = GeneralUtilities.resolve_relative_path("..", os.path.dirname(update_script_file))
|
2270
2281
|
ignored_dependencies = self.get_dependencies_which_are_ignored_from_updates(codeunit_folder, True)
|
2271
2282
|
# TODO consider ignored_dependencies
|
2272
2283
|
verbosity = self.get_verbosity_from_commandline_arguments(cmd_args, verbosity)
|
2273
|
-
|
2274
|
-
|
2284
|
+
|
2285
|
+
setup_cfg=os.path.join(codeunit_folder, "setup.cfg")
|
2286
|
+
if (os.path.isfile(setup_cfg)):
|
2287
|
+
self.__sc.update_dependencies_of_python_in_setupcfg_file(setup_cfg,ignored_dependencies, verbosity)
|
2288
|
+
|
2289
|
+
development_requirements_file = os.path.join(codeunit_folder, "requirements.txt")#required for codeunits which contain python-code which need third-party dependencies
|
2275
2290
|
if (os.path.isfile(development_requirements_file)):
|
2276
|
-
self.__sc.update_dependencies_of_python_in_requirementstxt_file(development_requirements_file, verbosity)
|
2291
|
+
self.__sc.update_dependencies_of_python_in_requirementstxt_file(development_requirements_file,ignored_dependencies, verbosity)
|
2292
|
+
|
2293
|
+
development_requirements_file2 = os.path.join(codeunit_folder, "Other","requirements.txt")#required for codeunits which contain python-scripts which needs third-party dependencies
|
2294
|
+
if (os.path.isfile(development_requirements_file2)):
|
2295
|
+
self.__sc.update_dependencies_of_python_in_requirementstxt_file(development_requirements_file2, ignored_dependencies,verbosity)
|
2277
2296
|
|
2278
2297
|
@GeneralUtilities.check_arguments
|
2279
2298
|
def update_dependencies_of_typical_dotnet_codeunit(self, update_script_file: str, verbosity: int, cmd_args: list[str]) -> None:
|
@@ -2354,10 +2373,11 @@ class TasksForCommonProjectStructure:
|
|
2354
2373
|
|
2355
2374
|
if append_cli_args_at_end:
|
2356
2375
|
command_with_args = f"{command_with_args} {{{{.CLI_ARGS}}}}"
|
2376
|
+
cwd_literal = cwd.replace("\\", "\\\\")
|
2357
2377
|
lines.append(f" {name}:")
|
2358
2378
|
lines.append(f' desc: "{description}"')
|
2359
2379
|
lines.append(' silent: true')
|
2360
|
-
lines.append(f' dir: "{
|
2380
|
+
lines.append(f' dir: "{cwd_literal}"')
|
2361
2381
|
lines.append(" cmds:")
|
2362
2382
|
lines.append(f" - {command_with_args}")
|
2363
2383
|
lines.append(' aliases:')
|
@@ -3270,3 +3290,11 @@ class TasksForCommonProjectStructure:
|
|
3270
3290
|
self.__sc.git_checkout(ref_repo, update_http_documentation_arguments.main_branch_name)
|
3271
3291
|
self.__sc.git_push_with_retry(ref_repo, update_http_documentation_arguments.common_remote_name, update_http_documentation_arguments.main_branch_name, update_http_documentation_arguments.main_branch_name)
|
3272
3292
|
self.__sc.git_commit(GeneralUtilities.resolve_relative_path("../..", folder_of_this_file), f"Updated content of {update_http_documentation_arguments.product_name} v{update_http_documentation_arguments.new_project_version} in {update_http_documentation_arguments.reference_repository_name}-submodule")
|
3293
|
+
|
3294
|
+
@GeneralUtilities.check_arguments
|
3295
|
+
def install_requirementstxt_for_codeunit(self,codeunit_folder:str,verbosity:int):
|
3296
|
+
self.__sc.install_requirementstxt_file(codeunit_folder+"/Other/requirements.txt", verbosity)
|
3297
|
+
|
3298
|
+
@GeneralUtilities.check_arguments
|
3299
|
+
def install_requirementstxt_for_repository(self, repository_folde: str,verbosity:int):
|
3300
|
+
self.__sc.install_requirementstxt_file(repository_folde+"/Other/requirements.txt", verbosity)
|
@@ -27,7 +27,7 @@ class CertificateUpdater:
|
|
27
27
|
@GeneralUtilities.check_arguments
|
28
28
|
def __get_latest_index_by_domain(self, domain: str) -> int:
|
29
29
|
result = self.__get_latest_index_by_filelist(GeneralUtilities.get_all_files_of_folder(os.path.join(self.__letsencrypt_archive_folder, domain)))
|
30
|
-
GeneralUtilities.write_message_to_stdout(f"Debug: Latest found existing number for domain {domain}: {result}")
|
30
|
+
#GeneralUtilities.write_message_to_stdout(f"Debug: Latest found existing number for domain {domain}: {result}")
|
31
31
|
return result
|
32
32
|
|
33
33
|
@GeneralUtilities.check_arguments
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ScriptCollection
|
3
|
-
Version: 3.5.
|
3
|
+
Version: 3.5.105
|
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
|
@@ -23,12 +23,12 @@ Classifier: Topic :: Utilities
|
|
23
23
|
Requires-Python: >=3.10
|
24
24
|
Description-Content-Type: text/markdown
|
25
25
|
Requires-Dist: build>=1.2.2.post1
|
26
|
-
Requires-Dist: coverage>=7.
|
26
|
+
Requires-Dist: coverage>=7.8.0
|
27
27
|
Requires-Dist: cyclonedx-bom>=5.3.0
|
28
28
|
Requires-Dist: defusedxml>=0.7.1
|
29
29
|
Requires-Dist: keyboard>=0.13.5
|
30
30
|
Requires-Dist: lcov-cobertura>=2.1.1
|
31
|
-
Requires-Dist: lxml>=5.3.
|
31
|
+
Requires-Dist: lxml>=5.3.2
|
32
32
|
Requires-Dist: ntplib>=0.4.0
|
33
33
|
Requires-Dist: Pillow>=11.1.0
|
34
34
|
Requires-Dist: pycdlib>=1.14.0
|
@@ -38,7 +38,7 @@ Requires-Dist: pyOpenSSL>=25.0.0
|
|
38
38
|
Requires-Dist: PyPDF>=5.4.0
|
39
39
|
Requires-Dist: pytest>=8.3.5
|
40
40
|
Requires-Dist: PyYAML>=6.0.2
|
41
|
-
Requires-Dist: qrcode>=8.
|
41
|
+
Requires-Dist: qrcode>=8.1
|
42
42
|
Requires-Dist: send2trash>=1.8.3
|
43
43
|
Requires-Dist: twine>=6.1.0
|
44
44
|
Requires-Dist: xmlschema>=3.4.5
|
@@ -0,0 +1,16 @@
|
|
1
|
+
ScriptCollection/Executables.py,sha256=HI9Pxs5Z9QxPGyqeJU2lWslEggFyGYANCqYVQZp6eJ0,30490
|
2
|
+
ScriptCollection/GeneralUtilities.py,sha256=jkJu6y8Wv-j_braS_0zsjF6JzDo46NshMeeAphsXGX4,43848
|
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/SCLog.py,sha256=Gw27Oclcb0ten7_89PD5CdNMoO-at2hGUOYbF-x1HPQ,2296
|
8
|
+
ScriptCollection/ScriptCollectionCore.py,sha256=U4kI7ztIm6_KL4FFRmway_y8QRrQiJgFEZTBzZ618Ys,126071
|
9
|
+
ScriptCollection/TasksForCommonProjectStructure.py,sha256=iemQ1J0UAengGAvCTJdc8-ipjhfLqf0Su8evQTDdLGU,231626
|
10
|
+
ScriptCollection/UpdateCertificates.py,sha256=xRebqD2etBD7ILHL-7fg-Y-kPF0Tbmnwexv4FhwDntQ,7791
|
11
|
+
ScriptCollection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
12
|
+
scriptcollection-3.5.105.dist-info/METADATA,sha256=BK_ZzXAIr0w33y_eYM1aDhSh24Po6Mb26eXLacXe1ns,7664
|
13
|
+
scriptcollection-3.5.105.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
14
|
+
scriptcollection-3.5.105.dist-info/entry_points.txt,sha256=fYCGWGNGijBQHhFe6UAO-BEpfEOxLyNJemukt5ElSzs,3644
|
15
|
+
scriptcollection-3.5.105.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
|
16
|
+
scriptcollection-3.5.105.dist-info/RECORD,,
|
ScriptCollection/RPStream.py
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
import os
|
2
|
-
import psutil
|
3
|
-
from .GeneralUtilities import GeneralUtilities
|
4
|
-
from .ProcessesRunner import ProcessStartInformation, ProcessesRunner
|
5
|
-
# streams the local libcam-vid-stream to a rtsp-server
|
6
|
-
|
7
|
-
|
8
|
-
class RPStream:
|
9
|
-
|
10
|
-
__working_directory: str = None
|
11
|
-
__pid_file: str = None
|
12
|
-
|
13
|
-
def __init__(self, working_directory: str):
|
14
|
-
self.__working_directory = working_directory
|
15
|
-
self.__pid_file = os.path.join(self.__working_directory, "pid.txt")
|
16
|
-
|
17
|
-
def __get_pid(self) -> str:
|
18
|
-
GeneralUtilities.ensure_file_exists(self.__pid_file)
|
19
|
-
return GeneralUtilities.read_text_from_file(self.__pid_file)
|
20
|
-
|
21
|
-
def __set_pid(self, pid: str):
|
22
|
-
GeneralUtilities.ensure_file_exists(self.__pid_file)
|
23
|
-
GeneralUtilities.write_text_to_file(self.__pid_file, pid)
|
24
|
-
|
25
|
-
def __ensure_previous_process_is_not_running(self):
|
26
|
-
pid = self.__get_pid()
|
27
|
-
if GeneralUtilities.string_has_content(pid):
|
28
|
-
for proc in psutil.process_iter():
|
29
|
-
if proc.pid == pid and proc.name() == "python":
|
30
|
-
proc.kill()
|
31
|
-
|
32
|
-
def __start_stream(self):
|
33
|
-
prinfo: list[ProcessStartInformation] = list[ProcessStartInformation]()
|
34
|
-
prinfo.append(ProcessStartInformation(None, "", ""))
|
35
|
-
prinfo.append(ProcessStartInformation(None, "", ""))
|
36
|
-
processesRunner: ProcessesRunner = ProcessesRunner(prinfo)
|
37
|
-
self.__set_pid(str(os.getpid()))
|
38
|
-
processesRunner.run()
|
39
|
-
|
40
|
-
def start(self):
|
41
|
-
self.__ensure_previous_process_is_not_running()
|
42
|
-
self.__start_stream()
|
@@ -1,17 +0,0 @@
|
|
1
|
-
ScriptCollection/Executables.py,sha256=HI9Pxs5Z9QxPGyqeJU2lWslEggFyGYANCqYVQZp6eJ0,30490
|
2
|
-
ScriptCollection/GeneralUtilities.py,sha256=unOZbHDqlxwPHXY1epy4gdGYwDbHEETF1XKZYPGX2hw,42429
|
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/SCLog.py,sha256=l4aekBiGoNkKGtvO_Er3NY_K7ts4ZWtIGlhq07I-4LY,30
|
9
|
-
ScriptCollection/ScriptCollectionCore.py,sha256=p9ofnNkzI-3_QsJwbh4auBAGSh-IkWKGlrLSh0eZyBE,125705
|
10
|
-
ScriptCollection/TasksForCommonProjectStructure.py,sha256=MpyvFNyJG7njRYvV9KULJmbn7WonR18YDeS7oI_O3UU,229780
|
11
|
-
ScriptCollection/UpdateCertificates.py,sha256=Eynbgu7k9jLxApP2D_8Il77B6BFjJap6K7oTeEAZYbk,7790
|
12
|
-
ScriptCollection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
|
-
scriptcollection-3.5.103.dist-info/METADATA,sha256=q07vsHzykcNIo0Vixjx1YEAUj21qm1UVbgW70afB0O8,7664
|
14
|
-
scriptcollection-3.5.103.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
15
|
-
scriptcollection-3.5.103.dist-info/entry_points.txt,sha256=fYCGWGNGijBQHhFe6UAO-BEpfEOxLyNJemukt5ElSzs,3644
|
16
|
-
scriptcollection-3.5.103.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
|
17
|
-
scriptcollection-3.5.103.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|