systemlink-cli 1.13.11__tar.gz → 1.13.13__tar.gz
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.
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/PKG-INFO +2 -2
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/pyproject.toml +2 -2
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/_version.py +1 -1
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/utils.py +62 -7
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/LICENSE +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/dff-editor/editor.js +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/dff-editor/index.html +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/__init__.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/__main__.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/asset_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/cli_formatters.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/cli_utils.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/comment_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/completion_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/config.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/config_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/dataframe_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/dff_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/dff_decorators.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/example_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/example_loader.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/example_provisioner.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/README.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/_schema/schema-v1.0.json +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/demo-complete-workflow/README.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/demo-complete-workflow/config.yaml +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/demo-test-plans/README.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/demo-test-plans/config.yaml +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/exercise-5-1-parametric-insights/README.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/exercise-5-1-parametric-insights/config.yaml +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/exercise-7-1-test-plans/README.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/exercise-7-1-test-plans/config.yaml +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/spec-compliance-notebooks/README.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/spec-compliance-notebooks/config.yaml +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/spec-compliance-notebooks/notebooks/SpecAnalysis_ComplianceCalculation.ipynb +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/spec-compliance-notebooks/notebooks/SpecComplianceCalculation.ipynb +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/spec-compliance-notebooks/notebooks/SpecfileExtractionAndIngestion.ipynb +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/spec-compliance-notebooks/spec_template.xlsx +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/feed_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/file_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/function_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/function_templates.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/main.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/mcp_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/mcp_reachability.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/mcp_server.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/notebook_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/platform.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/policy_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/policy_utils.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/profiles.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/response_handlers.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/rich_output.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/routine_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skill_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/nipkg-file-package/SKILL.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/slcli/SKILL.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/slcli/references/analysis-recipes.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/slcli/references/commands.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/slcli/references/datasheet-workflow.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/slcli/references/filtering.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/slcli/references/routine-examples.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/slcli/references/troubleshooting.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/systemlink-job-debugging/SKILL.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/systemlink-notebook/SKILL.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/systemlink-notebook/references/interfaces.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/systemlink-notebook/references/notebook-patterns.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/systemlink-python-test/SKILL.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/systemlink-webapp/SKILL.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/systemlink-webapp/references/angular-ui-packages.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/systemlink-webapp/references/deployment.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/systemlink-webapp/references/layout-patterns.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/systemlink-webapp/references/nimble-angular.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/systemlink-webapp/references/systemlink-services.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/systemlink-webapp/references/troubleshooting.md +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/spec_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/ssl_trust.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/state_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/system_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/system_query_utils.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/table_utils.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/tag_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/templates_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/testmonitor_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/universal_handlers.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/user_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/web_editor.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/webapp_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/workflow_preview.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/workflows_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/workitem_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/workspace_click.py +0 -0
- {systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/workspace_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: systemlink-cli
|
|
3
|
-
Version: 1.13.
|
|
3
|
+
Version: 1.13.13
|
|
4
4
|
Summary: SystemLink Integrator CLI - cross-platform CLI for SystemLink workflows and templates.
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Author: Fred Visser
|
|
@@ -18,7 +18,7 @@ Requires-Dist: pygments (>=2.20.0)
|
|
|
18
18
|
Requires-Dist: pyyaml (>=6.0.3,<7.0.0)
|
|
19
19
|
Requires-Dist: questionary (>=2.1.1,<3.0.0)
|
|
20
20
|
Requires-Dist: requests (>=2.32.4,<3.0.0)
|
|
21
|
-
Requires-Dist: rich (>=
|
|
21
|
+
Requires-Dist: rich (>=15,<16)
|
|
22
22
|
Requires-Dist: rich-click (>=1.8,<2)
|
|
23
23
|
Requires-Dist: tabulate (>=0.10.0,<0.11.0)
|
|
24
24
|
Requires-Dist: truststore (>=0.9,<0.11)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "systemlink-cli"
|
|
3
|
-
version = "1.13.
|
|
3
|
+
version = "1.13.13"
|
|
4
4
|
description = "SystemLink Integrator CLI - cross-platform CLI for SystemLink workflows and templates."
|
|
5
5
|
authors = ["Fred Visser <fred.visser@emerson.com>"]
|
|
6
6
|
packages = [{ include = "slcli" }]
|
|
@@ -38,7 +38,7 @@ watchdog = "^6.0.0"
|
|
|
38
38
|
pyyaml = "^6.0.3"
|
|
39
39
|
questionary = "^2.1.1"
|
|
40
40
|
packaging = ">=21.0"
|
|
41
|
-
rich = ">=
|
|
41
|
+
rich = ">=15,<16"
|
|
42
42
|
rich-click = ">=1.8,<2"
|
|
43
43
|
cryptography = ">=46.0.7"
|
|
44
44
|
pygments = ">=2.20.0"
|
|
@@ -65,24 +65,79 @@ def check_readonly_mode(operation: str = "this operation") -> None:
|
|
|
65
65
|
sys.exit(ExitCodes.PERMISSION_DENIED)
|
|
66
66
|
|
|
67
67
|
|
|
68
|
+
def _extract_response_error_message(exc: Exception) -> Optional[str]:
|
|
69
|
+
"""Extract a human-readable error message from an HTTP error response body.
|
|
70
|
+
|
|
71
|
+
Attempts to parse the response JSON and extract the error message from
|
|
72
|
+
common SystemLink error formats (e.g., ``{"error": {"message": "..."}}``)
|
|
73
|
+
or a top-level ``"message"`` field.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
exc: The exception, expected to be a ``requests.HTTPError`` with a response.
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
The extracted message string, or ``None`` if unavailable.
|
|
80
|
+
"""
|
|
81
|
+
response = getattr(exc, "response", None)
|
|
82
|
+
if response is None:
|
|
83
|
+
return None
|
|
84
|
+
try:
|
|
85
|
+
body = response.json()
|
|
86
|
+
except (ValueError, AttributeError):
|
|
87
|
+
return None
|
|
88
|
+
|
|
89
|
+
# SystemLink standard: {"error": {"message": "..."}}
|
|
90
|
+
error_obj = body.get("error") if isinstance(body, dict) else None
|
|
91
|
+
if isinstance(error_obj, dict):
|
|
92
|
+
msg = error_obj.get("message")
|
|
93
|
+
if msg:
|
|
94
|
+
return str(msg)
|
|
95
|
+
|
|
96
|
+
# Fallback: top-level {"message": "..."}
|
|
97
|
+
if isinstance(body, dict):
|
|
98
|
+
msg = body.get("message")
|
|
99
|
+
if msg:
|
|
100
|
+
return str(msg)
|
|
101
|
+
|
|
102
|
+
return None
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
def _extract_response_status_code(exc: Exception) -> Optional[int]:
|
|
106
|
+
"""Extract the HTTP status code from an exception response, if present."""
|
|
107
|
+
response = getattr(exc, "response", None)
|
|
108
|
+
status_code = getattr(response, "status_code", None)
|
|
109
|
+
return status_code if isinstance(status_code, int) else None
|
|
110
|
+
|
|
111
|
+
|
|
68
112
|
def handle_api_error(exc: Exception) -> None:
|
|
69
113
|
"""Handle API errors with appropriate exit codes and consistent formatting.
|
|
70
114
|
|
|
115
|
+
When the exception originates from an HTTP response that contains a JSON
|
|
116
|
+
error body, the server-provided message is displayed instead of the generic
|
|
117
|
+
HTTP status line so that users get actionable feedback.
|
|
118
|
+
|
|
71
119
|
Args:
|
|
72
120
|
exc: The exception to handle
|
|
73
121
|
"""
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
122
|
+
# Try to get a detailed message from the response body first
|
|
123
|
+
detail = _extract_response_error_message(exc)
|
|
124
|
+
display_msg = detail if detail else str(exc)
|
|
125
|
+
status_code = _extract_response_status_code(exc)
|
|
126
|
+
|
|
127
|
+
error_msg = display_msg.lower()
|
|
128
|
+
if status_code == 404 or "not found" in error_msg:
|
|
129
|
+
click.echo(f"✗ Resource not found: {display_msg}", err=True)
|
|
77
130
|
sys.exit(ExitCodes.NOT_FOUND)
|
|
78
|
-
elif
|
|
79
|
-
|
|
131
|
+
elif status_code in (401, 403) or (
|
|
132
|
+
"permission" in error_msg or "unauthorized" in error_msg or "forbidden" in error_msg
|
|
133
|
+
):
|
|
134
|
+
click.echo(f"✗ Permission denied: {display_msg}", err=True)
|
|
80
135
|
sys.exit(ExitCodes.PERMISSION_DENIED)
|
|
81
136
|
elif "network" in error_msg or "connection" in error_msg:
|
|
82
|
-
click.echo(f"✗ Network error: {
|
|
137
|
+
click.echo(f"✗ Network error: {display_msg}", err=True)
|
|
83
138
|
sys.exit(ExitCodes.NETWORK_ERROR)
|
|
84
139
|
else:
|
|
85
|
-
click.echo(f"✗ Error: {
|
|
140
|
+
click.echo(f"✗ Error: {display_msg}", err=True)
|
|
86
141
|
sys.exit(ExitCodes.GENERAL_ERROR)
|
|
87
142
|
|
|
88
143
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/demo-complete-workflow/README.md
RENAMED
|
File without changes
|
{systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/demo-complete-workflow/config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/demo-test-plans/config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/exercise-7-1-test-plans/README.md
RENAMED
|
File without changes
|
{systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/exercise-7-1-test-plans/config.yaml
RENAMED
|
File without changes
|
{systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/examples/spec-compliance-notebooks/README.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/slcli/references/analysis-recipes.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/slcli/references/filtering.md
RENAMED
|
File without changes
|
{systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/slcli/references/routine-examples.md
RENAMED
|
File without changes
|
{systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/slcli/references/troubleshooting.md
RENAMED
|
File without changes
|
{systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/systemlink-job-debugging/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{systemlink_cli-1.13.11 → systemlink_cli-1.13.13}/slcli/skills/systemlink-python-test/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|