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.
Files changed (93) hide show
  1. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/PKG-INFO +1 -1
  2. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/pyproject.toml +1 -1
  3. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/_version.py +1 -1
  4. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/config_click.py +28 -62
  5. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/LICENSE +0 -0
  6. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/dff-editor/editor.js +0 -0
  7. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/dff-editor/index.html +0 -0
  8. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/__init__.py +0 -0
  9. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/__main__.py +0 -0
  10. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/asset_click.py +0 -0
  11. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/cli_formatters.py +0 -0
  12. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/cli_utils.py +0 -0
  13. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/comment_click.py +0 -0
  14. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/completion_click.py +0 -0
  15. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/config.py +0 -0
  16. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/dataframe_click.py +0 -0
  17. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/dff_click.py +0 -0
  18. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/dff_decorators.py +0 -0
  19. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/example_click.py +0 -0
  20. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/example_loader.py +0 -0
  21. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/example_provisioner.py +0 -0
  22. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/README.md +0 -0
  23. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/_schema/schema-v1.0.json +0 -0
  24. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/demo-complete-workflow/README.md +0 -0
  25. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/demo-complete-workflow/config.yaml +0 -0
  26. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/demo-test-plans/README.md +0 -0
  27. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/demo-test-plans/config.yaml +0 -0
  28. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/exercise-5-1-parametric-insights/README.md +0 -0
  29. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/exercise-5-1-parametric-insights/config.yaml +0 -0
  30. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/exercise-7-1-test-plans/README.md +0 -0
  31. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/exercise-7-1-test-plans/config.yaml +0 -0
  32. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/spec-compliance-notebooks/README.md +0 -0
  33. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/spec-compliance-notebooks/config.yaml +0 -0
  34. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/spec-compliance-notebooks/notebooks/SpecAnalysis_ComplianceCalculation.ipynb +0 -0
  35. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/spec-compliance-notebooks/notebooks/SpecComplianceCalculation.ipynb +0 -0
  36. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/spec-compliance-notebooks/notebooks/SpecfileExtractionAndIngestion.ipynb +0 -0
  37. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/examples/spec-compliance-notebooks/spec_template.xlsx +0 -0
  38. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/feed_click.py +0 -0
  39. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/file_click.py +0 -0
  40. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/function_click.py +0 -0
  41. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/function_templates.py +0 -0
  42. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/main.py +0 -0
  43. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/mcp_click.py +0 -0
  44. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/mcp_reachability.py +0 -0
  45. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/mcp_server.py +0 -0
  46. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/notebook_click.py +0 -0
  47. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/platform.py +0 -0
  48. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/policy_click.py +0 -0
  49. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/policy_utils.py +0 -0
  50. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/profiles.py +0 -0
  51. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/response_handlers.py +0 -0
  52. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/rich_output.py +0 -0
  53. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/routine_click.py +0 -0
  54. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skill_click.py +0 -0
  55. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/nipkg-file-package/SKILL.md +0 -0
  56. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/slcli/SKILL.md +0 -0
  57. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/slcli/references/analysis-recipes.md +0 -0
  58. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/slcli/references/commands.md +0 -0
  59. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/slcli/references/datasheet-workflow.md +0 -0
  60. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/slcli/references/filtering.md +0 -0
  61. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/slcli/references/routine-examples.md +0 -0
  62. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/slcli/references/troubleshooting.md +0 -0
  63. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-job-debugging/SKILL.md +0 -0
  64. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-notebook/SKILL.md +0 -0
  65. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-notebook/references/interfaces.md +0 -0
  66. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-notebook/references/notebook-patterns.md +0 -0
  67. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-python-test/SKILL.md +0 -0
  68. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-webapp/SKILL.md +0 -0
  69. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-webapp/references/angular-ui-packages.md +0 -0
  70. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-webapp/references/deployment.md +0 -0
  71. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-webapp/references/layout-patterns.md +0 -0
  72. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-webapp/references/nimble-angular.md +0 -0
  73. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-webapp/references/systemlink-services.md +0 -0
  74. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/skills/systemlink-webapp/references/troubleshooting.md +0 -0
  75. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/spec_click.py +0 -0
  76. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/ssl_trust.py +0 -0
  77. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/state_click.py +0 -0
  78. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/system_click.py +0 -0
  79. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/system_query_utils.py +0 -0
  80. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/table_utils.py +0 -0
  81. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/tag_click.py +0 -0
  82. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/templates_click.py +0 -0
  83. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/testmonitor_click.py +0 -0
  84. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/universal_handlers.py +0 -0
  85. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/user_click.py +0 -0
  86. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/utils.py +0 -0
  87. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/web_editor.py +0 -0
  88. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/webapp_click.py +0 -0
  89. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/workflow_preview.py +0 -0
  90. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/workflows_click.py +0 -0
  91. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/workitem_click.py +0 -0
  92. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/slcli/workspace_click.py +0 -0
  93. {systemlink_cli-1.13.16 → systemlink_cli-1.13.17}/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.16
3
+ Version: 1.13.17
4
4
  Summary: SystemLink Integrator CLI - cross-platform CLI for SystemLink workflows and templates.
5
5
  License-File: LICENSE
6
6
  Author: Fred Visser
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "systemlink-cli"
3
- version = "1.13.16"
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" }]
@@ -1,4 +1,4 @@
1
1
  """Version information for slcli."""
2
2
 
3
3
  # This file is auto-generated. Do not edit manually.
4
- __version__ = "1.13.16"
4
+ __version__ = "1.13.17"
@@ -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 full configuration."""
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 effective:
431
- data["effective"] = effective
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(["Profile API Key", api_key_display])
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: