datex-studio-cli 0.4.10__tar.gz → 0.4.12__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 (176) hide show
  1. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/PKG-INFO +1 -1
  2. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/pyproject.toml +2 -1
  3. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/__init__.py +1 -1
  4. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/cli.py +78 -8
  5. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/auth.py +365 -202
  6. datex_studio_cli-0.4.12/src/dxs/commands/init.py +310 -0
  7. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/context.py +1 -0
  8. datex_studio_cli-0.4.12/src/dxs/core/auth/datex_tenant.py +265 -0
  9. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/auth/decorators.py +11 -5
  10. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/auth/msal_client.py +13 -3
  11. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/auth/token_cache.py +162 -6
  12. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/devops/client.py +40 -63
  13. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/dynamics/client.py +40 -65
  14. datex_studio_cli-0.4.12/src/dxs/core/onboarding.py +151 -0
  15. datex_studio_cli-0.4.12/src/dxs/report/templates/__init__.py +0 -0
  16. datex_studio_cli-0.4.12/src/dxs/utils/clipboard.py +50 -0
  17. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/utils/config.py +33 -0
  18. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/.gitignore +0 -0
  19. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/README.md +0 -0
  20. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/report-creator.skill +0 -0
  21. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/scripts/analyze_corpus.py +0 -0
  22. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/scripts/generate_rdlx_schema.py +0 -0
  23. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/__main__.py +0 -0
  24. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/__init__.py +0 -0
  25. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/api.py +0 -0
  26. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/branch.py +0 -0
  27. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/config.py +0 -0
  28. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/configuration.py +0 -0
  29. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/crm.py +0 -0
  30. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/datasource.py +0 -0
  31. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/devops.py +0 -0
  32. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/document.py +0 -0
  33. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/endpoint.py +0 -0
  34. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/env.py +0 -0
  35. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/explore.py +0 -0
  36. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/function.py +0 -0
  37. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/marketplace.py +0 -0
  38. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/odata.py +0 -0
  39. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/organization.py +0 -0
  40. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/proxy.py +0 -0
  41. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/release_notes.py +0 -0
  42. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/repo.py +0 -0
  43. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/report/__init__.py +0 -0
  44. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/report/add_cmds.py +0 -0
  45. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/report/api.py +0 -0
  46. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/report/batch.py +0 -0
  47. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/report/create.py +0 -0
  48. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/report/data.py +0 -0
  49. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/report/dataset.py +0 -0
  50. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/report/edit.py +0 -0
  51. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/report/folder.py +0 -0
  52. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/report/preview.py +0 -0
  53. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/report/schema_cmds.py +0 -0
  54. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/schema.py +0 -0
  55. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/servicepack.py +0 -0
  56. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/source.py +0 -0
  57. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/studio.py +0 -0
  58. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/telemetry.py +0 -0
  59. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/commands/user.py +0 -0
  60. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/__init__.py +0 -0
  61. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/api/__init__.py +0 -0
  62. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/api/app_config.py +0 -0
  63. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/api/client.py +0 -0
  64. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/api/endpoints.py +0 -0
  65. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/api/metadata_models.py +0 -0
  66. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/api/models.py +0 -0
  67. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/auth/__init__.py +0 -0
  68. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/cache.py +0 -0
  69. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/datasource/__init__.py +0 -0
  70. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/datasource/flow_generator.py +0 -0
  71. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/datasource/flow_models.py +0 -0
  72. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/datasource/generator.py +0 -0
  73. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/datasource/models.py +0 -0
  74. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/datasource/parsers.py +0 -0
  75. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/datasource/resolver.py +0 -0
  76. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/datasource/type_def_parser.py +0 -0
  77. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/datasource/validator.py +0 -0
  78. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/designer/__init__.py +0 -0
  79. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/designer/flow_models.py +0 -0
  80. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/designer/models.py +0 -0
  81. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/designer/parsers.py +0 -0
  82. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/devops/__init__.py +0 -0
  83. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/devops/helpers.py +0 -0
  84. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/devops/models.py +0 -0
  85. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/dynamics/__init__.py +0 -0
  86. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/dynamics/metadata_cache.py +0 -0
  87. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/footprint/__init__.py +0 -0
  88. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/footprint/client.py +0 -0
  89. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/footprint/edmx_parser.py +0 -0
  90. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/footprint/metadata.py +0 -0
  91. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/function/__init__.py +0 -0
  92. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/function/generator.py +0 -0
  93. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/function/models.py +0 -0
  94. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/function/validator.py +0 -0
  95. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/graph.py +0 -0
  96. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/output/__init__.py +0 -0
  97. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/output/csv_fmt.py +0 -0
  98. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/output/formatter.py +0 -0
  99. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/output/json_fmt.py +0 -0
  100. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/output/redaction.py +0 -0
  101. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/output/yaml_fmt.py +0 -0
  102. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/release_notes.py +0 -0
  103. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/responses.py +0 -0
  104. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/telemetry/__init__.py +0 -0
  105. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/telemetry/config.py +0 -0
  106. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/telemetry/identity.py +0 -0
  107. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/telemetry/recorder.py +0 -0
  108. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/telemetry/scrubber.py +0 -0
  109. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/core/telemetry/sender.py +0 -0
  110. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/models/__init__.py +0 -0
  111. /datex_studio_cli-0.4.10/src/dxs/report/templates/__init__.py → /datex_studio_cli-0.4.12/src/dxs/py.typed +0 -0
  112. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/report/__init__.py +0 -0
  113. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/report/datasource_binding.py +0 -0
  114. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/report/engine.py +0 -0
  115. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/report/field_parser.py +0 -0
  116. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/report/folder.py +0 -0
  117. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/report/manifest.py +0 -0
  118. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/report/models.py +0 -0
  119. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/report/preview.py +0 -0
  120. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/report/preview_arjs.py +0 -0
  121. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/report/schema.py +0 -0
  122. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/report/svg_renderer.py +0 -0
  123. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/report/templates/bill_of_lading.rdlx-json +0 -0
  124. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/report/templates/shipping_label.rdlx-json +0 -0
  125. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/report/validate_arjs.py +0 -0
  126. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/report/validator.py +0 -0
  127. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/report/wrapper.py +0 -0
  128. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/utils/__init__.py +0 -0
  129. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/utils/click_options.py +0 -0
  130. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/utils/errors.py +0 -0
  131. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/utils/filtering.py +0 -0
  132. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/utils/image.py +0 -0
  133. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/utils/paths.py +0 -0
  134. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/utils/resolvers.py +0 -0
  135. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/utils/responses.py +0 -0
  136. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/utils/restricted.py +0 -0
  137. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/utils/sorting.py +0 -0
  138. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/utils/update_check.py +0 -0
  139. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/__init__.py +0 -0
  140. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/app.py +0 -0
  141. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/design.py +0 -0
  142. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/proxy_app.py +0 -0
  143. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/404/index.html +0 -0
  144. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/404.html +0 -0
  145. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/UgyAMtPjH-Pt0RYWOHzIT/_buildManifest.js +0 -0
  146. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/UgyAMtPjH-Pt0RYWOHzIT/_ssgManifest.js +0 -0
  147. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/0b24cca5-c1e1c8810348f107.js +0 -0
  148. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/255-102f2e5b2e3dc2ef.js +0 -0
  149. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/4bd1b696-c023c6e3521b1417.js +0 -0
  150. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/538-84e2e111415f1fda.js +0 -0
  151. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/697-0e000ab410d9f470.js +0 -0
  152. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/871-1acacdb7b4022abf.js +0 -0
  153. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/8b8f67fc-6295949a4b5485a4.js +0 -0
  154. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/909-c88abba3cf0caec3.js +0 -0
  155. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/app/_not-found/page-ea1be7001c230704.js +0 -0
  156. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/app/design/capture/page-a5e129c2d223432c.js +0 -0
  157. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/app/design/page-21ba66a3dd3b03f0.js +0 -0
  158. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/app/layout-2cc6eac09e476c91.js +0 -0
  159. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/app/page-20c358395882cdac.js +0 -0
  160. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/framework-de98b93a850cfc71.js +0 -0
  161. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/main-0f18f91200dac003.js +0 -0
  162. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/main-app-b69998d8941231d8.js +0 -0
  163. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/pages/_app-7d307437aca18ad4.js +0 -0
  164. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/pages/_error-cb2a52f75f2162e2.js +0 -0
  165. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -0
  166. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/chunks/webpack-2b297ada5306c17f.js +0 -0
  167. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/_next/static/css/360c657de5e04df8.css +0 -0
  168. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/design/capture/index.html +0 -0
  169. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/design/capture/index.txt +0 -0
  170. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/design/index.html +0 -0
  171. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/design/index.txt +0 -0
  172. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/index.html +0 -0
  173. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/index.txt +0 -0
  174. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/render-cli.js +0 -0
  175. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/report-preview.html +0 -0
  176. {datex_studio_cli-0.4.10 → datex_studio_cli-0.4.12}/src/dxs/web/static/report-validate.html +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: datex-studio-cli
3
- Version: 0.4.10
3
+ Version: 0.4.12
4
4
  Summary: CLI for Datex Studio low-code platform, designed for LLM-based AI agents
5
5
  Project-URL: Homepage, https://github.com/datex/datex-studio-cli
6
6
  Project-URL: Documentation, https://github.com/datex/datex-studio-cli
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "datex-studio-cli"
7
- version = "0.4.10"
7
+ version = "0.4.12"
8
8
  description = "CLI for Datex Studio low-code platform, designed for LLM-based AI agents"
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -152,6 +152,7 @@ python_functions = ["test_*"]
152
152
  addopts = "-v --tb=short"
153
153
  markers = [
154
154
  "fidelity: cross-engine SSIM fidelity tests (require agent-browser + ARJS)",
155
+ "internal_commands_gated: exercise the devops/crm visibility gate (no DXS_INTERNAL_COMMANDS override)",
155
156
  ]
156
157
 
157
158
  [tool.coverage.run]
@@ -1,4 +1,4 @@
1
1
  """Datex Studio CLI - Command-line interface for Datex Studio platform."""
2
2
 
3
- __version__ = "0.4.10"
3
+ __version__ = "0.4.12"
4
4
  __app_name__ = "dxs"
@@ -8,6 +8,7 @@ import click
8
8
 
9
9
  from dxs import __app_name__, __version__
10
10
  from dxs.context import DxsContext, pass_context # re-exported for backward compat
11
+ from dxs.core.auth.datex_tenant import DATEX_INTERNAL_COMMANDS, internal_commands_available
11
12
  from dxs.core.output import OutputFormat, format_error
12
13
  from dxs.core.output.redaction import (
13
14
  AUTHOR_VERBOSE_FIELDS as _AUTHOR_VERBOSE_FIELDS, # noqa: F401 — re-exported
@@ -16,7 +17,7 @@ from dxs.core.output.redaction import (
16
17
  _redact_secrets, # noqa: F401 — re-exported
17
18
  _strip_concise, # noqa: F401 — re-exported
18
19
  )
19
- from dxs.utils.config import get_settings
20
+ from dxs.utils.config import get_settings, resolve_target_url
20
21
  from dxs.utils.errors import DxsError
21
22
 
22
23
  # Re-export so that existing `from dxs.cli import DxsContext, pass_context` still works
@@ -77,7 +78,29 @@ CONTEXT_SETTINGS = {
77
78
 
78
79
 
79
80
  class DxsGroup(click.Group):
80
- """Custom Group that shows global options in subcommand help."""
81
+ """Custom Group that shows global options in subcommand help.
82
+
83
+ Also gates the Datex-internal command groups (``devops``, ``crm``). The gate
84
+ is applied at lookup time rather than at registration so it reflects the
85
+ identity cache as of *this* invocation — registration happens once at import.
86
+ """
87
+
88
+ def _is_gated(self, cmd_name: str) -> bool:
89
+ """Whether ``cmd_name`` is Datex-internal and unavailable to this user."""
90
+ return cmd_name in DATEX_INTERNAL_COMMANDS and not internal_commands_available()
91
+
92
+ def list_commands(self, ctx: click.Context) -> list[str]:
93
+ """List visible subcommands, omitting unavailable Datex-internal groups."""
94
+ return [name for name in super().list_commands(ctx) if not self._is_gated(name)]
95
+
96
+ def get_command(self, ctx: click.Context, cmd_name: str) -> click.Command | None:
97
+ """Resolve a subcommand, refusing unavailable Datex-internal groups."""
98
+ if self._is_gated(cmd_name):
99
+ ctx.fail(
100
+ f"'{cmd_name}' is a Datex-internal command group and requires a "
101
+ "Datex tenant identity. Run 'dxs auth login' with your Datex account."
102
+ )
103
+ return super().get_command(ctx, cmd_name)
81
104
 
82
105
  def format_options(self, ctx: click.Context, formatter: click.HelpFormatter) -> None:
83
106
  """Write options to the formatter, including global options."""
@@ -104,6 +127,33 @@ class DxsGroup(click.Group):
104
127
  formatter.write_dl(global_opts)
105
128
 
106
129
 
130
+ def _apply_tenant_override(tenant: str) -> None:
131
+ """Resolve a --tenant selector and pin identity resolution to it.
132
+
133
+ Raises:
134
+ AuthenticationError: If DXS_ACCESS_TOKEN is set (that token bypasses
135
+ identity resolution, so --tenant could not take effect), or if the
136
+ selector does not resolve to exactly one stored identity.
137
+ """
138
+ import os
139
+
140
+ from dxs.core.auth.token_cache import MultiIdentityTokenCache, set_identity_override
141
+ from dxs.utils.errors import AuthenticationError
142
+
143
+ if os.environ.get("DXS_ACCESS_TOKEN"):
144
+ raise AuthenticationError(
145
+ message="--tenant cannot be used while DXS_ACCESS_TOKEN is set.",
146
+ code="DXS-AUTH-012",
147
+ suggestions=[
148
+ "DXS_ACCESS_TOKEN is used verbatim and already fixes the identity",
149
+ "Unset DXS_ACCESS_TOKEN to select a stored identity with --tenant",
150
+ ],
151
+ )
152
+
153
+ cache = MultiIdentityTokenCache()
154
+ set_identity_override(cache.resolve_selector(tenant))
155
+
156
+
107
157
  @click.group(cls=DxsGroup, context_settings=CONTEXT_SETTINGS)
108
158
  @click.version_option(version=__version__, prog_name=__app_name__)
109
159
  @click.option(
@@ -142,6 +192,14 @@ class DxsGroup(click.Group):
142
192
  default=None,
143
193
  help="API target environment (dev, qa, or prod; default: prod)",
144
194
  )
195
+ @click.option(
196
+ "--tenant",
197
+ type=str,
198
+ envvar="DXS_TENANT",
199
+ default=None,
200
+ help="Run as a specific logged-in identity for this command only "
201
+ "(org name, Entra domain, tenant ID, or username). See 'dxs auth list'.",
202
+ )
145
203
  @click.option(
146
204
  "-O",
147
205
  "--output",
@@ -215,6 +273,7 @@ def cli(
215
273
  branch: int | None,
216
274
  repo: int | None,
217
275
  target: str | None,
276
+ tenant: str | None,
218
277
  output_format: str | None,
219
278
  verbose: bool,
220
279
  quiet: bool,
@@ -232,10 +291,12 @@ def cli(
232
291
 
233
292
  \b
234
293
  Examples:
294
+ dxs init
235
295
  dxs auth login
236
296
  dxs source log --repo 10
237
297
  dxs source history userGrid --branch 100
238
298
  dxs config list
299
+ dxs --tenant MGD schema entities # run one command as another identity
239
300
 
240
301
  \b
241
302
  Environment Variables:
@@ -244,6 +305,7 @@ def cli(
244
305
  DXS_BRANCH Default branch ID
245
306
  DXS_REPO Default repository ID
246
307
  DXS_TARGET API target environment (dev, qa, prod)
308
+ DXS_TENANT Identity to run as (see --tenant)
247
309
 
248
310
  \b
249
311
  Configuration:
@@ -258,12 +320,7 @@ def cli(
258
320
 
259
321
  # Set API base URL based on target environment
260
322
  if target:
261
- target_urls = {
262
- "dev": "https://dev.wavelength.host/api",
263
- "qa": "https://qa.wavelength.host/api",
264
- "prod": "https://wavelength.host/api",
265
- }
266
- os.environ["DXS_API_BASE_URL"] = target_urls[target.lower()]
323
+ os.environ["DXS_API_BASE_URL"] = resolve_target_url(target)
267
324
 
268
325
  # Load settings
269
326
  settings = get_settings()
@@ -288,6 +345,17 @@ def cli(
288
345
  dxs_ctx.output_format = OutputFormat(settings.default_output_format.lower())
289
346
  set_last_output_format(dxs_ctx.output_format)
290
347
 
348
+ # Pin identity resolution for this invocation only (never persisted).
349
+ # Deliberately after output-format resolution so a bad selector renders as
350
+ # a normal error envelope rather than a bare traceback.
351
+ if tenant:
352
+ try:
353
+ _apply_tenant_override(tenant)
354
+ except DxsError as e:
355
+ dxs_ctx.output_error(e)
356
+ ctx.exit(1)
357
+ dxs_ctx.tenant = tenant
358
+
291
359
  # Set verbosity (--verbose enables debug output, --quiet suppresses progress)
292
360
  dxs_ctx.verbose = verbose
293
361
  if quiet_src == click.core.ParameterSource.COMMANDLINE:
@@ -428,6 +496,7 @@ def register_commands() -> None:
428
496
  endpoint,
429
497
  env,
430
498
  function,
499
+ init,
431
500
  marketplace,
432
501
  odata,
433
502
  organization,
@@ -440,6 +509,7 @@ def register_commands() -> None:
440
509
 
441
510
  cli.add_command(api.api)
442
511
  cli.add_command(auth.auth)
512
+ cli.add_command(init.init)
443
513
  cli.add_command(config.config)
444
514
  cli.add_command(config.config, name="settings")
445
515
  cli.add_command(configuration.configuration)