systemlink-cli 1.13.16__tar.gz → 1.13.17__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.16 → systemlink_cli-1.13.17}/PKG-INFO +1 -1
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/pyproject.toml +1 -1
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/_version.py +1 -1
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/config_click.py +28 -62
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/LICENSE +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/dff-editor/editor.js +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/dff-editor/index.html +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/__init__.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/__main__.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/asset_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/cli_formatters.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/cli_utils.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/comment_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/completion_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/config.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/dataframe_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/dff_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/dff_decorators.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/example_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/example_loader.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/example_provisioner.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/README.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/_schema/schema-v1.0.json +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/demo-complete-workflow/README.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/demo-complete-workflow/config.yaml +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/demo-test-plans/README.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/demo-test-plans/config.yaml +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/exercise-5-1-parametric-insights/README.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/exercise-5-1-parametric-insights/config.yaml +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/exercise-7-1-test-plans/README.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/exercise-7-1-test-plans/config.yaml +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/spec-compliance-notebooks/README.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/spec-compliance-notebooks/config.yaml +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/spec-compliance-notebooks/notebooks/SpecAnalysis_ComplianceCalculation.ipynb +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/spec-compliance-notebooks/notebooks/SpecComplianceCalculation.ipynb +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/spec-compliance-notebooks/notebooks/SpecfileExtractionAndIngestion.ipynb +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/spec-compliance-notebooks/spec_template.xlsx +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/feed_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/file_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/function_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/function_templates.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/main.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/mcp_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/mcp_reachability.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/mcp_server.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/notebook_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/platform.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/policy_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/policy_utils.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/profiles.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/response_handlers.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/rich_output.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/routine_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skill_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/nipkg-file-package/SKILL.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/slcli/SKILL.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/slcli/references/analysis-recipes.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/slcli/references/commands.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/slcli/references/datasheet-workflow.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/slcli/references/filtering.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/slcli/references/routine-examples.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/slcli/references/troubleshooting.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-job-debugging/SKILL.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-notebook/SKILL.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-notebook/references/interfaces.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-notebook/references/notebook-patterns.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-python-test/SKILL.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-webapp/SKILL.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-webapp/references/angular-ui-packages.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-webapp/references/deployment.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-webapp/references/layout-patterns.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-webapp/references/nimble-angular.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-webapp/references/systemlink-services.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-webapp/references/troubleshooting.md +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/spec_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/ssl_trust.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/state_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/system_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/system_query_utils.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/table_utils.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/tag_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/templates_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/testmonitor_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/universal_handlers.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/user_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/utils.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/web_editor.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/webapp_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/workflow_preview.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/workflows_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/workitem_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/workspace_click.py +0 -0
- {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/workspace_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "systemlink-cli"
|
|
3
|
-
version = "1.13.
|
|
3
|
+
version = "1.13.17"
|
|
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" }]
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import getpass
|
|
4
4
|
import json
|
|
5
|
+
import os
|
|
5
6
|
import re
|
|
6
7
|
import sys
|
|
7
8
|
from typing import Any, Optional
|
|
@@ -18,17 +19,15 @@ from .platform import (
|
|
|
18
19
|
from .profiles import ProfileConfig, Profile, check_config_file_permissions
|
|
19
20
|
from .rich_output import render_table
|
|
20
21
|
from .table_utils import output_formatted_list
|
|
21
|
-
from .utils import
|
|
22
|
-
ExitCodes,
|
|
23
|
-
describe_config_source,
|
|
24
|
-
get_api_key_resolution,
|
|
25
|
-
get_base_url_resolution,
|
|
26
|
-
get_web_url_resolution,
|
|
27
|
-
source_is_env,
|
|
28
|
-
)
|
|
22
|
+
from .utils import ExitCodes
|
|
29
23
|
|
|
30
24
|
API_KEY_LENGTH = 42
|
|
31
25
|
API_KEY_PATTERN = re.compile(rf"^[A-Za-z0-9_-]{{{API_KEY_LENGTH}}}$")
|
|
26
|
+
ENV_OVERRIDE_FIELDS = (
|
|
27
|
+
("API URL", ("SLCLI_API_URL", "SYSTEMLINK_API_URL")),
|
|
28
|
+
("API Key", ("SLCLI_API_KEY", "SYSTEMLINK_API_KEY")),
|
|
29
|
+
("Web URL", ("SLCLI_WEB_URL", "SYSTEMLINK_WEB_URL")),
|
|
30
|
+
)
|
|
32
31
|
|
|
33
32
|
|
|
34
33
|
def _exit_with_validation_error(message: str, exit_code: int = ExitCodes.INVALID_INPUT) -> None:
|
|
@@ -72,6 +71,15 @@ def _normalize_base_url(raw_url: str, label: str) -> str:
|
|
|
72
71
|
return normalized.rstrip("/")
|
|
73
72
|
|
|
74
73
|
|
|
74
|
+
def _get_active_env_overrides() -> list[str]:
|
|
75
|
+
"""Return config fields currently overridden by environment variables."""
|
|
76
|
+
active_overrides: list[str] = []
|
|
77
|
+
for label, env_names in ENV_OVERRIDE_FIELDS:
|
|
78
|
+
if any(os.environ.get(env_name) for env_name in env_names):
|
|
79
|
+
active_overrides.append(label)
|
|
80
|
+
return active_overrides
|
|
81
|
+
|
|
82
|
+
|
|
75
83
|
def _normalize_api_key(api_key: str) -> str:
|
|
76
84
|
"""Normalize and validate an API key before probing the server."""
|
|
77
85
|
normalized = api_key.strip()
|
|
@@ -376,40 +384,9 @@ def register_config_commands(cli: Any) -> None:
|
|
|
376
384
|
help="Show API keys in output (use with caution)",
|
|
377
385
|
)
|
|
378
386
|
def view(format: str, show_secrets: bool) -> None:
|
|
379
|
-
"""View the
|
|
387
|
+
"""View the stored configuration file values."""
|
|
380
388
|
cfg = ProfileConfig.load()
|
|
381
|
-
|
|
382
|
-
effective: dict[str, Any] = {}
|
|
383
|
-
env_overrides: list[str] = []
|
|
384
|
-
|
|
385
|
-
try:
|
|
386
|
-
api_url_resolution = get_base_url_resolution()
|
|
387
|
-
effective["api-url"] = api_url_resolution.value
|
|
388
|
-
effective["api-url-source"] = api_url_resolution.source
|
|
389
|
-
if source_is_env(api_url_resolution.source):
|
|
390
|
-
env_overrides.append("API URL")
|
|
391
|
-
except Exception:
|
|
392
|
-
pass
|
|
393
|
-
|
|
394
|
-
try:
|
|
395
|
-
api_key_resolution = get_api_key_resolution(emit_error=False)
|
|
396
|
-
effective["api-key-source"] = api_key_resolution.source
|
|
397
|
-
if source_is_env(api_key_resolution.source):
|
|
398
|
-
env_overrides.append("API Key")
|
|
399
|
-
except Exception:
|
|
400
|
-
pass
|
|
401
|
-
|
|
402
|
-
try:
|
|
403
|
-
web_url_resolution = get_web_url_resolution()
|
|
404
|
-
effective["web-url"] = web_url_resolution.value
|
|
405
|
-
effective["web-url-source"] = web_url_resolution.source
|
|
406
|
-
if source_is_env(web_url_resolution.source):
|
|
407
|
-
env_overrides.append("Web URL")
|
|
408
|
-
except Exception:
|
|
409
|
-
pass
|
|
410
|
-
|
|
411
|
-
if env_overrides:
|
|
412
|
-
effective["env-overrides"] = env_overrides
|
|
389
|
+
env_overrides = _get_active_env_overrides()
|
|
413
390
|
|
|
414
391
|
if format == "json":
|
|
415
392
|
data: dict = {}
|
|
@@ -427,8 +404,8 @@ def register_config_commands(cli: Any) -> None:
|
|
|
427
404
|
data["profiles"][name] = profile_dict
|
|
428
405
|
if cfg.settings:
|
|
429
406
|
data.update(cfg.settings)
|
|
430
|
-
if
|
|
431
|
-
data["
|
|
407
|
+
if env_overrides:
|
|
408
|
+
data["env-overrides"] = env_overrides
|
|
432
409
|
click.echo(json.dumps(data, indent=2))
|
|
433
410
|
return
|
|
434
411
|
|
|
@@ -453,7 +430,7 @@ def register_config_commands(cli: Any) -> None:
|
|
|
453
430
|
api_key_display = (
|
|
454
431
|
"****" + profile.api_key[-4:] if len(profile.api_key) >= 4 else "****"
|
|
455
432
|
)
|
|
456
|
-
rows.append(["
|
|
433
|
+
rows.append(["API Key", api_key_display])
|
|
457
434
|
|
|
458
435
|
if profile.workspace:
|
|
459
436
|
rows.append(["Workspace", profile.workspace])
|
|
@@ -461,24 +438,6 @@ def register_config_commands(cli: Any) -> None:
|
|
|
461
438
|
if profile.readonly:
|
|
462
439
|
rows.append(["Readonly", "enabled"])
|
|
463
440
|
|
|
464
|
-
if effective:
|
|
465
|
-
api_url_source = effective.get("api-url-source")
|
|
466
|
-
if isinstance(api_url_source, str):
|
|
467
|
-
rows.append(["Effective API URL", str(effective.get("api-url", ""))])
|
|
468
|
-
rows.append(["API URL Source", describe_config_source(api_url_source)])
|
|
469
|
-
|
|
470
|
-
api_key_source = effective.get("api-key-source")
|
|
471
|
-
if isinstance(api_key_source, str):
|
|
472
|
-
rows.append(["API Key Source", describe_config_source(api_key_source)])
|
|
473
|
-
|
|
474
|
-
web_url_source = effective.get("web-url-source")
|
|
475
|
-
if isinstance(web_url_source, str):
|
|
476
|
-
rows.append(["Effective Web URL", str(effective.get("web-url", ""))])
|
|
477
|
-
rows.append(["Web URL Source", describe_config_source(web_url_source)])
|
|
478
|
-
|
|
479
|
-
if env_overrides:
|
|
480
|
-
rows.append(["Active Overrides", ", ".join(env_overrides)])
|
|
481
|
-
|
|
482
441
|
click.echo("slcli Configuration:")
|
|
483
442
|
render_table(
|
|
484
443
|
headers=["SETTING", "VALUE"],
|
|
@@ -487,6 +446,13 @@ def register_config_commands(cli: Any) -> None:
|
|
|
487
446
|
show_total=False,
|
|
488
447
|
)
|
|
489
448
|
|
|
449
|
+
if env_overrides:
|
|
450
|
+
click.echo(
|
|
451
|
+
f"\n⚠️ Environment overrides active ({', '.join(env_overrides)}). "
|
|
452
|
+
"Run 'slcli info' for effective values.",
|
|
453
|
+
err=True,
|
|
454
|
+
)
|
|
455
|
+
|
|
490
456
|
# Check for permission warning
|
|
491
457
|
warning = check_config_file_permissions()
|
|
492
458
|
if warning:
|
|
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.16 → systemlink_cli-1.13.17}/slcli/examples/demo-complete-workflow/README.md
RENAMED
|
File without changes
|
{systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/demo-complete-workflow/config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/demo-test-plans/config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/exercise-7-1-test-plans/README.md
RENAMED
|
File without changes
|
{systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/exercise-7-1-test-plans/config.yaml
RENAMED
|
File without changes
|
{systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/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.16 → systemlink_cli-1.13.17}/slcli/skills/slcli/references/analysis-recipes.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/slcli/references/filtering.md
RENAMED
|
File without changes
|
{systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/slcli/references/routine-examples.md
RENAMED
|
File without changes
|
{systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/slcli/references/troubleshooting.md
RENAMED
|
File without changes
|
{systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-job-debugging/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/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
|
|
File without changes
|