ScriptCollection 3.5.150__py3-none-any.whl → 3.5.152__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.
@@ -34,7 +34,7 @@ from .ProgramRunnerPopen import ProgramRunnerPopen
34
34
  from .ProgramRunnerEpew import ProgramRunnerEpew, CustomEpewArgument
35
35
  from .SCLog import SCLog, LogLevel
36
36
 
37
- version = "3.5.150"
37
+ version = "3.5.152"
38
38
  __version__ = version
39
39
 
40
40
 
@@ -240,10 +240,9 @@ class TasksForCommonProjectStructure:
240
240
  @GeneralUtilities.check_arguments
241
241
  def copy_source_files_to_output_directory(self, buildscript_file: str) -> None:
242
242
  GeneralUtilities.write_message_to_stdout("Copy sourcecode...")
243
- sc = ScriptCollectionCore()
244
243
  folder = os.path.dirname(os.path.realpath(buildscript_file))
245
244
  codeunit_folder = GeneralUtilities.resolve_relative_path("../..", folder)
246
- result = sc.run_program_argsasarray("git", ["ls-tree", "-r", "HEAD", "--name-only"], codeunit_folder)
245
+ result = self.__sc.run_program_argsasarray("git", ["ls-tree", "-r", "HEAD", "--name-only"], codeunit_folder)
247
246
  files = [f for f in result[1].split('\n') if len(f) > 0]
248
247
  for file in files:
249
248
  full_source_file = os.path.join(codeunit_folder, file)
@@ -271,7 +270,6 @@ class TasksForCommonProjectStructure:
271
270
  }
272
271
  for target in targets:
273
272
  GeneralUtilities.write_message_to_stdout(f"Build package {package_name} for target {target_names[target]}...")
274
- sc = ScriptCollectionCore()
275
273
  self.run_with_epew("flutter", f"build {target}", src_folder, verbosity)
276
274
  if target == "web":
277
275
  web_relase_folder = os.path.join(src_folder, "build/web")
@@ -300,7 +298,7 @@ class TasksForCommonProjectStructure:
300
298
  GeneralUtilities.ensure_directory_does_not_exist(apk_folder)
301
299
  GeneralUtilities.ensure_directory_exists(apk_folder)
302
300
  apks_file = f"{apk_folder}/{codeunit_name}.apks"
303
- sc.run_program("java", f"-jar {bundletool} build-apks --bundle={aab_file} --output={apks_file} --mode=universal", aab_relase_folder, verbosity)
301
+ self.__sc.run_program("java", f"-jar {bundletool} build-apks --bundle={aab_file} --output={apks_file} --mode=universal", aab_relase_folder, verbosity)
304
302
  with zipfile.ZipFile(apks_file, "r") as zip_ref:
305
303
  zip_ref.extract("universal.apk", apk_folder)
306
304
  GeneralUtilities.ensure_file_does_not_exist(apks_file)
@@ -485,8 +483,7 @@ class TasksForCommonProjectStructure:
485
483
  self.write_version_to_codeunit_file(codeunit_file, current_version)
486
484
 
487
485
  @GeneralUtilities.check_arguments
488
- def t4_transform(self, commontasks_script_file_of_current_file: str, verbosity: int):
489
- sc = ScriptCollectionCore()
486
+ def t4_transform(self, commontasks_script_file_of_current_file: str, verbosity: int, ignore_git_ignored_files: bool = True):
490
487
  codeunit_folder = GeneralUtilities.resolve_relative_path("../..", commontasks_script_file_of_current_file)
491
488
  self.__ensure_grylibrary_is_available(codeunit_folder)
492
489
  repository_folder: str = os.path.dirname(codeunit_folder)
@@ -494,9 +491,19 @@ class TasksForCommonProjectStructure:
494
491
  codeunit_folder = os.path.join(repository_folder, codeunitname)
495
492
  for search_result in Path(codeunit_folder).glob('**/*.tt'):
496
493
  tt_file = str(search_result)
497
- relative_path_to_tt_file = str(Path(tt_file).relative_to(codeunit_folder))
498
- argument = [f"--parameter=repositoryFolder={repository_folder}", f"--parameter=codeUnitName={codeunitname}", relative_path_to_tt_file]
499
- sc.run_program_argsasarray("t4", argument, codeunit_folder, verbosity=verbosity)
494
+ relative_path_to_tt_file_from_repository = str(Path(tt_file).relative_to(repository_folder))
495
+ if (not ignore_git_ignored_files) or (ignore_git_ignored_files and not self.__sc.file_is_git_ignored(relative_path_to_tt_file_from_repository, repository_folder)):
496
+ relative_path_to_tt_file_from_codeunit_file = str(Path(tt_file).relative_to(codeunit_folder))
497
+ argument = [f"--parameter=repositoryFolder={repository_folder}", f"--parameter=codeUnitName={codeunitname}", relative_path_to_tt_file_from_codeunit_file]
498
+ self.__sc.run_program_argsasarray("t4", argument, codeunit_folder, verbosity=verbosity)
499
+
500
+ @GeneralUtilities.check_arguments
501
+ def get_resource_from_global_resource(self, codeunit_folder: str, resource_name: str):
502
+ repository_folder: str = GeneralUtilities.resolve_relative_path("..", codeunit_folder)
503
+ source_folder: str = os.path.join(repository_folder, "Other", "Resources", resource_name)
504
+ target_folder: str = os.path.join(codeunit_folder, "Other", "Resources", resource_name)
505
+ GeneralUtilities.ensure_folder_exists_and_is_empty(target_folder)
506
+ GeneralUtilities.copy_content_of_folder(source_folder, target_folder)
500
507
 
501
508
  @GeneralUtilities.check_arguments
502
509
  def standardized_tasks_generate_reference_by_docfx(self, generate_reference_script_file: str, verbosity: int, targetenvironmenttype: str, commandline_arguments: list[str]) -> None:
@@ -780,10 +787,9 @@ class TasksForCommonProjectStructure:
780
787
  GeneralUtilities.write_message_to_stdout("Generate SBOM...")
781
788
  self.assert_is_codeunit_folder(codeunit_folder)
782
789
  codeunit_name = os.path.basename(codeunit_folder)
783
- sc = ScriptCollectionCore()
784
790
  bomfile_folder = "Other\\Artifacts\\BOM"
785
791
  verbosity = TasksForCommonProjectStructure.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
786
- sc.run_program_argsasarray("dotnet", ["CycloneDX", f"{codeunit_name}\\{codeunit_name}.csproj", "-o", bomfile_folder, "--disable-github-licenses"], codeunit_folder, verbosity=verbosity)
792
+ self.__sc.run_program_argsasarray("dotnet", ["CycloneDX", f"{codeunit_name}\\{codeunit_name}.csproj", "-o", bomfile_folder, "--disable-github-licenses"], codeunit_folder, verbosity=verbosity)
787
793
  codeunitversion = self.get_version_of_codeunit(os.path.join(codeunit_folder, f"{codeunit_name}.codeunit.xml"))
788
794
  target = f"{codeunit_folder}\\{bomfile_folder}\\{codeunit_name}.{codeunitversion}.sbom.xml"
789
795
  GeneralUtilities.ensure_file_does_not_exist(target)
@@ -1454,8 +1460,7 @@ class TasksForCommonProjectStructure:
1454
1460
  codeunit_folder = os.path.join(repository_folder, codeunitname)
1455
1461
  artifacts_folder = self.get_artifacts_folder(repository_folder, codeunitname)
1456
1462
  applicationimage_folder = os.path.join(artifacts_folder, "BuildResult_OCIImage")
1457
- sc = ScriptCollectionCore()
1458
- image_file = sc.find_file_by_extension(applicationimage_folder, "tar")
1463
+ image_file = self.__sc.find_file_by_extension(applicationimage_folder, "tar")
1459
1464
  image_filename = os.path.basename(image_file)
1460
1465
  codeunit_version = self.get_version_of_codeunit(os.path.join(codeunit_folder, f"{codeunitname}.codeunit.xml"))
1461
1466
  if remote_image_name is None:
@@ -1466,15 +1471,15 @@ class TasksForCommonProjectStructure:
1466
1471
  remote_image_latest = f"{remote_repo}:latest"
1467
1472
  remote_image_version = f"{remote_repo}:{codeunit_version}"
1468
1473
  GeneralUtilities.write_message_to_stdout("Load image...")
1469
- sc.run_program("docker", f"load --input {image_filename}", applicationimage_folder, verbosity=verbosity)
1474
+ self.__sc.run_program("docker", f"load --input {image_filename}", applicationimage_folder, verbosity=verbosity)
1470
1475
  GeneralUtilities.write_message_to_stdout("Tag image...")
1471
- sc.run_program("docker", f"tag {local_image_name}:{codeunit_version} {remote_image_latest}", verbosity=verbosity)
1472
- sc.run_program("docker", f"tag {local_image_name}:{codeunit_version} {remote_image_version}", verbosity=verbosity)
1476
+ self.__sc.run_program("docker", f"tag {local_image_name}:{codeunit_version} {remote_image_latest}", verbosity=verbosity)
1477
+ self.__sc.run_program("docker", f"tag {local_image_name}:{codeunit_version} {remote_image_version}", verbosity=verbosity)
1473
1478
  GeneralUtilities.write_message_to_stdout("Push image...")
1474
- sc.run_program("docker", f"push {remote_image_latest}", verbosity=verbosity)
1475
- sc.run_program("docker", f"push {remote_image_version}", verbosity=verbosity)
1479
+ self.__sc.run_program("docker", f"push {remote_image_latest}", verbosity=verbosity)
1480
+ self.__sc.run_program("docker", f"push {remote_image_version}", verbosity=verbosity)
1476
1481
  if push_readme:
1477
- sc.run_program("docker-pushrm", f"{remote_repo}", codeunit_folder, verbosity=verbosity)
1482
+ self.__sc.run_program("docker-pushrm", f"{remote_repo}", codeunit_folder, verbosity=verbosity)
1478
1483
 
1479
1484
  @GeneralUtilities.check_arguments
1480
1485
  def get_dependent_code_units(self, codeunit_file: str) -> list[str]:
@@ -1756,7 +1761,7 @@ class TasksForCommonProjectStructure:
1756
1761
  @GeneralUtilities.check_arguments
1757
1762
  def get_version_of_project(self, repository_folder: str) -> str:
1758
1763
  self.__sc.assert_is_git_repository(repository_folder)
1759
- return ScriptCollectionCore().get_semver_version_from_gitversion(repository_folder)
1764
+ return self.__sc.get_semver_version_from_gitversion(repository_folder)
1760
1765
 
1761
1766
  @GeneralUtilities.check_arguments
1762
1767
  def replace_common_variables_in_nuspec_file(self, codeunit_folder: str) -> None:
@@ -2207,7 +2212,7 @@ class TasksForCommonProjectStructure:
2207
2212
  openapi_spec_file = os.path.join(codeunit_folder, "Other", "Resources", "DependentCodeUnits", name_of_api_providing_codeunit, "APISpecification", f"{name_of_api_providing_codeunit}.latest.api.json")
2208
2213
  target_folder = os.path.join(codeunit_folder, target_subfolder_in_codeunit)
2209
2214
  GeneralUtilities.ensure_folder_exists_and_is_empty(target_folder)
2210
- ScriptCollectionCore().run_program("java", f'-jar {openapigenerator_jar_file} generate -i {openapi_spec_file} -g {language} -o {target_folder} --global-property supportingFiles --global-property models --global-property apis', codeunit_folder)
2215
+ self.__sc.run_program("java", f'-jar {openapigenerator_jar_file} generate -i {openapi_spec_file} -g {language} -o {target_folder} --global-property supportingFiles --global-property models --global-property apis', codeunit_folder)
2211
2216
 
2212
2217
  @GeneralUtilities.check_arguments
2213
2218
  def generate_api_client_from_dependent_codeunit_in_dotnet(self, file: str, name_of_api_providing_codeunit: str, base_namespace: str) -> None:
@@ -2225,7 +2230,7 @@ class TasksForCommonProjectStructure:
2225
2230
  openapi_spec_file = os.path.join(codeunit_folder, "Other", "Resources", "DependentCodeUnits", name_of_api_providing_codeunit, "APISpecification", f"{name_of_api_providing_codeunit}.latest.api.json")
2226
2231
  target_folder = os.path.join(codeunit_folder, target_subfolder_in_codeunit)
2227
2232
  GeneralUtilities.ensure_directory_exists(target_folder)
2228
- ScriptCollectionCore().run_program("java", f'-jar {openapigenerator_jar_file} generate -i {openapi_spec_file} -g {language} -o {target_folder} --global-property supportingFiles --global-property models --global-property apis {additional_properties}', codeunit_folder)
2233
+ self.__sc.run_program("java", f'-jar {openapigenerator_jar_file} generate -i {openapi_spec_file} -g {language} -o {target_folder} --global-property supportingFiles --global-property models --global-property apis {additional_properties}', codeunit_folder)
2229
2234
 
2230
2235
  # move docs to correct folder
2231
2236
  target_folder_docs = os.path.join(target_folder, "docs")
@@ -2922,13 +2927,12 @@ class TasksForCommonProjectStructure:
2922
2927
 
2923
2928
  @GeneralUtilities.check_arguments
2924
2929
  def __generate_svg_files_from_plantuml(self, diagrams_files_folder: str, plant_uml_folder: str) -> None:
2925
- sc = ScriptCollectionCore()
2926
2930
  for file in GeneralUtilities.get_all_files_of_folder(diagrams_files_folder):
2927
2931
  if file.endswith(".plantuml"):
2928
2932
  output_filename = self.get_output_filename_for_plantuml_filename(file)
2929
2933
  argument = ['-jar', f'{plant_uml_folder}/plantuml.jar', '-tsvg', os.path.basename(file)]
2930
2934
  folder = os.path.dirname(file)
2931
- sc.run_program_argsasarray("java", argument, folder, verbosity=0)
2935
+ self.__sc.run_program_argsasarray("java", argument, folder, verbosity=0)
2932
2936
  result_file = folder+"/" + output_filename
2933
2937
  GeneralUtilities.assert_file_exists(result_file)
2934
2938
  self.__sc.format_xml_file(result_file)
@@ -3026,7 +3030,7 @@ class TasksForCommonProjectStructure:
3026
3030
  artifacts_folder = os.path.join(codeunit_folder, "Other", "Artifacts", artifact_name_of_zip)
3027
3031
  manifest_folder = os.path.join(codeunit_folder, "Other", "Artifacts", "WinGet-Manifest")
3028
3032
  GeneralUtilities.assert_folder_exists(artifacts_folder)
3029
- artifacts_file = ScriptCollectionCore().find_file_by_extension(artifacts_folder, "zip")
3033
+ artifacts_file = self.__sc.find_file_by_extension(artifacts_folder, "zip")
3030
3034
  winget_template_file = os.path.join(build_folder, "WinGet-Template.yaml")
3031
3035
  winget_manifest_file = os.path.join(manifest_folder, "WinGet-Manifest.yaml")
3032
3036
  GeneralUtilities.assert_file_exists(winget_template_file)
@@ -3461,3 +3465,57 @@ class TasksForCommonProjectStructure:
3461
3465
  excluded = ["opendms"]
3462
3466
  iu.update_all_services_in_docker_compose_file(dockercomposefile, VersionEcholon.LatestPatchOrLatestMinor, excluded)
3463
3467
  iu.check_for_newest_version(dockercomposefile, excluded)
3468
+
3469
+
3470
+ @GeneralUtilities.check_arguments
3471
+ def clone_repository_as_resource(self, local_repository_folder: str, remote_repository_link: str, resource_name: str, repository_subname: str = None) -> None:
3472
+ resrepo_commit_id_folder: str = os.path.join(local_repository_folder, "Other", "Resources", f"{resource_name}Version")
3473
+ resrepo_commit_id_file: str = os.path.join(resrepo_commit_id_folder, f"{resource_name}Version.txt")
3474
+ latest_version: str = GeneralUtilities.read_text_from_file(resrepo_commit_id_file)
3475
+ resrepo_data_folder: str = os.path.join(local_repository_folder, "Other", "Resources", resource_name).replace("\\", "/")
3476
+ current_version: str = None
3477
+ resrepo_data_version: str = os.path.join(resrepo_data_folder, f"{resource_name}Version.txt")
3478
+ if os.path.isdir(resrepo_data_folder):
3479
+ if os.path.isfile(resrepo_data_version):
3480
+ current_version = GeneralUtilities.read_text_from_file(resrepo_data_version)
3481
+ if (current_version is None) or (current_version != latest_version):
3482
+ target_folder: str = resrepo_data_folder
3483
+ if repository_subname is not None:
3484
+ target_folder = f"{resrepo_data_folder}/{repository_subname}"
3485
+ GeneralUtilities.ensure_folder_exists_and_is_empty(target_folder)
3486
+ self.__sc.run_program("git", f"clone --recurse-submodules {remote_repository_link} {target_folder}")
3487
+ self.__sc.run_program("git", f"checkout {latest_version}", target_folder)
3488
+ GeneralUtilities.write_text_to_file(resrepo_data_version, latest_version)
3489
+
3490
+ git_folders: list[str] = []
3491
+ git_files: list[str] = []
3492
+ for dirpath, dirnames, filenames in os.walk(target_folder):
3493
+ for dirname in dirnames:
3494
+ if dirname == ".git":
3495
+ full_path = os.path.join(dirpath, dirname)
3496
+ git_folders.append(full_path)
3497
+ for filename in filenames:
3498
+ if filename == ".git":
3499
+ full_path = os.path.join(dirpath, filename)
3500
+ git_files.append(full_path)
3501
+ for git_folder in git_folders:
3502
+ if os.path.isdir(git_folder):
3503
+ GeneralUtilities.ensure_directory_does_not_exist(git_folder)
3504
+ for git_file in git_files:
3505
+ if os.path.isdir(git_file):
3506
+ GeneralUtilities.ensure_file_does_not_exist(git_file)
3507
+
3508
+ def set_latest_version_for_clone_repository_as_resource(self, resourcename: str, github_link: str, branch: str = "main"):
3509
+ current_file = str(Path(__file__).absolute())
3510
+ repository_folder = GeneralUtilities.resolve_relative_path("../../..", current_file)
3511
+
3512
+ resrepo_commit_id_folder: str = os.path.join(repository_folder, "Other", "Resources", f"{resourcename}Version")
3513
+ resrepo_commit_id_file: str = os.path.join(resrepo_commit_id_folder, f"{resourcename}Version.txt")
3514
+ current_version: str = GeneralUtilities.read_text_from_file(resrepo_commit_id_file)
3515
+
3516
+ stdOut = [l.split("\t") for l in GeneralUtilities.string_to_lines(self.__sc.run_program("git", f"ls-remote {github_link}")[1])]
3517
+ stdOut = [l for l in stdOut if l[1] == f"refs/heads/{branch}"]
3518
+ GeneralUtilities.assert_condition(len(stdOut) == 1)
3519
+ latest_version: str = stdOut[0][0]
3520
+ if current_version != latest_version:
3521
+ GeneralUtilities.write_text_to_file(resrepo_commit_id_file, latest_version)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ScriptCollection
3
- Version: 3.5.150
3
+ Version: 3.5.152
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
@@ -34,7 +34,7 @@ Requires-Dist: Pillow>=11.3.0
34
34
  Requires-Dist: psutil>=7.0.0
35
35
  Requires-Dist: pycdlib>=1.14.0
36
36
  Requires-Dist: Pygments>=2.19.2
37
- Requires-Dist: pylint>=3.3.7
37
+ Requires-Dist: pylint>=3.3.8
38
38
  Requires-Dist: pyOpenSSL>=25.1.0
39
39
  Requires-Dist: PyPDF>=5.9.0
40
40
  Requires-Dist: pytest>=8.4.1
@@ -7,11 +7,11 @@ ScriptCollection/ProgramRunnerBase.py,sha256=2kMIAqdc65UjBAddOZkzy_aFx9h5roZ5a4b
7
7
  ScriptCollection/ProgramRunnerEpew.py,sha256=4pjEd0r9Fcz3TTDv0MdTSd5KkigYXcWUVI1X43regfU,6477
8
8
  ScriptCollection/ProgramRunnerPopen.py,sha256=BPY7-ZMIlqT7JOKz8qlB5c0laF2Js-ijzqk09GxZC48,3821
9
9
  ScriptCollection/SCLog.py,sha256=GJ44S6VaBVwX5Dd6MIrdZn6I0dpaaYKVq9w-N0nMXlo,4496
10
- ScriptCollection/ScriptCollectionCore.py,sha256=5NttFPAv0ArguQgpq-4BPm37_hiUQRlpyscIVH8b8qQ,138093
11
- ScriptCollection/TasksForCommonProjectStructure.py,sha256=jPgWuxmQ0_iSE1fWZesNipG0ddATCFGLoU4RaWWW_LI,242339
10
+ ScriptCollection/ScriptCollectionCore.py,sha256=cOswEDwCQ4ndqIz-X0M2lGQD1WBtKLXvjd5aXtyoxUo,138093
11
+ ScriptCollection/TasksForCommonProjectStructure.py,sha256=_QNBZo_48y6UIGKpeepkrCHNvkCpO6MHB2kakgLBe4k,246625
12
12
  ScriptCollection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- scriptcollection-3.5.150.dist-info/METADATA,sha256=8qYKtBv7zsacVbjXt6OPfjZIDfoK4d2hIJ3qYyj-XLE,7689
14
- scriptcollection-3.5.150.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
15
- scriptcollection-3.5.150.dist-info/entry_points.txt,sha256=UyXXDpgVK6U0rkdbe2g-d3a7JFhLFWTUFSYWhcJE7IA,4214
16
- scriptcollection-3.5.150.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
17
- scriptcollection-3.5.150.dist-info/RECORD,,
13
+ scriptcollection-3.5.152.dist-info/METADATA,sha256=W5nkU3X26V-6tgI3aFnpzsaaVPOFHYcHQ1iQW2U_ILg,7689
14
+ scriptcollection-3.5.152.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
15
+ scriptcollection-3.5.152.dist-info/entry_points.txt,sha256=AvmVO9iyWImExpvzL3YYQ9AOEiUIN9guPRRG_W_VNWY,4116
16
+ scriptcollection-3.5.152.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
17
+ scriptcollection-3.5.152.dist-info/RECORD,,
@@ -28,7 +28,6 @@ scgeneratecertificate = ScriptCollection.Executables:GenerateCertificate
28
28
  scgeneratecertificateauthority = ScriptCollection.Executables:GenerateCertificateAuthority
29
29
  scgeneratecertificatesignrequest = ScriptCollection.Executables:GenerateCertificateSignRequest
30
30
  scgeneratesnkfiles = ScriptCollection.Executables:GenerateSnkFiles
31
- scgeneratetasksfilefromworkspacefile = ScriptCollection.Executables:GenerateTaskfileFromWorkspacefile
32
31
  scgeneratethumbnail = ScriptCollection.Executables:GenerateThumbnail
33
32
  schealthcheck = ScriptCollection.Executables:Healthcheck
34
33
  sckeyboarddiagnosis = ScriptCollection.Executables:KeyboardDiagnosis
@@ -51,7 +50,7 @@ scremovefolder = ScriptCollection.Executables:RemoveFolder
51
50
  screname = ScriptCollection.Executables:Rename
52
51
  screplacesubstringsinfilenames = ScriptCollection.Executables:ReplaceSubstringsInFilenames
53
52
  scsearchinfiles = ScriptCollection.Executables:SearchInFiles
54
- scsetfilecontent = ScriptCollection.Executables:SetFileContent
53
+ scsetcontentoffile = ScriptCollection.Executables:SetContentOfFile
55
54
  scshow2faasqrcode = ScriptCollection.Executables:Show2FAAsQRCode
56
55
  scshowmissingfiles = ScriptCollection.Executables:ShowMissingFiles
57
56
  scsigncertificate = ScriptCollection.Executables:SignCertificate