ScriptCollection 4.2.76__py3-none-any.whl → 4.2.78__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.
@@ -13,6 +13,7 @@ import zipfile
13
13
  import math
14
14
  import base64
15
15
  import os
16
+ from html.parser import HTMLParser
16
17
  from queue import Queue, Empty
17
18
  from concurrent.futures import ThreadPoolExecutor
18
19
  import xml.etree.ElementTree as ET
@@ -37,7 +38,7 @@ from .ProgramRunnerBase import ProgramRunnerBase
37
38
  from .ProgramRunnerPopen import ProgramRunnerPopen
38
39
  from .SCLog import SCLog, LogLevel
39
40
 
40
- version = "4.2.76"
41
+ version = "4.2.78"
41
42
  __version__ = version
42
43
 
43
44
  class VSCodeWorkspaceShellTask:
@@ -2622,7 +2623,7 @@ TXDX
2622
2623
  self.run_program("docker", f"network create {network_name}")
2623
2624
 
2624
2625
  @GeneralUtilities.check_arguments
2625
- def format_xml_file(self, file: str) -> None:
2626
+ def format_xml_file(self, file: str,add_xml_declaration:bool=True) -> None:
2626
2627
  encoding = "utf-8"
2627
2628
  element = ET.XML(GeneralUtilities.read_text_from_file(file, encoding))
2628
2629
  def trim_texts(elem: ET.Element):
@@ -2634,15 +2635,125 @@ TXDX
2634
2635
  trim_texts(child)
2635
2636
  trim_texts(element)
2636
2637
  ET.indent(element)
2637
- GeneralUtilities.write_text_to_file(
2638
- file,
2639
- ET.tostring(
2640
- element,
2641
- xml_declaration=True,
2642
- encoding="unicode"
2643
- ),
2644
- encoding
2645
- )
2638
+ content = ET.tostring(element, xml_declaration=add_xml_declaration, encoding="unicode")
2639
+ GeneralUtilities.write_text_to_file(file, content.rstrip("\n") + "\n", encoding)
2640
+
2641
+ @GeneralUtilities.check_arguments
2642
+ def format_html_file(self, file: str, add_html_declaration: bool = False) -> None:
2643
+ encoding = "utf-8"
2644
+ content = GeneralUtilities.read_text_from_file(file, encoding)
2645
+ content=self.format_html_content(content, add_html_declaration)
2646
+ GeneralUtilities.write_text_to_file(file, content, encoding)
2647
+
2648
+ @GeneralUtilities.check_arguments
2649
+ def format_html_content(self, content: str, add_html_declaration: bool = False) -> str:
2650
+
2651
+ VOID_ELEMENTS = {"area", "base", "br", "col", "embed", "hr", "img", "input",
2652
+ "link", "meta", "param", "source", "track", "wbr"}
2653
+
2654
+ class _Node:
2655
+ __slots__ = ("tag", "attrs", "children", "text", "is_void", "raw")
2656
+ def __init__(self, tag=None, attrs=(), text=None, is_void=False, raw=None):
2657
+ self.tag = tag
2658
+ self.attrs = list(attrs)
2659
+ self.children = []
2660
+ self.text = text
2661
+ self.is_void = is_void
2662
+ self.raw = raw
2663
+
2664
+ class _Builder(HTMLParser):
2665
+ def __init__(self):
2666
+ super().__init__(convert_charrefs=False)
2667
+ self.root = _Node()
2668
+ self.stack = [self.root]
2669
+
2670
+ def _top(self):
2671
+ return self.stack[-1]
2672
+
2673
+ def handle_starttag(self, tag, attrs):
2674
+ raw = self.get_starttag_text()
2675
+ raw_lower = raw.lower()
2676
+ original_attrs = []
2677
+ pos = 1 + len(tag)
2678
+ for lc_name, value in attrs:
2679
+ idx = raw_lower.index(lc_name, pos)
2680
+ original_attrs.append((raw[idx:idx + len(lc_name)], value))
2681
+ pos = idx + len(lc_name)
2682
+ node = _Node(tag=tag, attrs=original_attrs, is_void=tag.lower() in VOID_ELEMENTS)
2683
+ self._top().children.append(node)
2684
+ if not node.is_void:
2685
+ self.stack.append(node)
2686
+
2687
+ def handle_endtag(self, tag):
2688
+ if len(self.stack) > 1 and self.stack[-1].tag == tag:
2689
+ self.stack.pop()
2690
+
2691
+ def handle_data(self, data):
2692
+ t = " ".join(data.split())
2693
+ if t:
2694
+ self._top().children.append(_Node(text=t))
2695
+
2696
+ def handle_entityref(self, name):
2697
+ self._top().children.append(_Node(text=f"&{name};"))
2698
+
2699
+ def handle_charref(self, name):
2700
+ self._top().children.append(_Node(text=f"&#{name};"))
2701
+
2702
+ def handle_comment(self, data):
2703
+ self._top().children.append(_Node(raw=f"<!--{data}-->"))
2704
+
2705
+ def handle_decl(self, decl):
2706
+ self._top().children.append(_Node(raw=f"<!{decl}>"))
2707
+
2708
+ def handle_pi(self, data):
2709
+ self._top().children.append(_Node(raw=f"<?{data}>"))
2710
+
2711
+ _angular_exprs: list[str] = []
2712
+
2713
+ def _protect_angular(m: re.Match) -> str:
2714
+ idx = len(_angular_exprs)
2715
+ _angular_exprs.append(m.group(0))
2716
+ return f"__ANGEXPR{idx}__"
2717
+
2718
+ protected = re.sub(r'\{\{[\s\S]*?\}\}', _protect_angular, content)
2719
+ builder = _Builder()
2720
+ builder.feed(protected)
2721
+ ind = " "
2722
+
2723
+ def _serialize(node: _Node, depth: int) -> list:
2724
+ prefix = ind * depth
2725
+ if node.raw is not None:
2726
+ return [prefix + node.raw]
2727
+ if node.text is not None:
2728
+ return [node.text]
2729
+ if node.tag is None:
2730
+ out = []
2731
+ for c in node.children:
2732
+ out.extend(_serialize(c, depth))
2733
+ return out
2734
+ attr_str = "".join(f" {n}" if v is None else f' {n}="{v}"' for n, v in node.attrs)
2735
+ if node.is_void:
2736
+ return [f"{prefix}<{node.tag}{attr_str}>"]
2737
+ has_elem_children = any(c.tag is not None for c in node.children)
2738
+ if not has_elem_children:
2739
+ inner = "".join(c.text or "" for c in node.children)
2740
+ return [f"{prefix}<{node.tag}{attr_str}>{inner}</{node.tag}>"]
2741
+ lines = [f"{prefix}<{node.tag}{attr_str}>"]
2742
+ for c in node.children:
2743
+ child_lines = _serialize(c, depth + 1)
2744
+ if c.text is not None:
2745
+ lines.append(ind * (depth + 1) + child_lines[0])
2746
+ else:
2747
+ lines.extend(child_lines)
2748
+ lines.append(f"{prefix}</{node.tag}>")
2749
+ return lines
2750
+
2751
+ result = "\n".join(line for line in _serialize(builder.root, 0) if line.strip())
2752
+ for i, expr in enumerate(_angular_exprs):
2753
+ result = result.replace(f"__ANGEXPR{i}__", expr)
2754
+ if add_html_declaration and not result.lstrip().startswith("<!DOCTYPE"):
2755
+ result = "<!DOCTYPE html>\n" + result
2756
+ return result
2646
2757
 
2647
2758
  @GeneralUtilities.check_arguments
2648
2759
  def get_pip_index_url_arguments_from_local_cache(self)->list[str]:
@@ -3264,7 +3375,9 @@ OCR-content:
3264
3375
  tree = ET.parse(file)
3265
3376
  root = tree.getroot()
3266
3377
 
3267
- for segment in root.findall(".//xliff:segment[@state='initial']", ns):
3378
+ for segment in root.findall(".//xliff:segment", ns):
3379
+ if segment.get("state", "initial") != "initial":
3380
+ continue
3268
3381
  source_el = segment.find("xliff:source", ns)
3269
3382
  if source_el is None or not source_el.text:
3270
3383
  continue
@@ -3337,12 +3450,14 @@ OCR-content:
3337
3450
  @GeneralUtilities.check_arguments
3338
3451
  def get_all_commits_in_git_repository(self,repository_folder:str,include_all_heads:bool=False) -> list[str]:
3339
3452
  """Returns a textual visualization of all commits in a git-repository."""
3340
- #do 'git log --reverse --all --pretty=format:"%ci | %H | %cn <%ce> | %s"'
3341
- args = ["log", "--reverse", "--pretty=format:%ci | %H | %cn <%ce> | %s"]
3453
+ #do 'git log --reverse --all --pretty=format:"%ci | %H | %cn <%ce> | %d | %s"'
3454
+ args = ["log", "--reverse", "--pretty=format:%ci | %H | %cn <%ce> | %D | %s"]
3342
3455
  if include_all_heads:
3343
3456
  args.append("--all")
3344
3457
  result=self.run_program_argsasarray("git", args, repository_folder, throw_exception_if_exitcode_is_not_zero=True)
3345
- return result[1]
3458
+ output= result[1]
3459
+ result=output.splitlines()
3460
+ return result
3346
3461
 
3347
3462
  @GeneralUtilities.check_arguments
3348
3463
  def write_commit_list_for_repository(self,repository_folder:str,target_file:str,include_all_heads:bool=False) -> None:
@@ -43,7 +43,9 @@ class TFCPS_CodeUnitSpecific_Docker_Functions(TFCPS_CodeUnitSpecific_Base):
43
43
  args.append("--output")
44
44
  args.append(f"type=docker,dest={target_file}")
45
45
  args.append(".")
46
+ time.sleep(5)
46
47
  self._protected_sc.run_program_argsasarray("docker", args, codeunit_folder, print_errors_as_information=True,print_live_output=self.get_verbosity()==LogLevel.Debug)
48
+ time.sleep(2)
47
49
  self._protected_sc.run_program_argsasarray("docker", ["load", "-i", target_file], codeunit_folder, print_errors_as_information=True,print_live_output=self.get_verbosity()==LogLevel.Debug)
48
50
 
49
51
  self.__generate_sbom_for_docker_image()
@@ -191,9 +191,51 @@ class TFCPS_CodeUnitSpecific_DotNet_Functions(TFCPS_CodeUnitSpecific_Base):
191
191
  os.rename(f"{codeunit_folder}\\{bomfile_folder}\\bom.xml", target)
192
192
  self._protected_sc.format_xml_file(target)
193
193
 
194
+ @GeneralUtilities.check_arguments
195
+ def get_dotnet_build_diagnostics(self) -> list[tuple[LogLevel, str, str | None, int | None]]:
196
+ codeunit_name = self.get_codeunit_name()
197
+ codeunit_folder = self.get_codeunit_folder()
198
+ sln_file = os.path.join(codeunit_folder, codeunit_name + ".sln")
199
+ temp_output_folder = os.path.join(tempfile.gettempdir(), str(uuid.uuid4()))
200
+ GeneralUtilities.ensure_directory_exists(temp_output_folder)
201
+ try:
202
+ run_result = self._protected_sc.run_program("dotnet", f"build \"{sln_file}\" -nologo -v minimal -o \"{temp_output_folder}\"", codeunit_folder, throw_exception_if_exitcode_is_not_zero=False)
203
+ finally:
204
+ GeneralUtilities.ensure_directory_does_not_exist(temp_output_folder)
205
+ diagnostics: list[tuple[LogLevel, str, str | None, int | None]] = []
206
+ pattern = re.compile(r"^\s*(?:(.+?)\((\d+),\d+\): )?(error|warning|message|info) [^:]+: (.+?)(?:\s*\[.+\])?\s*$", re.IGNORECASE)
207
+ for line in GeneralUtilities.string_to_lines(run_result[1] + "\n" + run_result[2]):
208
+ m = pattern.match(line)
209
+ if m:
210
+ file_path = m.group(1)
211
+ line_number = int(m.group(2)) if m.group(2) else None
212
+ level_str = m.group(3).lower()
213
+ message = m.group(4)
214
+ if level_str == "error":
215
+ level = LogLevel.Error
216
+ elif level_str == "warning":
217
+ level = LogLevel.Warning
218
+ else:
219
+ level = LogLevel.Information
220
+ diagnostics.append((level, message, file_path, line_number))
221
+ return diagnostics
222
+
194
223
  @GeneralUtilities.check_arguments
195
224
  def linting(self) -> None:
196
- pass#TODO
225
+ codeunit_name = self.get_codeunit_name()
226
+ codeunit_folder = self.get_codeunit_folder()
227
+ self._protected_sc.format_xml_file(os.path.join(codeunit_folder, codeunit_name, codeunit_name + ".csproj"), add_xml_declaration=False)
228
+ self._protected_sc.format_xml_file(os.path.join(codeunit_folder, codeunit_name + "Tests", codeunit_name + "Tests.csproj"), add_xml_declaration=False)
229
+ self.standardized_task_verify_standard_format_csproj_files()
230
+ diagnostics = self.get_dotnet_build_diagnostics()
231
+ has_errors = False
232
+ for (level, message, file, line) in diagnostics:
233
+ location = f" ({file}:{line})" if file else ""
234
+ self._protected_sc.log.log(f"{message}{location}", level)
235
+ if level == LogLevel.Error:#should not occurr on scbuildcodeunits because then the build would have failed already.
236
+ has_errors = True
237
+ if has_errors:
238
+ raise ValueError("Linting-issues occurred.")
197
239
 
198
240
  @GeneralUtilities.check_arguments
199
241
  def do_common_tasks(self,current_codeunit_version:str,certificateGeneratorInformation:CertificateGeneratorInformationBase)-> None:
@@ -207,7 +249,6 @@ class TFCPS_CodeUnitSpecific_DotNet_Functions(TFCPS_CodeUnitSpecific_Base):
207
249
  self._protected_sc.replace_version_in_nuspec_file(GeneralUtilities.resolve_relative_path(f"./Build/{codeunit_name}.nuspec", folder_of_current_file), codeunit_version)
208
250
  if certificateGeneratorInformation.generate_certificate():
209
251
  self.tfcps_Tools_General.set_constants_for_certificate_private_information(self.get_codeunit_folder())
210
- self.standardized_task_verify_standard_format_csproj_files()
211
252
 
212
253
  @GeneralUtilities.check_arguments
213
254
  def standardized_task_verify_standard_format_csproj_files(self) -> bool:
@@ -237,64 +278,64 @@ class TFCPS_CodeUnitSpecific_DotNet_Functions(TFCPS_CodeUnitSpecific_Base):
237
278
  codeunit_version_regex = re.escape(codeunit_version)
238
279
  codeunit_description_regex = re.escape(codeunit_description)
239
280
  regex = f"""^<Project Sdk=\\"Microsoft\\.NET\\.Sdk\\">
240
- <PropertyGroup>
241
- <TargetFramework>([^<]+)<\\/TargetFramework>
242
- <Authors>([^<]+)<\\/Authors>
243
- <Version>{codeunit_version_regex}<\\/Version>
244
- <AssemblyVersion>{codeunit_version_regex}<\\/AssemblyVersion>
245
- <FileVersion>{codeunit_version_regex}<\\/FileVersion>
246
- <SelfContained>false<\\/SelfContained>
247
- <IsPackable>false<\\/IsPackable>
248
- <PreserveCompilationContext>false<\\/PreserveCompilationContext>
249
- <GenerateRuntimeConfigurationFiles>true<\\/GenerateRuntimeConfigurationFiles>
250
- <Copyright>([^<]+)<\\/Copyright>
251
- <Description>{codeunit_description_regex}<\\/Description>
252
- <PackageProjectUrl>https:\\/\\/([^<]+)<\\/PackageProjectUrl>
253
- <RepositoryUrl>https:\\/\\/([^<]+)\\.git<\\/RepositoryUrl>
254
- <RootNamespace>([^<]+)\\.Core<\\/RootNamespace>
255
- <ProduceReferenceAssembly>false<\\/ProduceReferenceAssembly>
256
- <Nullable>(disable|enable|warnings|annotations)<\\/Nullable>
257
- <Configurations>Development;QualityCheck;Productive<\\/Configurations>
258
- <IsTestProject>false<\\/IsTestProject>
259
- <LangVersion>([^<]+)<\\/LangVersion>
260
- <PackageRequireLicenseAcceptance>true<\\/PackageRequireLicenseAcceptance>
261
- <GenerateSerializationAssemblies>Off<\\/GenerateSerializationAssemblies>
262
- <AppendTargetFrameworkToOutputPath>false<\\/AppendTargetFrameworkToOutputPath>
263
- <OutputPath>\\.\\.\\\\Other\\\\Artifacts\\\\BuildResult_DotNet_win\\-x64<\\/OutputPath>
264
- <PlatformTarget>([^<]+)<\\/PlatformTarget>
265
- <WarningLevel>\\d<\\/WarningLevel>
266
- <Prefer32Bit>false<\\/Prefer32Bit>
267
- <SignAssembly>true<\\/SignAssembly>
268
- <AssemblyOriginatorKeyFile>\\.\\.\\\\\\.\\.\\\\Other\\\\Resources\\\\PublicKeys\\\\StronglyNamedKey\\\\([^<]+)PublicKey\\.snk<\\/AssemblyOriginatorKeyFile>
269
- <DelaySign>true<\\/DelaySign>
270
- <NoWarn>([^<]+)<\\/NoWarn>
271
- <WarningsAsErrors>([^<]+)<\\/WarningsAsErrors>
272
- <ErrorLog>\\.\\.\\\\Other\\\\Resources\\\\CodeAnalysisResult\\\\{codeunit_name_regex}\\.sarif<\\/ErrorLog>
273
- <OutputType>([^<]+)<\\/OutputType>
274
- <DocumentationFile>\\.\\.\\\\Other\\\\Artifacts\\\\MetaInformation\\\\{codeunit_name_regex}\\.xml<\\/DocumentationFile>(\\n|.)*
275
- <\\/PropertyGroup>
276
- <PropertyGroup Condition=\\\"'\\$\\(Configuration\\)'=='Development'\\\">
277
- <DebugType>full<\\/DebugType>
278
- <DebugSymbols>true<\\/DebugSymbols>
279
- <Optimize>false<\\/Optimize>
280
- <DefineConstants>TRACE;DEBUG;Development<\\/DefineConstants>
281
- <ErrorReport>prompt<\\/ErrorReport>
282
- <\\/PropertyGroup>
283
- <PropertyGroup Condition=\\\"'\\$\\(Configuration\\)'=='QualityCheck'\\\">
284
- <DebugType>portable<\\/DebugType>
285
- <DebugSymbols>true<\\/DebugSymbols>
286
- <Optimize>false<\\/Optimize>
287
- <DefineConstants>TRACE;QualityCheck<\\/DefineConstants>
288
- <ErrorReport>none<\\/ErrorReport>
289
- <\\/PropertyGroup>
290
- <PropertyGroup Condition=\\\"'\\$\\(Configuration\\)'=='Productive'\\\">
291
- <DebugType>portable<\\/DebugType>
292
- <DebugSymbols>true<\\/DebugSymbols>
293
- <Optimize>false<\\/Optimize>
294
- <DefineConstants>Productive<\\/DefineConstants>
295
- <ErrorReport>none<\\/ErrorReport>
296
- <\\/PropertyGroup>(\\n|.)*
297
- <\\/Project>$"""
281
+ <PropertyGroup>
282
+ <TargetFramework>([^<]+)<\\/TargetFramework>
283
+ <Authors>([^<]+)<\\/Authors>
284
+ <Version>{codeunit_version_regex}<\\/Version>
285
+ <AssemblyVersion>{codeunit_version_regex}<\\/AssemblyVersion>
286
+ <FileVersion>{codeunit_version_regex}<\\/FileVersion>
287
+ <SelfContained>false<\\/SelfContained>
288
+ <IsPackable>false<\\/IsPackable>
289
+ <PreserveCompilationContext>false<\\/PreserveCompilationContext>
290
+ <GenerateRuntimeConfigurationFiles>true<\\/GenerateRuntimeConfigurationFiles>
291
+ <Copyright>([^<]+)<\\/Copyright>
292
+ <Description>{codeunit_description_regex}<\\/Description>
293
+ <PackageProjectUrl>https:\\/\\/([^<]+)<\\/PackageProjectUrl>
294
+ <RepositoryUrl>https:\\/\\/([^<]+)\\.git<\\/RepositoryUrl>
295
+ <RootNamespace>([^<]+)\\.Core<\\/RootNamespace>
296
+ <ProduceReferenceAssembly>false<\\/ProduceReferenceAssembly>
297
+ <Nullable>(disable|enable|warnings|annotations)<\\/Nullable>
298
+ <Configurations>Development;QualityCheck;Productive<\\/Configurations>
299
+ <IsTestProject>false<\\/IsTestProject>
300
+ <LangVersion>([^<]+)<\\/LangVersion>
301
+ <PackageRequireLicenseAcceptance>true<\\/PackageRequireLicenseAcceptance>
302
+ <GenerateSerializationAssemblies>Off<\\/GenerateSerializationAssemblies>
303
+ <AppendTargetFrameworkToOutputPath>false<\\/AppendTargetFrameworkToOutputPath>
304
+ <OutputPath>\\.\\.\\\\Other\\\\Artifacts\\\\BuildResult_DotNet_win\\-x64<\\/OutputPath>
305
+ <PlatformTarget>([^<]+)<\\/PlatformTarget>
306
+ <WarningLevel>\\d<\\/WarningLevel>
307
+ <Prefer32Bit>false<\\/Prefer32Bit>
308
+ <SignAssembly>true<\\/SignAssembly>
309
+ <AssemblyOriginatorKeyFile>\\.\\.\\\\\\.\\.\\\\Other\\\\Resources\\\\PublicKeys\\\\StronglyNamedKey\\\\([^<]+)PublicKey\\.snk<\\/AssemblyOriginatorKeyFile>
310
+ <DelaySign>true<\\/DelaySign>
311
+ <NoWarn>([^<]+)<\\/NoWarn>
312
+ <WarningsAsErrors>([^<]+)<\\/WarningsAsErrors>
313
+ <ErrorLog>\\.\\.\\\\Other\\\\Resources\\\\CodeAnalysisResult\\\\{codeunit_name_regex}\\.sarif<\\/ErrorLog>
314
+ <OutputType>([^<]+)<\\/OutputType>
315
+ <DocumentationFile>\\.\\.\\\\Other\\\\Artifacts\\\\MetaInformation\\\\{codeunit_name_regex}\\.xml<\\/DocumentationFile>(\\n|.)*
316
+ <\\/PropertyGroup>
317
+ <PropertyGroup Condition=\\\"'\\$\\(Configuration\\)'=='Development'\\\">
318
+ <DebugType>full<\\/DebugType>
319
+ <DebugSymbols>true<\\/DebugSymbols>
320
+ <Optimize>false<\\/Optimize>
321
+ <DefineConstants>TRACE;DEBUG;Development<\\/DefineConstants>
322
+ <ErrorReport>prompt<\\/ErrorReport>
323
+ <\\/PropertyGroup>
324
+ <PropertyGroup Condition=\\\"'\\$\\(Configuration\\)'=='QualityCheck'\\\">
325
+ <DebugType>portable<\\/DebugType>
326
+ <DebugSymbols>true<\\/DebugSymbols>
327
+ <Optimize>false<\\/Optimize>
328
+ <DefineConstants>TRACE;QualityCheck<\\/DefineConstants>
329
+ <ErrorReport>none<\\/ErrorReport>
330
+ <\\/PropertyGroup>
331
+ <PropertyGroup Condition=\\\"'\\$\\(Configuration\\)'=='Productive'\\\">
332
+ <DebugType>portable<\\/DebugType>
333
+ <DebugSymbols>true<\\/DebugSymbols>
334
+ <Optimize>false<\\/Optimize>
335
+ <DefineConstants>Productive<\\/DefineConstants>
336
+ <ErrorReport>none<\\/ErrorReport>
337
+ <\\/PropertyGroup>(\\n|.)*
338
+ <\\/Project>\\n?$"""
298
339
  result = self.__standardized_task_verify_standard_format_for_csproj_files(regex, csproj_file)
299
340
  return (result[0], regex, result[1])
300
341
 
@@ -302,63 +343,63 @@ class TFCPS_CodeUnitSpecific_DotNet_Functions(TFCPS_CodeUnitSpecific_Base):
302
343
  codeunit_name_regex = re.escape(codeunit_name)
303
344
  codeunit_version_regex = re.escape(codeunit_version)
304
345
  regex = f"""^<Project Sdk=\\"Microsoft\\.NET\\.Sdk\\">
305
- <PropertyGroup>
306
- <TargetFramework>([^<]+)<\\/TargetFramework>
307
- <Authors>([^<]+)<\\/Authors>
308
- <Version>{codeunit_version_regex}<\\/Version>
309
- <AssemblyVersion>{codeunit_version_regex}<\\/AssemblyVersion>
310
- <FileVersion>{codeunit_version_regex}<\\/FileVersion>
311
- <SelfContained>false<\\/SelfContained>
312
- <IsPackable>false<\\/IsPackable>
313
- <PreserveCompilationContext>false<\\/PreserveCompilationContext>
314
- <GenerateRuntimeConfigurationFiles>true<\\/GenerateRuntimeConfigurationFiles>
315
- <Copyright>([^<]+)<\\/Copyright>
316
- <Description>{codeunit_name_regex}Tests is the test-project for {codeunit_name_regex}\\.<\\/Description>
317
- <PackageProjectUrl>https:\\/\\/([^<]+)<\\/PackageProjectUrl>
318
- <RepositoryUrl>https:\\/\\/([^<]+)\\.git</RepositoryUrl>
319
- <RootNamespace>([^<]+)\\.Tests<\\/RootNamespace>
320
- <ProduceReferenceAssembly>false<\\/ProduceReferenceAssembly>
321
- <Nullable>(disable|enable|warnings|annotations)<\\/Nullable>
322
- <Configurations>Development;QualityCheck;Productive<\\/Configurations>
323
- <IsTestProject>true<\\/IsTestProject>
324
- <LangVersion>([^<]+)<\\/LangVersion>
325
- <PackageRequireLicenseAcceptance>true<\\/PackageRequireLicenseAcceptance>
326
- <GenerateSerializationAssemblies>Off<\\/GenerateSerializationAssemblies>
327
- <AppendTargetFrameworkToOutputPath>false<\\/AppendTargetFrameworkToOutputPath>
328
- <OutputPath>\\.\\.\\\\Other\\\\Artifacts\\\\BuildResultTests_DotNet_win\\-x64<\\/OutputPath>
329
- <PlatformTarget>([^<]+)<\\/PlatformTarget>
330
- <WarningLevel>\\d<\\/WarningLevel>
331
- <Prefer32Bit>false<\\/Prefer32Bit>
332
- <SignAssembly>true<\\/SignAssembly>
333
- <AssemblyOriginatorKeyFile>\\.\\.\\\\\\.\\.\\\\Other\\\\Resources\\\\PublicKeys\\\\StronglyNamedKey\\\\([^<]+)PublicKey\\.snk<\\/AssemblyOriginatorKeyFile>
334
- <DelaySign>true<\\/DelaySign>
335
- <NoWarn>([^<]+)<\\/NoWarn>
336
- <WarningsAsErrors>([^<]+)<\\/WarningsAsErrors>
337
- <ErrorLog>\\.\\.\\\\Other\\\\Resources\\\\CodeAnalysisResult\\\\{codeunit_name_regex}Tests\\.sarif<\\/ErrorLog>
338
- <OutputType>Library<\\/OutputType>(\\n|.)*
339
- <\\/PropertyGroup>
340
- <PropertyGroup Condition=\\\"'\\$\\(Configuration\\)'=='Development'\\\">
341
- <DebugType>full<\\/DebugType>
342
- <DebugSymbols>true<\\/DebugSymbols>
343
- <Optimize>false<\\/Optimize>
344
- <DefineConstants>TRACE;DEBUG;Development<\\/DefineConstants>
345
- <ErrorReport>prompt<\\/ErrorReport>
346
- <\\/PropertyGroup>
347
- <PropertyGroup Condition=\\\"'\\$\\(Configuration\\)'=='QualityCheck'\\\">
348
- <DebugType>portable<\\/DebugType>
349
- <DebugSymbols>true<\\/DebugSymbols>
350
- <Optimize>false<\\/Optimize>
351
- <DefineConstants>TRACE;QualityCheck<\\/DefineConstants>
352
- <ErrorReport>none<\\/ErrorReport>
353
- <\\/PropertyGroup>
354
- <PropertyGroup Condition=\\\"'\\$\\(Configuration\\)'=='Productive'\\\">
355
- <DebugType>portable<\\/DebugType>
356
- <DebugSymbols>true<\\/DebugSymbols>
357
- <Optimize>false<\\/Optimize>
358
- <DefineConstants>Productive<\\/DefineConstants>
359
- <ErrorReport>none<\\/ErrorReport>
360
- <\\/PropertyGroup>(\\n|.)*
361
- <\\/Project>$"""
346
+ <PropertyGroup>
347
+ <TargetFramework>([^<]+)<\\/TargetFramework>
348
+ <Authors>([^<]+)<\\/Authors>
349
+ <Version>{codeunit_version_regex}<\\/Version>
350
+ <AssemblyVersion>{codeunit_version_regex}<\\/AssemblyVersion>
351
+ <FileVersion>{codeunit_version_regex}<\\/FileVersion>
352
+ <SelfContained>false<\\/SelfContained>
353
+ <IsPackable>false<\\/IsPackable>
354
+ <PreserveCompilationContext>false<\\/PreserveCompilationContext>
355
+ <GenerateRuntimeConfigurationFiles>true<\\/GenerateRuntimeConfigurationFiles>
356
+ <Copyright>([^<]+)<\\/Copyright>
357
+ <Description>{codeunit_name_regex}Tests is the test-project for {codeunit_name_regex}\\.<\\/Description>
358
+ <PackageProjectUrl>https:\\/\\/([^<]+)<\\/PackageProjectUrl>
359
+ <RepositoryUrl>https:\\/\\/([^<]+)\\.git</RepositoryUrl>
360
+ <RootNamespace>([^<]+)\\.Tests<\\/RootNamespace>
361
+ <ProduceReferenceAssembly>false<\\/ProduceReferenceAssembly>
362
+ <Nullable>(disable|enable|warnings|annotations)<\\/Nullable>
363
+ <Configurations>Development;QualityCheck;Productive<\\/Configurations>
364
+ <IsTestProject>true<\\/IsTestProject>
365
+ <LangVersion>([^<]+)<\\/LangVersion>
366
+ <PackageRequireLicenseAcceptance>true<\\/PackageRequireLicenseAcceptance>
367
+ <GenerateSerializationAssemblies>Off<\\/GenerateSerializationAssemblies>
368
+ <AppendTargetFrameworkToOutputPath>false<\\/AppendTargetFrameworkToOutputPath>
369
+ <OutputPath>\\.\\.\\\\Other\\\\Artifacts\\\\BuildResultTests_DotNet_win\\-x64<\\/OutputPath>
370
+ <PlatformTarget>([^<]+)<\\/PlatformTarget>
371
+ <WarningLevel>\\d<\\/WarningLevel>
372
+ <Prefer32Bit>false<\\/Prefer32Bit>
373
+ <SignAssembly>true<\\/SignAssembly>
374
+ <AssemblyOriginatorKeyFile>\\.\\.\\\\\\.\\.\\\\Other\\\\Resources\\\\PublicKeys\\\\StronglyNamedKey\\\\([^<]+)PublicKey\\.snk<\\/AssemblyOriginatorKeyFile>
375
+ <DelaySign>true<\\/DelaySign>
376
+ <NoWarn>([^<]+)<\\/NoWarn>
377
+ <WarningsAsErrors>([^<]+)<\\/WarningsAsErrors>
378
+ <ErrorLog>\\.\\.\\\\Other\\\\Resources\\\\CodeAnalysisResult\\\\{codeunit_name_regex}Tests\\.sarif<\\/ErrorLog>
379
+ <OutputType>Library<\\/OutputType>(\\n|.)*
380
+ <\\/PropertyGroup>
381
+ <PropertyGroup Condition=\\\"'\\$\\(Configuration\\)'=='Development'\\\">
382
+ <DebugType>full<\\/DebugType>
383
+ <DebugSymbols>true<\\/DebugSymbols>
384
+ <Optimize>false<\\/Optimize>
385
+ <DefineConstants>TRACE;DEBUG;Development<\\/DefineConstants>
386
+ <ErrorReport>prompt<\\/ErrorReport>
387
+ <\\/PropertyGroup>
388
+ <PropertyGroup Condition=\\\"'\\$\\(Configuration\\)'=='QualityCheck'\\\">
389
+ <DebugType>portable<\\/DebugType>
390
+ <DebugSymbols>true<\\/DebugSymbols>
391
+ <Optimize>false<\\/Optimize>
392
+ <DefineConstants>TRACE;QualityCheck<\\/DefineConstants>
393
+ <ErrorReport>none<\\/ErrorReport>
394
+ <\\/PropertyGroup>
395
+ <PropertyGroup Condition=\\\"'\\$\\(Configuration\\)'=='Productive'\\\">
396
+ <DebugType>portable<\\/DebugType>
397
+ <DebugSymbols>true<\\/DebugSymbols>
398
+ <Optimize>false<\\/Optimize>
399
+ <DefineConstants>Productive<\\/DefineConstants>
400
+ <ErrorReport>none<\\/ErrorReport>
401
+ <\\/PropertyGroup>(\\n|.)*
402
+ <\\/Project>\\n?$"""
362
403
  result = self.__standardized_task_verify_standard_format_for_csproj_files(regex, csproj_file)
363
404
  return (result[0], regex, result[1])
364
405
 
@@ -0,0 +1,43 @@
1
+ import os
2
+ from ...GeneralUtilities import GeneralUtilities
3
+ from ...SCLog import LogLevel
4
+ from ..TFCPS_CodeUnitSpecific_Base import TFCPS_CodeUnitSpecific_Base, TFCPS_CodeUnitSpecific_Base_CLI
5
+
6
+ class TFCPS_CodeUnitSpecific_Maven_Functions(TFCPS_CodeUnitSpecific_Base):
7
+
8
+ def __init__(self, current_file: str, verbosity: LogLevel, targetenvironmenttype: str, use_cache: bool, is_pre_merge: bool):
9
+ super().__init__(current_file, verbosity, targetenvironmenttype, use_cache, is_pre_merge)
10
+
11
+ @GeneralUtilities.check_arguments
12
+ def build(self) -> None:
13
+ pass#TODO
14
+
15
+ @GeneralUtilities.check_arguments
16
+ def linting(self) -> None:
17
+ pass#TODO
18
+
19
+ @GeneralUtilities.check_arguments
20
+ def run_testcases(self) -> None:
21
+ pass#TODO
22
+
23
+ def get_dependencies(self) -> dict[str, set[str]]:
24
+ return dict[str, set[str]]()#TODO
25
+
26
+ @GeneralUtilities.check_arguments
27
+ def get_available_versions(self, dependencyname: str) -> list[str]:
28
+ return []#TODO
29
+
30
+ @GeneralUtilities.check_arguments
31
+ def set_dependency_version(self, name: str, new_version: str) -> None:
32
+ raise ValueError("Operation is not implemented.")
33
+
34
+ class TFCPS_CodeUnitSpecific_Maven_CLI:
35
+
36
+ @staticmethod
37
+ @GeneralUtilities.check_arguments
38
+ def parse(file: str) -> TFCPS_CodeUnitSpecific_Maven_Functions:
39
+ parser = TFCPS_CodeUnitSpecific_Base_CLI.get_base_parser()
40
+ #add custom parameter if desired
41
+ args = parser.parse_args()
42
+ result: TFCPS_CodeUnitSpecific_Maven_Functions = TFCPS_CodeUnitSpecific_Maven_Functions(file, LogLevel(int(args.verbosity)), args.targetenvironmenttype, not args.nocache, args.ispremerge)
43
+ return result
File without changes
@@ -24,6 +24,10 @@ class TFCPS_CodeUnitSpecific_NodeJS_Functions(TFCPS_CodeUnitSpecific_Base):
24
24
 
25
25
  @GeneralUtilities.check_arguments
26
26
  def linting(self) -> None:
27
+ src_folder = os.path.join(self.get_codeunit_folder(), "src")
28
+ for file in GeneralUtilities.get_all_files_of_folder(src_folder):
29
+ if file.endswith(".html"):
30
+ self._protected_sc.format_html_file(file, os.path.basename(file) == "index.html")
27
31
  self._protected_sc.run_with_epew("npm", "run lint", self.get_codeunit_folder(),print_live_output=self.get_verbosity()==LogLevel.Debug,encode_argument_in_base64=True)
28
32
 
29
33
  @GeneralUtilities.check_arguments
@@ -0,0 +1,43 @@
1
+ import os
2
+ from ...GeneralUtilities import GeneralUtilities
3
+ from ...SCLog import LogLevel
4
+ from ..TFCPS_CodeUnitSpecific_Base import TFCPS_CodeUnitSpecific_Base, TFCPS_CodeUnitSpecific_Base_CLI
5
+
6
+ class TFCPS_CodeUnitSpecific_Rust_Functions(TFCPS_CodeUnitSpecific_Base):
7
+
8
+ def __init__(self, current_file: str, verbosity: LogLevel, targetenvironmenttype: str, use_cache: bool, is_pre_merge: bool):
9
+ super().__init__(current_file, verbosity, targetenvironmenttype, use_cache, is_pre_merge)
10
+
11
+ @GeneralUtilities.check_arguments
12
+ def build(self) -> None:
13
+ pass#TODO
14
+
15
+ @GeneralUtilities.check_arguments
16
+ def linting(self) -> None:
17
+ pass#TODO
18
+
19
+ @GeneralUtilities.check_arguments
20
+ def run_testcases(self) -> None:
21
+ pass#TODO
22
+
23
+ def get_dependencies(self) -> dict[str, set[str]]:
24
+ return dict[str, set[str]]()#TODO
25
+
26
+ @GeneralUtilities.check_arguments
27
+ def get_available_versions(self, dependencyname: str) -> list[str]:
28
+ return []#TODO
29
+
30
+ @GeneralUtilities.check_arguments
31
+ def set_dependency_version(self, name: str, new_version: str) -> None:
32
+ raise ValueError("Operation is not implemented.")
33
+
34
+ class TFCPS_CodeUnitSpecific_Rust_CLI:
35
+
36
+ @staticmethod
37
+ @GeneralUtilities.check_arguments
38
+ def parse(file: str) -> TFCPS_CodeUnitSpecific_Rust_Functions:
39
+ parser = TFCPS_CodeUnitSpecific_Base_CLI.get_base_parser()
40
+ #add custom parameter if desired
41
+ args = parser.parse_args()
42
+ result: TFCPS_CodeUnitSpecific_Rust_Functions = TFCPS_CodeUnitSpecific_Rust_Functions(file, LogLevel(int(args.verbosity)), args.targetenvironmenttype, not args.nocache, args.ispremerge)
43
+ return result
File without changes
@@ -1,6 +1,7 @@
1
1
  import os
2
2
  import json
3
3
  from datetime import datetime, timedelta,timezone
4
+ import yaml
4
5
  from ..GeneralUtilities import GeneralUtilities
5
6
  from ..ScriptCollectionCore import ScriptCollectionCore
6
7
  from ..SCLog import LogLevel
@@ -67,6 +68,7 @@ class TFCPS_CodeUnit_BuildCodeUnits:
67
68
  self.__search_for_vulnerabilities()
68
69
  self.__search_for_secrets()
69
70
  if self.is_pre_merge():
71
+ self.__translate()
70
72
  self.__collect_metrics()
71
73
  self.__generate_loc_diagram()
72
74
  end_time:datetime=GeneralUtilities.get_now()
@@ -97,6 +99,17 @@ class TFCPS_CodeUnit_BuildCodeUnits:
97
99
  def build_codeunits_in_container(self) -> None:
98
100
  raise ValueError("Not implemented.")
99
101
 
102
+ @GeneralUtilities.check_arguments
103
+ def __translate(self) -> None:
104
+ for taskfile_name in ("Taskfile.yml", "Taskfile.yaml"):
105
+ taskfile = os.path.join(self.repository, taskfile_name)
106
+ if os.path.isfile(taskfile):
107
+ with open(taskfile, "r", encoding="utf-8") as f:
108
+ taskfile_content = yaml.safe_load(f)
109
+ if isinstance(taskfile_content.get("tasks"), dict) and "Translate" in taskfile_content["tasks"]:
110
+ self.sc.run_program("task", "Translate", self.repository, print_live_output=self.sc.log.loglevel == LogLevel.Debug)
111
+ break
112
+
100
113
  @GeneralUtilities.check_arguments
101
114
  def __collect_metrics(self) -> None:
102
115
  project_version: str=self.tfcps_tools_general.get_version_of_project(self.repository)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ScriptCollection
3
- Version: 4.2.76
3
+ Version: 4.2.78
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
@@ -9,7 +9,7 @@ ScriptCollection/ProgramRunnerMock.py,sha256=uTu-aFle1W_oKjeQEmuPsFPQpvo0kRf2FrR
9
9
  ScriptCollection/ProgramRunnerPopen.py,sha256=BPY7-ZMIlqT7JOKz8qlB5c0laF2Js-ijzqk09GxZC48,3821
10
10
  ScriptCollection/ProgramRunnerSudo.py,sha256=_khC3xuTdrPoLluBJZWfldltmmuKltABJPcbjZSFW-4,4835
11
11
  ScriptCollection/SCLog.py,sha256=8TRy1LeYMsPOIuWUcnUNNbO5pd-cNBS-3cn-kdzP8FU,4768
12
- ScriptCollection/ScriptCollectionCore.py,sha256=o_TAAlf3mBwzpMMZGly6tPi0jQFqA1hy9hHWxTRC-po,182101
12
+ ScriptCollection/ScriptCollectionCore.py,sha256=fvpJovrlNqW5EcN6NaZH7o5984PM2meD-BsrJjR0Er8,187128
13
13
  ScriptCollection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  ScriptCollection/OCIImages/AbstractImageHandler.py,sha256=83qDMILwxhH9DbC0sb358Vu8PXEysmJJyap_6gECZqs,1627
15
15
  ScriptCollection/OCIImages/OCIImageManager.py,sha256=aBogkSXNDyi8NO11N-s03nuFJEv7PyJ-wjHuYYeZfvs,6662
@@ -24,7 +24,7 @@ ScriptCollection/Resources/CultureChooser/index.html,sha256=gxQzbrSp4WU52TqN-gcB
24
24
  ScriptCollection/Resources/MaintenanceSite/MaintenanceSite.html,sha256=CX9S1bdOz6xU2aGfr03tJRGczQrlpn-IeODc15d5kc0,232
25
25
  ScriptCollection/TFCPS/TFCPS_CodeUnitSpecific_Base.py,sha256=EMNDgkUem87aH1csz7eoSBBEKkiZMLZqZhnxKSPQWe0,27845
26
26
  ScriptCollection/TFCPS/TFCPS_CodeUnit_BuildCodeUnit.py,sha256=MieeAAKm1y58qXp1cCUN5mj5vwpq4Pc1uusUjPQzpvc,8237
27
- ScriptCollection/TFCPS/TFCPS_CodeUnit_BuildCodeUnits.py,sha256=3Mo8XrTDD1Z7_K1PLxSPYA-fePQ95sIAeNKGj0matiw,15109
27
+ ScriptCollection/TFCPS/TFCPS_CodeUnit_BuildCodeUnits.py,sha256=2CNCmngOgygvhJrBdMbrq5W6LZ-xxchlxeThaDQZ-TA,15792
28
28
  ScriptCollection/TFCPS/TFCPS_CreateRelease.py,sha256=yqGstRjRfVVGbqrcBgtYStqth2x2SvBb3y2Ht8GsuMQ,6554
29
29
  ScriptCollection/TFCPS/TFCPS_Generic.py,sha256=Tpzgiz6m3-cYCkObZOG5Uu7oM-EMoWFzzRpLl3Lblqo,2023
30
30
  ScriptCollection/TFCPS/TFCPS_MergeToMain.py,sha256=-Ev9D3bZDlUk2WFQhcmvzQ3FCS97OdsVUd0koAdmpZc,7474
@@ -32,23 +32,27 @@ ScriptCollection/TFCPS/TFCPS_MergeToStable.py,sha256=Ajfy2pLajTuU6UpwItHt4C2a-gL
32
32
  ScriptCollection/TFCPS/TFCPS_PreBuildCodeunitsScript.py,sha256=f0Uq1cA_4LvmL72cal0crrbKF6PcxL13D9wBKuQ1YBw,2328
33
33
  ScriptCollection/TFCPS/TFCPS_Tools_General.py,sha256=VbS3qdpCc4ZgbwlwxHdLB_ras8dDmJDBklRrWIrhbDQ,101356
34
34
  ScriptCollection/TFCPS/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- ScriptCollection/TFCPS/Docker/TFCPS_CodeUnitSpecific_Docker.py,sha256=sPO4Gf6oRbGH9QRA3p2nmTAeHtkyYr31ucLbJP09JeY,12139
35
+ ScriptCollection/TFCPS/Docker/TFCPS_CodeUnitSpecific_Docker.py,sha256=bHBIaZuV1DqvBI5BGG8xp5PYDfDDGPlbcma8Z_0mCjc,12191
36
36
  ScriptCollection/TFCPS/Docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
37
  ScriptCollection/TFCPS/DotNet/CertificateGeneratorInformationBase.py,sha256=bT6Gd5pQpZCw4OQz6HWkPCSn5z__eUUEisABLDSxd0o,200
38
38
  ScriptCollection/TFCPS/DotNet/CertificateGeneratorInformationGenerate.py,sha256=QyjOfMY22JWCvKjMelHiDWbJiWqotOfebpJpgDUaoO4,237
39
39
  ScriptCollection/TFCPS/DotNet/CertificateGeneratorInformationNoGenerate.py,sha256=i0zEGehj0sttxjjZtoq2KFSKp_ulxVyWp_ZgAhIY_So,241
40
- ScriptCollection/TFCPS/DotNet/TFCPS_CodeUnitSpecific_DotNet.py,sha256=W957xFs4YBkWtU8q-JcbN4aWK2Aq8SIM1jePQRRbEkA,31993
40
+ ScriptCollection/TFCPS/DotNet/TFCPS_CodeUnitSpecific_DotNet.py,sha256=0Jd-Sik8dY8KMdTsMIpedvYmgsuiyCcoL1VhT5ePQd8,34200
41
41
  ScriptCollection/TFCPS/DotNet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
42
  ScriptCollection/TFCPS/Flutter/TFCPS_CodeUnitSpecific_Flutter.py,sha256=KAjyFyEjpkghsVPskfsHD68k4Z92gRCT_q6BXfikRwE,7660
43
43
  ScriptCollection/TFCPS/Flutter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
44
  ScriptCollection/TFCPS/Go/TFCPS_CodeUnitSpecific_Go.py,sha256=kyx26AnT1-LySFA46wfJ9yZUKYdMWTD0U2XZfSQbuB0,3497
45
45
  ScriptCollection/TFCPS/Go/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
- ScriptCollection/TFCPS/NodeJS/TFCPS_CodeUnitSpecific_NodeJS.py,sha256=GQLE6FeR-XNRlLDwionndM-oGLPIbgNhSAx5rc3nnDY,12900
46
+ ScriptCollection/TFCPS/Maven/TFCPS_CodeUnitSpecific_Maven.py,sha256=nwlofbDhKmFdOZ0Gt8AXqoEl8u-5qfoh9URGYbMJ9C4,1695
47
+ ScriptCollection/TFCPS/Maven/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
+ ScriptCollection/TFCPS/NodeJS/TFCPS_CodeUnitSpecific_NodeJS.py,sha256=57I7xbLtCtH-Edt1QKCSXF7wnGyAhbGMdghD_VFZIIY,13184
47
49
  ScriptCollection/TFCPS/NodeJS/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
50
  ScriptCollection/TFCPS/Python/TFCPS_CodeUnitSpecific_Python.py,sha256=9XK7XnbeOnq_4siVoWovogStoKFiZLhGh3C_f2YaznI,13621
49
51
  ScriptCollection/TFCPS/Python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
50
- scriptcollection-4.2.76.dist-info/METADATA,sha256=ssdr0yn_g2LJd7XN-POY7xS0IFzHqBKwpQG5hgaXFeo,7691
51
- scriptcollection-4.2.76.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
52
- scriptcollection-4.2.76.dist-info/entry_points.txt,sha256=27XwAJEcaMEc1be0Ec1vKHCbiU4Ziu8jKL-SqsrYOIQ,4680
53
- scriptcollection-4.2.76.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
54
- scriptcollection-4.2.76.dist-info/RECORD,,
52
+ ScriptCollection/TFCPS/Rust/TFCPS_CodeUnitSpecific_Rust.py,sha256=S_9g9IliQzBBqTQquYj6gI1E3OlGfGZsxXw-mSEe-iA,1690
53
+ ScriptCollection/TFCPS/Rust/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
+ scriptcollection-4.2.78.dist-info/METADATA,sha256=wc5MdwqJz28QC9dQL-k7Mz-J9bv1OucsY0MKKgOAAog,7691
55
+ scriptcollection-4.2.78.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
56
+ scriptcollection-4.2.78.dist-info/entry_points.txt,sha256=27XwAJEcaMEc1be0Ec1vKHCbiU4Ziu8jKL-SqsrYOIQ,4680
57
+ scriptcollection-4.2.78.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
58
+ scriptcollection-4.2.78.dist-info/RECORD,,