systemlink-cli 1.3.1__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.
- slcli/__init__.py +1 -0
- slcli/__main__.py +23 -0
- slcli/_version.py +4 -0
- slcli/asset_click.py +1289 -0
- slcli/cli_formatters.py +218 -0
- slcli/cli_utils.py +504 -0
- slcli/comment_click.py +602 -0
- slcli/completion_click.py +418 -0
- slcli/config.py +81 -0
- slcli/config_click.py +498 -0
- slcli/dff_click.py +979 -0
- slcli/dff_decorators.py +24 -0
- slcli/example_click.py +404 -0
- slcli/example_loader.py +274 -0
- slcli/example_provisioner.py +2777 -0
- slcli/examples/README.md +134 -0
- slcli/examples/_schema/schema-v1.0.json +169 -0
- slcli/examples/demo-complete-workflow/README.md +323 -0
- slcli/examples/demo-complete-workflow/config.yaml +638 -0
- slcli/examples/demo-test-plans/README.md +132 -0
- slcli/examples/demo-test-plans/config.yaml +154 -0
- slcli/examples/exercise-5-1-parametric-insights/README.md +101 -0
- slcli/examples/exercise-5-1-parametric-insights/config.yaml +1589 -0
- slcli/examples/exercise-7-1-test-plans/README.md +93 -0
- slcli/examples/exercise-7-1-test-plans/config.yaml +323 -0
- slcli/examples/spec-compliance-notebooks/README.md +140 -0
- slcli/examples/spec-compliance-notebooks/config.yaml +112 -0
- slcli/examples/spec-compliance-notebooks/notebooks/SpecAnalysis_ComplianceCalculation.ipynb +1553 -0
- slcli/examples/spec-compliance-notebooks/notebooks/SpecComplianceCalculation.ipynb +1577 -0
- slcli/examples/spec-compliance-notebooks/notebooks/SpecfileExtractionAndIngestion.ipynb +912 -0
- slcli/examples/spec-compliance-notebooks/spec_template.xlsx +0 -0
- slcli/feed_click.py +892 -0
- slcli/file_click.py +932 -0
- slcli/function_click.py +1400 -0
- slcli/function_templates.py +85 -0
- slcli/main.py +406 -0
- slcli/mcp_click.py +269 -0
- slcli/mcp_server.py +748 -0
- slcli/notebook_click.py +1770 -0
- slcli/platform.py +345 -0
- slcli/policy_click.py +679 -0
- slcli/policy_utils.py +411 -0
- slcli/profiles.py +411 -0
- slcli/response_handlers.py +359 -0
- slcli/routine_click.py +763 -0
- slcli/skill_click.py +253 -0
- slcli/skills/slcli/SKILL.md +713 -0
- slcli/skills/slcli/references/analysis-recipes.md +474 -0
- slcli/skills/slcli/references/filtering.md +236 -0
- slcli/skills/systemlink-webapp/SKILL.md +744 -0
- slcli/skills/systemlink-webapp/references/deployment.md +123 -0
- slcli/skills/systemlink-webapp/references/nimble-angular.md +380 -0
- slcli/skills/systemlink-webapp/references/systemlink-services.md +192 -0
- slcli/ssl_trust.py +93 -0
- slcli/system_click.py +2216 -0
- slcli/table_utils.py +124 -0
- slcli/tag_click.py +794 -0
- slcli/templates_click.py +599 -0
- slcli/testmonitor_click.py +1667 -0
- slcli/universal_handlers.py +305 -0
- slcli/user_click.py +1218 -0
- slcli/utils.py +832 -0
- slcli/web_editor.py +295 -0
- slcli/webapp_click.py +981 -0
- slcli/workflow_preview.py +287 -0
- slcli/workflows_click.py +988 -0
- slcli/workitem_click.py +2258 -0
- slcli/workspace_click.py +576 -0
- slcli/workspace_utils.py +206 -0
- systemlink_cli-1.3.1.dist-info/METADATA +20 -0
- systemlink_cli-1.3.1.dist-info/RECORD +74 -0
- systemlink_cli-1.3.1.dist-info/WHEEL +4 -0
- systemlink_cli-1.3.1.dist-info/entry_points.txt +7 -0
- systemlink_cli-1.3.1.dist-info/licenses/LICENSE +21 -0
slcli/workspace_utils.py
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
"""Workspace utilities for CLI commands."""
|
|
2
|
+
|
|
3
|
+
from typing import Dict, List, Any, Optional, Callable
|
|
4
|
+
|
|
5
|
+
from .profiles import get_default_workspace
|
|
6
|
+
from .utils import get_workspace_map
|
|
7
|
+
|
|
8
|
+
# Sentinel value: pass --workspace all to bypass the profile default and show
|
|
9
|
+
# resources from every workspace.
|
|
10
|
+
WORKSPACE_ALL = "all"
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def get_effective_workspace(workspace: Optional[str]) -> Optional[str]:
|
|
14
|
+
"""Return the effective workspace: explicit value or profile default.
|
|
15
|
+
|
|
16
|
+
Use this before any workspace guard to ensure the profile's default
|
|
17
|
+
workspace is applied when the user omits ``--workspace``.
|
|
18
|
+
|
|
19
|
+
Passing ``"all"`` as the workspace sentinel explicitly disables both the
|
|
20
|
+
profile default and any resulting filter, returning ``None`` so that
|
|
21
|
+
downstream code shows resources from all workspaces.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
workspace: Explicitly provided workspace name/ID, ``"all"`` to
|
|
25
|
+
disable filtering, or None to fall back to the profile default.
|
|
26
|
+
|
|
27
|
+
Returns:
|
|
28
|
+
The workspace to use, or None if no filter should be applied.
|
|
29
|
+
"""
|
|
30
|
+
if workspace and workspace.lower() == WORKSPACE_ALL:
|
|
31
|
+
return None
|
|
32
|
+
return workspace or get_default_workspace()
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def resolve_workspace_filter(workspace: str, workspace_map: Dict[str, str]) -> str:
|
|
36
|
+
"""Resolve workspace name to ID for filtering.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
workspace: Workspace name or ID to resolve
|
|
40
|
+
workspace_map: Dictionary mapping workspace IDs to names
|
|
41
|
+
|
|
42
|
+
Returns:
|
|
43
|
+
Workspace ID (either the original if it was an ID, or resolved from name)
|
|
44
|
+
"""
|
|
45
|
+
if not workspace:
|
|
46
|
+
return workspace
|
|
47
|
+
|
|
48
|
+
# Check if it's already an ID (exists as key in workspace_map)
|
|
49
|
+
if workspace in workspace_map:
|
|
50
|
+
return workspace
|
|
51
|
+
|
|
52
|
+
# Try to find by name (case-insensitive)
|
|
53
|
+
for ws_id, ws_name in workspace_map.items():
|
|
54
|
+
if ws_name and workspace.lower() == ws_name.lower():
|
|
55
|
+
return ws_id
|
|
56
|
+
|
|
57
|
+
# Return original if no match found
|
|
58
|
+
return workspace
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def filter_by_workspace(
|
|
62
|
+
items: List[Dict[str, Any]],
|
|
63
|
+
workspace: str,
|
|
64
|
+
workspace_map: Dict[str, str],
|
|
65
|
+
workspace_field: str = "workspace",
|
|
66
|
+
) -> List[Dict[str, Any]]:
|
|
67
|
+
"""Filter items by workspace name or ID.
|
|
68
|
+
|
|
69
|
+
Falls back to the active profile's default workspace when no explicit
|
|
70
|
+
workspace is provided.
|
|
71
|
+
|
|
72
|
+
Args:
|
|
73
|
+
items: List of items to filter
|
|
74
|
+
workspace: Workspace name or ID to filter by
|
|
75
|
+
workspace_map: Dictionary mapping workspace IDs to names
|
|
76
|
+
workspace_field: Field name in items that contains workspace ID
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
Filtered list of items
|
|
80
|
+
"""
|
|
81
|
+
if not workspace:
|
|
82
|
+
workspace = get_default_workspace() or ""
|
|
83
|
+
if not workspace:
|
|
84
|
+
return items
|
|
85
|
+
|
|
86
|
+
filtered_items = []
|
|
87
|
+
for item in items:
|
|
88
|
+
item_workspace = item.get(workspace_field, "")
|
|
89
|
+
item_workspace_name = workspace_map.get(item_workspace, item_workspace)
|
|
90
|
+
|
|
91
|
+
# Match by ID or name (case-insensitive)
|
|
92
|
+
if workspace.lower() == item_workspace.lower() or (
|
|
93
|
+
item_workspace_name and workspace.lower() == item_workspace_name.lower()
|
|
94
|
+
):
|
|
95
|
+
filtered_items.append(item)
|
|
96
|
+
|
|
97
|
+
return filtered_items
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def resolve_workspace_id(workspace: Optional[str]) -> str:
|
|
101
|
+
"""Resolve workspace name to ID with error handling.
|
|
102
|
+
|
|
103
|
+
Falls back to the active profile's default workspace when none is provided.
|
|
104
|
+
|
|
105
|
+
Args:
|
|
106
|
+
workspace: Workspace name or ID to resolve
|
|
107
|
+
|
|
108
|
+
Returns:
|
|
109
|
+
Resolved workspace ID
|
|
110
|
+
"""
|
|
111
|
+
if not workspace:
|
|
112
|
+
workspace = get_default_workspace()
|
|
113
|
+
if not workspace:
|
|
114
|
+
return ""
|
|
115
|
+
|
|
116
|
+
try:
|
|
117
|
+
workspace_map = get_workspace_map()
|
|
118
|
+
return resolve_workspace_filter(workspace, workspace_map)
|
|
119
|
+
except Exception:
|
|
120
|
+
return workspace
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def get_workspace_display_name(
|
|
124
|
+
workspace_id: str, workspace_map: Optional[Dict[str, str]] = None
|
|
125
|
+
) -> str:
|
|
126
|
+
"""Get display name for a workspace ID.
|
|
127
|
+
|
|
128
|
+
Args:
|
|
129
|
+
workspace_id: Workspace ID to get display name for
|
|
130
|
+
workspace_map: Optional workspace map, will fetch if not provided
|
|
131
|
+
|
|
132
|
+
Returns:
|
|
133
|
+
Workspace display name (name if available, otherwise ID)
|
|
134
|
+
"""
|
|
135
|
+
if not workspace_map:
|
|
136
|
+
try:
|
|
137
|
+
workspace_map = get_workspace_map()
|
|
138
|
+
except Exception:
|
|
139
|
+
return workspace_id or ""
|
|
140
|
+
|
|
141
|
+
return workspace_map.get(workspace_id, workspace_id) or ""
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
class WorkspaceFormatter:
|
|
145
|
+
"""Utility class for formatting workspace-related data."""
|
|
146
|
+
|
|
147
|
+
@staticmethod
|
|
148
|
+
def create_workspace_row_formatter(
|
|
149
|
+
workspace_map: Dict[str, str], name_field: str = "name", id_field: str = "id"
|
|
150
|
+
) -> Callable[[Dict[str, Any]], List[str]]:
|
|
151
|
+
"""Create a row formatter function for workspace-based tables."""
|
|
152
|
+
|
|
153
|
+
def formatter(item: Dict[str, Any]) -> List[str]:
|
|
154
|
+
workspace_id = item.get("workspace", "")
|
|
155
|
+
workspace_name = workspace_map.get(workspace_id, workspace_id) or ""
|
|
156
|
+
name = item.get(name_field, "")
|
|
157
|
+
item_id = item.get(id_field, "")
|
|
158
|
+
return [workspace_name, name, item_id]
|
|
159
|
+
|
|
160
|
+
return formatter
|
|
161
|
+
|
|
162
|
+
@staticmethod
|
|
163
|
+
def create_config_row_formatter(
|
|
164
|
+
workspace_map: Dict[str, str],
|
|
165
|
+
) -> Callable[[Dict[str, Any]], List[str]]:
|
|
166
|
+
"""Create a row formatter for DFF configurations."""
|
|
167
|
+
|
|
168
|
+
def formatter(config: Dict[str, Any]) -> List[str]:
|
|
169
|
+
workspace_id = config.get("workspace", "")
|
|
170
|
+
workspace_name = workspace_map.get(workspace_id, workspace_id) or ""
|
|
171
|
+
name = config.get("name", "")
|
|
172
|
+
config_id = config.get("id", "")
|
|
173
|
+
return [workspace_name, name, config_id]
|
|
174
|
+
|
|
175
|
+
return formatter
|
|
176
|
+
|
|
177
|
+
@staticmethod
|
|
178
|
+
def create_group_field_row_formatter(
|
|
179
|
+
workspace_map: Dict[str, str],
|
|
180
|
+
) -> Callable[[Dict[str, Any]], List[str]]:
|
|
181
|
+
"""Create a row formatter for DFF groups and fields."""
|
|
182
|
+
|
|
183
|
+
def formatter(item: Dict[str, Any]) -> List[str]:
|
|
184
|
+
workspace_id = item.get("workspace", "")
|
|
185
|
+
workspace_name = workspace_map.get(workspace_id, workspace_id) or ""
|
|
186
|
+
name = item.get("displayText", item.get("name", ""))
|
|
187
|
+
key = item.get("key", "")
|
|
188
|
+
return [workspace_name, name, key]
|
|
189
|
+
|
|
190
|
+
return formatter
|
|
191
|
+
|
|
192
|
+
@staticmethod
|
|
193
|
+
def create_table_row_formatter(
|
|
194
|
+
workspace_map: Dict[str, str],
|
|
195
|
+
) -> Callable[[Dict[str, Any]], List[str]]:
|
|
196
|
+
"""Create a row formatter for DFF table properties."""
|
|
197
|
+
|
|
198
|
+
def formatter(table: Dict[str, Any]) -> List[str]:
|
|
199
|
+
workspace_id = table.get("workspace", "")
|
|
200
|
+
workspace_name = workspace_map.get(workspace_id, workspace_id) or ""
|
|
201
|
+
resource_type = table.get("resourceType", "")
|
|
202
|
+
resource_id = table.get("resourceId", "")
|
|
203
|
+
table_id = table.get("id", "")
|
|
204
|
+
return [workspace_name, resource_type, resource_id, table_id]
|
|
205
|
+
|
|
206
|
+
return formatter
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: systemlink-cli
|
|
3
|
+
Version: 1.3.1
|
|
4
|
+
Summary: SystemLink Integrator CLI - cross-platform CLI for SystemLink workflows and templates.
|
|
5
|
+
License-File: LICENSE
|
|
6
|
+
Author: Fred Visser
|
|
7
|
+
Author-email: fred.visser@emerson.com
|
|
8
|
+
Requires-Python: >=3.11.1,<3.15
|
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
13
|
+
Requires-Dist: click (>=7.1.2)
|
|
14
|
+
Requires-Dist: keyring (>=25.6.0,<26.0.0)
|
|
15
|
+
Requires-Dist: pyyaml (>=6.0.3,<7.0.0)
|
|
16
|
+
Requires-Dist: questionary (>=2.1.1,<3.0.0)
|
|
17
|
+
Requires-Dist: requests (>=2.32.4,<3.0.0)
|
|
18
|
+
Requires-Dist: tabulate (>=0.10.0,<0.11.0)
|
|
19
|
+
Requires-Dist: truststore (>=0.9,<0.11)
|
|
20
|
+
Requires-Dist: watchdog (>=6.0.0,<7.0.0)
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
slcli/__init__.py,sha256=ZRF050VsFgb4zeyyQzQINQ4eHFwEBBoUq-CPyziIB6g,66
|
|
2
|
+
slcli/__main__.py,sha256=wUlBlvYS3Tn4ipw9_7zMr2d1houRpNnALG0TxHg6xZg,829
|
|
3
|
+
slcli/_version.py,sha256=ZUcQaSXzn0J9kgWF9aJURzZIGTbWoe_0LnE5aDmprTI,113
|
|
4
|
+
slcli/asset_click.py,sha256=TEBbwvn2c6WxWHwZ3vKFjk7z3y5hgLjqnE3kFxE8Adw,44566
|
|
5
|
+
slcli/cli_formatters.py,sha256=ShrU2RbnQUEKhJ6ahWuv8c3zw7C-yg0o20i1opq9gZk,7275
|
|
6
|
+
slcli/cli_utils.py,sha256=-2gAnZP4HB0owDetMnjGU2djAnnMU3hTi4i_gaSPIsE,14331
|
|
7
|
+
slcli/comment_click.py,sha256=0lN2Ynxb_pOf3Q32JPjsdj6Ukwd7rcHqFreFtMmIrHA,20899
|
|
8
|
+
slcli/completion_click.py,sha256=dYip8Xp1q1mT20YT67jIOyTkpphmokA6MOO5AqoqUjw,13947
|
|
9
|
+
slcli/config.py,sha256=tdVP-1cvy6Qs2ThGXv4nPNa5AoqNu1SG6oOwgMJ6Yx0,2221
|
|
10
|
+
slcli/config_click.py,sha256=YLbWu-1TkfPw-UaWLwWyGihXLx6BKCtQmXeosbs37WY,18604
|
|
11
|
+
slcli/dff_click.py,sha256=r-6XotRF_V0Qdr-lvKlvPPfOm9tk_Q4MpJoo03u0YKE,37054
|
|
12
|
+
slcli/dff_decorators.py,sha256=o-QfzYjWGnJ45GevsI-6vAdODCotwv7OgFgXKO3FVqQ,714
|
|
13
|
+
slcli/example_click.py,sha256=J930D3_guQg1-sSqjtgK4IqTPvLD94xmLHCNLr9oLWY,14029
|
|
14
|
+
slcli/example_loader.py,sha256=nuoqCnfOgudfh53cKrl2QIZj8bq2VuPkHprM3T-nOGw,9595
|
|
15
|
+
slcli/example_provisioner.py,sha256=uko5w-DWask93u4-jCW19FpI_tbsQH_UuVb6hgojekc,117426
|
|
16
|
+
slcli/examples/README.md,sha256=YWSasMLP_sQoNerN-k6OhPgQkaoqa80o0pwP2y7R-t8,3836
|
|
17
|
+
slcli/examples/_schema/schema-v1.0.json,sha256=wP0dEHlBD6tXL5bw1-PIbtfZp76chFKuHFdKv-ASHYk,4157
|
|
18
|
+
slcli/examples/demo-complete-workflow/README.md,sha256=Y17_u7P_SkQJFWEODX_zekHdIApYaL_BabeApDxmYEo,11528
|
|
19
|
+
slcli/examples/demo-complete-workflow/config.yaml,sha256=sij-_pOTn9w8ZcdWU3DKKDXw6NloPyioGMA9bSDapMw,21539
|
|
20
|
+
slcli/examples/demo-test-plans/README.md,sha256=4cu7wdodHbEbkc_0udcwt8YKBbBYobD1HI2C73-wCH4,3243
|
|
21
|
+
slcli/examples/demo-test-plans/config.yaml,sha256=vLzYX1Rc_QXjjEj6UUkSw7fWxedr5ZEi8RwmxBOYkWQ,3817
|
|
22
|
+
slcli/examples/exercise-5-1-parametric-insights/README.md,sha256=DpZ8l5_gwE0qOnOBwgaBZvAlDkL-OYcupugsUaLtLdg,4780
|
|
23
|
+
slcli/examples/exercise-5-1-parametric-insights/config.yaml,sha256=RI7nmtlYPOHRfsG61nMeAYT_CTbFCEVa8rNoBZmG_94,53264
|
|
24
|
+
slcli/examples/exercise-7-1-test-plans/README.md,sha256=JHCBmK-IKX7n5xt9VOYhYz3GtL-VvJfFsAhIFt1ccZE,4225
|
|
25
|
+
slcli/examples/exercise-7-1-test-plans/config.yaml,sha256=kBwn2N5KnJEg_oeScYUtHhpBUcxcyxexwp9LzpUMink,11833
|
|
26
|
+
slcli/examples/spec-compliance-notebooks/README.md,sha256=YYH80RcHvqmNHKWtQ0QT2uBUnL0A3PGoIwfVhccB6LM,4584
|
|
27
|
+
slcli/examples/spec-compliance-notebooks/config.yaml,sha256=3kKchJ-rxxKmnQPcaK66bmfIxAmG44ajiyj-_TJaJh8,4493
|
|
28
|
+
slcli/examples/spec-compliance-notebooks/notebooks/SpecAnalysis_ComplianceCalculation.ipynb,sha256=fMWBF2Ec-HRcYwqhRaqRDjs5NcCrs5GQxrRS2PFVp2Y,63279
|
|
29
|
+
slcli/examples/spec-compliance-notebooks/notebooks/SpecComplianceCalculation.ipynb,sha256=BEW_ngIwDQ_X6ovCOpjXAYkq5U5sdcXxewMGJdfycLg,62544
|
|
30
|
+
slcli/examples/spec-compliance-notebooks/notebooks/SpecfileExtractionAndIngestion.ipynb,sha256=nhIRbiG_LfCEVe7S2eActnvlUIjTdOgfMxOpsVmpbOg,31836
|
|
31
|
+
slcli/examples/spec-compliance-notebooks/spec_template.xlsx,sha256=fLMzo1oTLVFZ1HM5hqoCPhs_BIxppYM5ETVCgPZLGWg,15675
|
|
32
|
+
slcli/feed_click.py,sha256=3_InqD3hNbhvBpSnLn83nMs-6y3M_TNayJ3rPykxX4s,30443
|
|
33
|
+
slcli/file_click.py,sha256=1Wjyei7Z_0MpdDWlY11Na-ItgjZnjWJBXJIR6eepqGU,31042
|
|
34
|
+
slcli/function_click.py,sha256=EX-WUOkzsiSh6k55LDZNve3pJeGERX9CcI_zSoLBbBw,53447
|
|
35
|
+
slcli/function_templates.py,sha256=GfmsBF0KrsIp2rBiO9ha5UAHv0O9g7yr7xcA4l8vbi8,3371
|
|
36
|
+
slcli/main.py,sha256=feXndeNfH5_GceJ05b1aRQn_GN8nmqU4tlQFlB1TSAU,16019
|
|
37
|
+
slcli/mcp_click.py,sha256=HErTUYLRFvEvMvVaLV6ZGeYkggQqGWPO0I2tdZortK0,8904
|
|
38
|
+
slcli/mcp_server.py,sha256=e9LQTkkWxrYnHOSX5YoE3oRsA8dI4ALn8MkKb1R0fiQ,26972
|
|
39
|
+
slcli/notebook_click.py,sha256=J767OROBvtgN0cQfLGXYw1_Wpsgy54pV_g3Lc4wueGk,69389
|
|
40
|
+
slcli/platform.py,sha256=Vo5QApX8fipyX44T5lxTDIWENpVxdCGhEunQ7PnftmY,11255
|
|
41
|
+
slcli/policy_click.py,sha256=8pSrrlX1yKbN6buWqwVnCL_8ROn2hxFMmOOTnDNRPqg,23523
|
|
42
|
+
slcli/policy_utils.py,sha256=awi-vh40XO9m_bTotdJ3WR7MIV_gPLlTPgEB8eH1oyU,13085
|
|
43
|
+
slcli/profiles.py,sha256=NjhF747QAO_vfQs-etUYdn379xN99LsM_gx8BmCsUoU,13114
|
|
44
|
+
slcli/response_handlers.py,sha256=8nURxCwRgBMgED2AfM1GglcjUcceanBg4yQ-tPTUIek,12812
|
|
45
|
+
slcli/routine_click.py,sha256=9XpoHHZk0l_i--IxPA8S60yepQ1HfqezYwGu3Wvm8_g,25298
|
|
46
|
+
slcli/skill_click.py,sha256=yFj2_NRmhOnYkGgEjkoONlANlXELDRvgJJLR7Kxzo-I,8602
|
|
47
|
+
slcli/skills/slcli/SKILL.md,sha256=QmUvMC9FCfJYruHX_9SIOllixwU6ZCe3HLDcCj4Z2ts,28839
|
|
48
|
+
slcli/skills/slcli/references/analysis-recipes.md,sha256=p-XBGs36AV11LVOleuq7m3jpoP7OQJz8s7yIWOitBhc,15596
|
|
49
|
+
slcli/skills/slcli/references/filtering.md,sha256=2_Q8_3_HG3vhTbtA9QAB54B81VRl3iDhb5Yk3VW_9r4,7493
|
|
50
|
+
slcli/skills/systemlink-webapp/SKILL.md,sha256=DXziaj1_2xy5xJNfAxutXS3wEojdB7dlgULJgmxyA9s,31072
|
|
51
|
+
slcli/skills/systemlink-webapp/references/deployment.md,sha256=LkhZ_4wolp6kL11PcL1JxR6LnP-i6l1AWR2Z6bhBOa8,3003
|
|
52
|
+
slcli/skills/systemlink-webapp/references/nimble-angular.md,sha256=EMN0XSTxA9S81R51F0G5-857JC_j8Ka6wP5CkaLIfaA,9540
|
|
53
|
+
slcli/skills/systemlink-webapp/references/systemlink-services.md,sha256=LSv2l1tv8gChHXOrZ0k4vLwQVN9ILON_Fn_zD98pVz0,5119
|
|
54
|
+
slcli/ssl_trust.py,sha256=y882ii01wrDYtWZLIVgrDGDDMYI0Km7EIjNJffRkZiY,3696
|
|
55
|
+
slcli/system_click.py,sha256=Z1lUcfJoFX2XxHaYr2QFxhDvMtaZtA4bIH8N3ZgghxY,76881
|
|
56
|
+
slcli/table_utils.py,sha256=pEBQv4YyiyE9qT1HkyK2ZqPE3KlZlNnNgrySCtWRTFA,4203
|
|
57
|
+
slcli/tag_click.py,sha256=4SpSsFCZBVYYEPFKFmTP6TNnSUnO43tEYTEwPEjR5NQ,26350
|
|
58
|
+
slcli/templates_click.py,sha256=_cAQQxTGyOupofM31cIlF6rE1r4_SZJcgLqO0IgkrRk,23025
|
|
59
|
+
slcli/testmonitor_click.py,sha256=5iHbYD4DVvH5oR-WrC1jOYCgFkYLKC1X8h9F7Sdl_uU,61524
|
|
60
|
+
slcli/universal_handlers.py,sha256=bcmuDXWJP55urRxGB6xv8rQBzVaJLeQx5bSgZ_JlzJw,11670
|
|
61
|
+
slcli/user_click.py,sha256=alsfhvmWVYd20zJlGrxbvmN3NPMwlLnRfJC4iBSQC9Q,46763
|
|
62
|
+
slcli/utils.py,sha256=G8rdh7jnXiEqZ14QZDXdyeHzpm62J5LPp2HhyCP3Zms,27107
|
|
63
|
+
slcli/web_editor.py,sha256=f7ruCa21pnWk42Nx4nct8MZ6p-59zWWX5PwyseR2LFA,11204
|
|
64
|
+
slcli/webapp_click.py,sha256=fa2cfkWcI4SglccwLI89yYuubER8uXJ4SGEw7LcurHM,37253
|
|
65
|
+
slcli/workflow_preview.py,sha256=yXvIC5HtpCC23AxeK8O3-gvZSrAT66qQegBuq95uJjs,12453
|
|
66
|
+
slcli/workflows_click.py,sha256=yKm_XdixjBcdLqHLpKFdrHV-XXDJlmN9Epko7mc49KM,40224
|
|
67
|
+
slcli/workitem_click.py,sha256=YOdkWhLfqGzlAV2j3aZvc81ZEUtX5KBQ6UAhmjYzRsc,87540
|
|
68
|
+
slcli/workspace_click.py,sha256=JYv3vEa-4Jfqkssp2DHuaTziNetMMdPjOVCb7ZFY5AM,21477
|
|
69
|
+
slcli/workspace_utils.py,sha256=7QOtotmv3ghJs6a0fDQVojKxrBKPeq_GtE4F1SmZKnM,6872
|
|
70
|
+
systemlink_cli-1.3.1.dist-info/METADATA,sha256=hDmVJMnQEkvlAd1YDGKhH-QrxKcAwFmFOoRMJrkioGc,789
|
|
71
|
+
systemlink_cli-1.3.1.dist-info/WHEEL,sha256=kJCRJT_g0adfAJzTx2GUMmS80rTJIVHRCfG0DQgLq3o,88
|
|
72
|
+
systemlink_cli-1.3.1.dist-info/entry_points.txt,sha256=bmnzCceRleTC8p8tS_Iizn_7D5p0sGpOLdk2bnoDELQ,191
|
|
73
|
+
systemlink_cli-1.3.1.dist-info/licenses/LICENSE,sha256=ioLAEBMHywwQkOr14pBIc7nenmWrc-bgcMrqsB_Uvq8,1077
|
|
74
|
+
systemlink_cli-1.3.1.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 National Instruments
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|