systemlink-cli 1.26.3__tar.gz → 1.27.1__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 (157) hide show
  1. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/PKG-INFO +1 -1
  2. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/pyproject.toml +1 -1
  3. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/_version.py +1 -1
  4. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/asset_click.py +6 -15
  5. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/example_click.py +30 -8
  6. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/example_loader.py +1 -0
  7. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/example_provisioner.py +407 -48
  8. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/README.md +6 -0
  9. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/_schema/schema-v1.0.json +3 -2
  10. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/demo-data-3/config.yaml +2 -0
  11. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/exercise-7-1-test-plans/README.md +2 -2
  12. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/exercise-7-1-test-plans/config.yaml +3 -4
  13. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/SKILL.md +1 -1
  14. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/commands.md +74 -64
  15. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/filtering.md +3 -1
  16. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/python-test/overview.md +1 -1
  17. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/webapp/overview.md +37 -14
  18. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/utils.py +5 -0
  19. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_click.py +2 -2
  20. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/LICENSE +0 -0
  21. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/dff-editor/editor.js +0 -0
  22. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/dff-editor/index.html +0 -0
  23. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/__init__.py +0 -0
  24. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/__main__.py +0 -0
  25. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/alarm_click.py +0 -0
  26. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/cli_formatters.py +0 -0
  27. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/cli_utils.py +0 -0
  28. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/comment_click.py +0 -0
  29. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/completion_click.py +0 -0
  30. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/config.py +0 -0
  31. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/config_click.py +0 -0
  32. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/dataframe_click.py +0 -0
  33. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/dff_click.py +0 -0
  34. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/dff_decorators.py +0 -0
  35. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/demo-data-1/README.md +0 -0
  36. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/demo-data-1/config.yaml +0 -0
  37. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/demo-data-2/README.md +0 -0
  38. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/demo-data-2/config.yaml +0 -0
  39. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/demo-data-3/leakage-current-results.json +0 -0
  40. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/demo-data-3/overvoltage-results.json +0 -0
  41. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/demo-data-3/product-xyz-compliance-report.json +0 -0
  42. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/demo-data-3/product-xyz-specification.csv +0 -0
  43. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/demo-data-3/thermal-response-results.json +0 -0
  44. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/exercise-5-1-parametric-insights/README.md +0 -0
  45. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/exercise-5-1-parametric-insights/config.yaml +0 -0
  46. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/spec-compliance-notebooks/README.md +0 -0
  47. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/spec-compliance-notebooks/config.yaml +0 -0
  48. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/spec-compliance-notebooks/notebooks/SpecAnalysis_ComplianceCalculation.ipynb +0 -0
  49. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/spec-compliance-notebooks/notebooks/SpecComplianceCalculation.ipynb +0 -0
  50. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/spec-compliance-notebooks/notebooks/SpecfileExtractionAndIngestion.ipynb +0 -0
  51. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/examples/spec-compliance-notebooks/spec_template.xlsx +0 -0
  52. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/feed_click.py +0 -0
  53. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/file_click.py +0 -0
  54. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/function_click.py +0 -0
  55. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/function_templates.py +0 -0
  56. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/main.py +0 -0
  57. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/mcp_click.py +0 -0
  58. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/mcp_reachability.py +0 -0
  59. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/mcp_server.py +0 -0
  60. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/notebook_click.py +0 -0
  61. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/pkce.py +0 -0
  62. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/platform.py +0 -0
  63. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/policy_click.py +0 -0
  64. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/policy_utils.py +0 -0
  65. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/profiles.py +0 -0
  66. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/response_handlers.py +0 -0
  67. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/rich_output.py +0 -0
  68. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/routine_click.py +0 -0
  69. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skill_click.py +0 -0
  70. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/analysis-recipes.md +0 -0
  71. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/datasheet-workflow.md +0 -0
  72. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/example-authoring.md +0 -0
  73. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/import-specs.min.json +0 -0
  74. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/job-debugging/overview.md +0 -0
  75. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/nipkg/overview.md +0 -0
  76. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/notebook/interfaces.md +0 -0
  77. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/notebook/notebook-patterns.md +0 -0
  78. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/notebook/overview.md +0 -0
  79. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/routine-examples.md +0 -0
  80. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/troubleshooting.md +0 -0
  81. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/webapp/angular-ui-packages.md +0 -0
  82. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/webapp/deployment.md +0 -0
  83. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/webapp/layout-patterns.md +0 -0
  84. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/webapp/nimble-angular.md +0 -0
  85. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/webapp/systemlink-services.md +0 -0
  86. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/references/webapp/troubleshooting.md +0 -0
  87. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/skills/slcli/scripts/spec_import_helper.py +0 -0
  88. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/spec_click.py +0 -0
  89. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/ssl_trust.py +0 -0
  90. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/state_click.py +0 -0
  91. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/system_click.py +0 -0
  92. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/system_query_utils.py +0 -0
  93. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/systemlink-logo.svg +0 -0
  94. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/table_utils.py +0 -0
  95. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/tag_click.py +0 -0
  96. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/templates_click.py +0 -0
  97. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/testmonitor_click.py +0 -0
  98. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/universal_handlers.py +0 -0
  99. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/user_click.py +0 -0
  100. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/web_editor.py +0 -0
  101. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_bootstrap.py +0 -0
  102. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/.gitignore +0 -0
  103. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/README.md +0 -0
  104. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/angular.json +0 -0
  105. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/package.json +0 -0
  106. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/scripts/filter-sbom.js +0 -0
  107. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/app-routing.module.ts +0 -0
  108. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/app.component.html +0 -0
  109. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/app.component.scss +0 -0
  110. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/app.component.ts +0 -0
  111. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/app.module.ts +0 -0
  112. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/core/layout/app-shell.component.html +0 -0
  113. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/core/layout/app-shell.component.scss +0 -0
  114. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/core/layout/app-shell.component.ts +0 -0
  115. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/core/state/app-view-state.service.ts +0 -0
  116. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/core/systemlink/systemlink-context.service.ts +0 -0
  117. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/core/systemlink/theme-sync.service.ts +0 -0
  118. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/core/systemlink/webapp-home-data.service.ts +0 -0
  119. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/features/assets/assets-page.component.html +0 -0
  120. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/features/assets/assets-page.component.scss +0 -0
  121. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/features/assets/assets-page.component.ts +0 -0
  122. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/features/datasets/datasets-page.component.html +0 -0
  123. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/features/datasets/datasets-page.component.scss +0 -0
  124. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/features/datasets/datasets-page.component.ts +0 -0
  125. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/features/home/home-page.component.html +0 -0
  126. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/features/home/home-page.component.scss +0 -0
  127. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/features/home/home-page.component.ts +0 -0
  128. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/features/master-detail/master-detail-page.component.html +0 -0
  129. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/features/master-detail/master-detail-page.component.scss +0 -0
  130. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/features/master-detail/master-detail-page.component.ts +0 -0
  131. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/features/operations/operations-page.component.html +0 -0
  132. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/features/operations/operations-page.component.scss +0 -0
  133. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/features/operations/operations-page.component.ts +0 -0
  134. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/features/settings/settings-page.component.html +0 -0
  135. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/features/settings/settings-page.component.scss +0 -0
  136. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/features/settings/settings-page.component.ts +0 -0
  137. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/shared/components/empty-state.component.html +0 -0
  138. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/shared/components/empty-state.component.scss +0 -0
  139. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/shared/components/empty-state.component.ts +0 -0
  140. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/shared/components/error-banner.component.html +0 -0
  141. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/shared/components/error-banner.component.scss +0 -0
  142. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/shared/components/error-banner.component.ts +0 -0
  143. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/shared/components/loading-state.component.html +0 -0
  144. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/shared/components/loading-state.component.scss +0 -0
  145. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/shared/components/loading-state.component.ts +0 -0
  146. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/app/shared/states/view-state.model.ts +0 -0
  147. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/assets/README.md +0 -0
  148. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/index.html +0 -0
  149. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/main.ts +0 -0
  150. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/src/styles.scss +0 -0
  151. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/tsconfig.app.json +0 -0
  152. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/webapp_templates/angular/blank/tsconfig.json +0 -0
  153. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/workflow_preview.py +0 -0
  154. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/workflows_click.py +0 -0
  155. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/workitem_click.py +0 -0
  156. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/workspace_click.py +0 -0
  157. {systemlink_cli-1.26.3 → systemlink_cli-1.27.1}/slcli/workspace_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: systemlink-cli
3
- Version: 1.26.3
3
+ Version: 1.27.1
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.26.3"
3
+ version = "1.27.1"
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.26.3"
4
+ __version__ = "1.27.1"
@@ -17,6 +17,7 @@ from .universal_handlers import FilteredResponse, UniversalResponseHandler
17
17
  from .utils import (
18
18
  ExitCodes,
19
19
  check_readonly_mode,
20
+ escape_filter_value,
20
21
  format_success,
21
22
  get_base_url,
22
23
  get_workspace_map,
@@ -29,24 +30,14 @@ from .workspace_utils import (
29
30
  resolve_workspace_filter,
30
31
  )
31
32
 
33
+ _escape_filter_value = escape_filter_value
34
+
32
35
 
33
36
  def _get_asset_base_url() -> str:
34
37
  """Get the base URL for the Asset Management API."""
35
38
  return f"{get_base_url()}/niapm/v1"
36
39
 
37
40
 
38
- def _escape_filter_value(value: str) -> str:
39
- """Escape double quotes in filter values to prevent injection.
40
-
41
- Args:
42
- value: Raw filter value from user input.
43
-
44
- Returns:
45
- Escaped value safe for embedding in filter expressions.
46
- """
47
- return value.replace('"', '\\"')
48
-
49
-
50
41
  def _parse_properties(properties: Tuple[str, ...]) -> Dict[str, str]:
51
42
  """Parse key=value property strings into a dictionary.
52
43
 
@@ -100,10 +91,10 @@ def _build_asset_filter(
100
91
  parts: List[str] = []
101
92
 
102
93
  if model:
103
- escaped = _escape_filter_value(model)
94
+ escaped = escape_filter_value(model)
104
95
  parts.append(f'ModelName.Contains("{escaped}")')
105
96
  if serial_number:
106
- escaped = _escape_filter_value(serial_number)
97
+ escaped = escape_filter_value(serial_number)
107
98
  parts.append(f'SerialNumber = "{escaped}"')
108
99
  if bus_type:
109
100
  parts.append(f'BusType = "{bus_type}"')
@@ -117,7 +108,7 @@ def _build_asset_filter(
117
108
  ' and Location.AssetState.AssetPresence = "PRESENT"'
118
109
  )
119
110
  if workspace_id:
120
- escaped = _escape_filter_value(workspace_id)
111
+ escaped = escape_filter_value(workspace_id)
121
112
  parts.append(f'Workspace = "{escaped}"')
122
113
  if custom_filter:
123
114
  parts.append(custom_filter)
@@ -408,7 +408,13 @@ def register_example_commands(cli: Any) -> None:
408
408
  handle_api_error(exc)
409
409
 
410
410
  @example.command(name="delete")
411
- @click.argument("example_name")
411
+ @click.argument("example_name", required=False)
412
+ @click.option(
413
+ "--file",
414
+ "config_file",
415
+ type=click.Path(exists=True, dir_okay=False, readable=True, resolve_path=True),
416
+ help="Path to an example config.yaml; referenced files are relative to its directory.",
417
+ )
412
418
  @click.option("--workspace", "-w", required=True, help="Workspace name or ID for resources")
413
419
  @click.option(
414
420
  "--format",
@@ -429,7 +435,8 @@ def register_example_commands(cli: Any) -> None:
429
435
  help="Path to write deletion results as JSON for auditing.",
430
436
  )
431
437
  def delete_example(
432
- example_name: str,
438
+ example_name: Optional[str],
439
+ config_file: Optional[str],
433
440
  workspace: Optional[str],
434
441
  format: str,
435
442
  dry_run: bool,
@@ -442,14 +449,29 @@ def register_example_commands(cli: Any) -> None:
442
449
 
443
450
  try:
444
451
  loader = ExampleLoader()
445
- config = loader.load_config(example_name)
452
+ example_dir: Optional[Path] = None
453
+ if config_file and example_name:
454
+ raise ValueError("Specify either EXAMPLE_NAME or --file, not both.")
455
+ if not config_file and not example_name:
456
+ raise ValueError("Provide an EXAMPLE_NAME or --file path to config.yaml.")
457
+
458
+ if config_file:
459
+ config_path = Path(config_file)
460
+ config = loader.load_config_file(config_path)
461
+ example_name = str(config["name"])
462
+ example_dir = config_path.parent
463
+ else:
464
+ config = loader.load_config(example_name or "")
446
465
 
447
466
  workspace_id = _resolve_workspace_id(get_effective_workspace(workspace))
448
- provisioner = ExampleProvisioner(
449
- workspace_id=workspace_id,
450
- example_name=example_name,
451
- dry_run=dry_run,
452
- )
467
+ provisioner_options: Dict[str, Any] = {
468
+ "workspace_id": workspace_id,
469
+ "example_name": example_name,
470
+ "dry_run": dry_run,
471
+ }
472
+ if example_dir is not None:
473
+ provisioner_options["example_dir"] = example_dir
474
+ provisioner = ExampleProvisioner(**provisioner_options)
453
475
 
454
476
  results, err = provisioner.delete(config)
455
477
  if err:
@@ -24,6 +24,7 @@ class ExampleLoader:
24
24
  "product",
25
25
  "system",
26
26
  "asset",
27
+ "fixture",
27
28
  "dut",
28
29
  "testtemplate",
29
30
  "workflow",