systemlink-cli 1.4.3__tar.gz → 1.4.4__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 (74) hide show
  1. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/PKG-INFO +1 -1
  2. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/pyproject.toml +1 -1
  3. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/_version.py +1 -1
  4. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/examples/demo-complete-workflow/README.md +1 -3
  5. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/platform.py +4 -52
  6. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/user_click.py +1 -1
  7. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/LICENSE +0 -0
  8. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/dff-editor/editor.js +0 -0
  9. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/dff-editor/index.html +0 -0
  10. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/__init__.py +0 -0
  11. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/__main__.py +0 -0
  12. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/asset_click.py +0 -0
  13. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/cli_formatters.py +0 -0
  14. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/cli_utils.py +0 -0
  15. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/comment_click.py +0 -0
  16. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/completion_click.py +0 -0
  17. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/config.py +0 -0
  18. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/config_click.py +0 -0
  19. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/dff_click.py +0 -0
  20. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/dff_decorators.py +0 -0
  21. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/example_click.py +0 -0
  22. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/example_loader.py +0 -0
  23. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/example_provisioner.py +0 -0
  24. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/examples/README.md +0 -0
  25. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/examples/_schema/schema-v1.0.json +0 -0
  26. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/examples/demo-complete-workflow/config.yaml +0 -0
  27. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/examples/demo-test-plans/README.md +0 -0
  28. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/examples/demo-test-plans/config.yaml +0 -0
  29. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/examples/exercise-5-1-parametric-insights/README.md +0 -0
  30. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/examples/exercise-5-1-parametric-insights/config.yaml +0 -0
  31. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/examples/exercise-7-1-test-plans/README.md +0 -0
  32. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/examples/exercise-7-1-test-plans/config.yaml +0 -0
  33. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/examples/spec-compliance-notebooks/README.md +0 -0
  34. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/examples/spec-compliance-notebooks/config.yaml +0 -0
  35. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/examples/spec-compliance-notebooks/notebooks/SpecAnalysis_ComplianceCalculation.ipynb +0 -0
  36. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/examples/spec-compliance-notebooks/notebooks/SpecComplianceCalculation.ipynb +0 -0
  37. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/examples/spec-compliance-notebooks/notebooks/SpecfileExtractionAndIngestion.ipynb +0 -0
  38. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/examples/spec-compliance-notebooks/spec_template.xlsx +0 -0
  39. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/feed_click.py +0 -0
  40. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/file_click.py +0 -0
  41. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/function_click.py +0 -0
  42. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/function_templates.py +0 -0
  43. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/main.py +0 -0
  44. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/mcp_click.py +0 -0
  45. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/mcp_server.py +0 -0
  46. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/notebook_click.py +0 -0
  47. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/policy_click.py +0 -0
  48. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/policy_utils.py +0 -0
  49. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/profiles.py +0 -0
  50. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/response_handlers.py +0 -0
  51. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/routine_click.py +0 -0
  52. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/skill_click.py +0 -0
  53. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/skills/slcli/SKILL.md +0 -0
  54. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/skills/slcli/references/analysis-recipes.md +0 -0
  55. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/skills/slcli/references/filtering.md +0 -0
  56. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/skills/systemlink-webapp/SKILL.md +0 -0
  57. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/skills/systemlink-webapp/references/deployment.md +0 -0
  58. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/skills/systemlink-webapp/references/nimble-angular.md +0 -0
  59. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/skills/systemlink-webapp/references/systemlink-services.md +0 -0
  60. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/ssl_trust.py +0 -0
  61. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/system_click.py +0 -0
  62. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/table_utils.py +0 -0
  63. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/tag_click.py +0 -0
  64. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/templates_click.py +0 -0
  65. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/testmonitor_click.py +0 -0
  66. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/universal_handlers.py +0 -0
  67. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/utils.py +0 -0
  68. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/web_editor.py +0 -0
  69. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/webapp_click.py +0 -0
  70. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/workflow_preview.py +0 -0
  71. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/workflows_click.py +0 -0
  72. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/workitem_click.py +0 -0
  73. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/workspace_click.py +0 -0
  74. {systemlink_cli-1.4.3 → systemlink_cli-1.4.4}/slcli/workspace_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: systemlink-cli
3
- Version: 1.4.3
3
+ Version: 1.4.4
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.4.3"
3
+ version = "1.4.4"
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.4.3"
4
+ __version__ = "1.4.4"
@@ -303,9 +303,7 @@ slcli result list -w <workspace>
303
303
 
304
304
  ## Additional Resources
305
305
 
306
- - **SystemLink API Documentation**: https://dev-api.lifecyclesolutions.ni.com/
307
- - **Test Monitor Specs**: https://dev-api.lifecyclesolutions.ni.com/nitestmonitor/swagger/
308
- - **Work Item API**: https://dev-api.lifecyclesolutions.ni.com/niworkitem/swagger/
306
+ - **SystemLink API Documentation**: https://demo-api.lifecyclesolutions.ni.com/niapis/
309
307
  - **systemlink-cli GitHub**: https://github.com/ni/systemlink-cli
310
308
 
311
309
  ## Contact & Support
@@ -87,7 +87,6 @@ def detect_platform(api_url: str, api_key: str) -> str:
87
87
  Uses check_service_status to probe services and determine:
88
88
  - Platform type (SLE vs SLS)
89
89
  - Server reachability
90
- Falls back to URL pattern matching when probe is inconclusive.
91
90
 
92
91
  Args:
93
92
  api_url: The SystemLink API base URL
@@ -101,45 +100,6 @@ def detect_platform(api_url: str, api_key: str) -> str:
101
100
  return status["platform"]
102
101
 
103
102
 
104
- def _detect_platform_from_url(api_url: str) -> str:
105
- """Detect platform from URL pattern without making network requests.
106
-
107
- This is a lightweight detection for use when environment variables
108
- are set and we need quick platform detection.
109
-
110
- SLE (SystemLink Enterprise Cloud) URLs typically contain:
111
- - api.systemlink.io (production)
112
- - dev-api.lifecyclesolutions.ni.com (development)
113
- - demo-api.lifecyclesolutions.ni.com (demo)
114
-
115
- On-premises SystemLink Server (SLS) instances may use custom domains
116
- or even *.systemlink.io subdomains (like base.systemlink.io).
117
-
118
- Args:
119
- api_url: The SystemLink API base URL
120
-
121
- Returns:
122
- Platform identifier: PLATFORM_SLE or PLATFORM_SLS.
123
- Note: This function never returns PLATFORM_UNKNOWN - it defaults to SLS.
124
- """
125
- api_url_lower = api_url.lower()
126
-
127
- # SLE cloud service has specific URL patterns
128
- sle_patterns = [
129
- "api.systemlink.io", # SLE production
130
- "-api.lifecyclesolutions.ni.com", # SLE dev/demo with -api suffix
131
- "dev-api.lifecyclesolutions",
132
- "demo-api.lifecyclesolutions",
133
- ]
134
- for pattern in sle_patterns:
135
- if pattern in api_url_lower:
136
- return PLATFORM_SLE
137
-
138
- # Default to SLS for on-premises/custom URLs
139
- # This includes on-prem servers that may use *.systemlink.io subdomains
140
- return PLATFORM_SLS
141
-
142
-
143
103
  @lru_cache(maxsize=1)
144
104
  def get_platform() -> str:
145
105
  """Get the current platform from stored configuration or environment.
@@ -147,8 +107,7 @@ def get_platform() -> str:
147
107
  Detection priority:
148
108
  1. SYSTEMLINK_PLATFORM environment variable (explicit, most reliable)
149
109
  2. Stored platform from keyring config (set during login via endpoint probing)
150
- 3. URL pattern matching (fallback, less reliable)
151
- 4. Return PLATFORM_UNKNOWN if all methods fail
110
+ 3. Return PLATFORM_UNKNOWN if no explicit or stored platform is available
152
111
 
153
112
  Note: Results are cached for performance. Use clear_platform_cache() to reset.
154
113
 
@@ -169,12 +128,6 @@ def get_platform() -> str:
169
128
  if platform in (PLATFORM_SLE, PLATFORM_SLS):
170
129
  return platform
171
130
 
172
- # Priority 3: URL pattern matching (fallback, less reliable)
173
- # Only used when env vars are set but no explicit platform is provided
174
- env_url = os.environ.get("SYSTEMLINK_API_URL")
175
- if env_url:
176
- return _detect_platform_from_url(env_url)
177
-
178
131
  return PLATFORM_UNKNOWN
179
132
 
180
133
 
@@ -349,8 +302,8 @@ def check_service_status(api_url: str, api_key: str) -> Dict[str, Any]:
349
302
  ("ok", "unauthorized", "not_found", "error", "unreachable")
350
303
  - file_query_endpoint: selected file query endpoint, if available
351
304
  - elasticsearch_available: bool | None - whether search-files is available
352
- - platform: detected platform string (PLATFORM_SLE, PLATFORM_SLS,
353
- PLATFORM_UNREACHABLE)
305
+ - platform: detected platform string (PLATFORM_SLE, PLATFORM_SLS,
306
+ PLATFORM_UNREACHABLE, PLATFORM_UNKNOWN)
354
307
  """
355
308
  headers = {
356
309
  "x-ni-api-key": api_key,
@@ -425,8 +378,7 @@ def check_service_status(api_url: str, api_key: str) -> Dict[str, Any]:
425
378
  elif workorder_status == "not_found":
426
379
  platform = PLATFORM_SLS
427
380
  else:
428
- # Fall back to URL pattern matching
429
- platform = _detect_platform_from_url(api_url)
381
+ platform = PLATFORM_UNKNOWN
430
382
 
431
383
  file_capability = get_file_query_capability(api_url, api_key)
432
384
  services["File"] = file_capability["status"]
@@ -423,7 +423,7 @@ def _query_all_users(
423
423
  - Uses 'status = "active"' for filtering disabled users
424
424
 
425
425
  TODO: Follow this pattern for other API clients that support continuation tokens
426
- Reference: https://dev-api.lifecyclesolutions.ni.com/niuser/swagger/v1/niuser.yaml
426
+ Reference: https://demo-api.lifecyclesolutions.ni.com/niuser/swagger/v1/niuser.yaml
427
427
 
428
428
  Args:
429
429
  filter_str: Filter expression for users
File without changes