datex-studio-cli 0.4.3__tar.gz → 0.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 (171) hide show
  1. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/PKG-INFO +1 -1
  2. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/pyproject.toml +1 -1
  3. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/__init__.py +1 -1
  4. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/utils/update_check.py +86 -14
  5. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/.gitignore +0 -0
  6. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/README.md +0 -0
  7. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/report-creator.skill +0 -0
  8. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/scripts/analyze_corpus.py +0 -0
  9. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/scripts/generate_rdlx_schema.py +0 -0
  10. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/__main__.py +0 -0
  11. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/cli.py +0 -0
  12. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/__init__.py +0 -0
  13. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/api.py +0 -0
  14. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/auth.py +0 -0
  15. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/branch.py +0 -0
  16. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/config.py +0 -0
  17. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/configuration.py +0 -0
  18. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/crm.py +0 -0
  19. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/datasource.py +0 -0
  20. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/devops.py +0 -0
  21. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/document.py +0 -0
  22. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/endpoint.py +0 -0
  23. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/env.py +0 -0
  24. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/explore.py +0 -0
  25. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/function.py +0 -0
  26. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/marketplace.py +0 -0
  27. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/odata.py +0 -0
  28. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/organization.py +0 -0
  29. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/proxy.py +0 -0
  30. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/release_notes.py +0 -0
  31. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/repo.py +0 -0
  32. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/report/__init__.py +0 -0
  33. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/report/add_cmds.py +0 -0
  34. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/report/api.py +0 -0
  35. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/report/batch.py +0 -0
  36. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/report/create.py +0 -0
  37. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/report/data.py +0 -0
  38. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/report/dataset.py +0 -0
  39. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/report/edit.py +0 -0
  40. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/report/folder.py +0 -0
  41. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/report/preview.py +0 -0
  42. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/report/schema_cmds.py +0 -0
  43. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/schema.py +0 -0
  44. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/servicepack.py +0 -0
  45. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/source.py +0 -0
  46. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/studio.py +0 -0
  47. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/telemetry.py +0 -0
  48. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/commands/user.py +0 -0
  49. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/context.py +0 -0
  50. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/__init__.py +0 -0
  51. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/api/__init__.py +0 -0
  52. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/api/app_config.py +0 -0
  53. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/api/client.py +0 -0
  54. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/api/endpoints.py +0 -0
  55. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/api/metadata_models.py +0 -0
  56. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/api/models.py +0 -0
  57. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/auth/__init__.py +0 -0
  58. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/auth/decorators.py +0 -0
  59. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/auth/msal_client.py +0 -0
  60. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/auth/token_cache.py +0 -0
  61. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/cache.py +0 -0
  62. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/datasource/__init__.py +0 -0
  63. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/datasource/flow_generator.py +0 -0
  64. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/datasource/flow_models.py +0 -0
  65. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/datasource/generator.py +0 -0
  66. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/datasource/models.py +0 -0
  67. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/datasource/parsers.py +0 -0
  68. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/datasource/resolver.py +0 -0
  69. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/datasource/type_def_parser.py +0 -0
  70. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/datasource/validator.py +0 -0
  71. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/designer/__init__.py +0 -0
  72. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/designer/flow_models.py +0 -0
  73. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/designer/models.py +0 -0
  74. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/designer/parsers.py +0 -0
  75. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/devops/__init__.py +0 -0
  76. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/devops/client.py +0 -0
  77. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/devops/helpers.py +0 -0
  78. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/devops/models.py +0 -0
  79. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/dynamics/__init__.py +0 -0
  80. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/dynamics/client.py +0 -0
  81. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/dynamics/metadata_cache.py +0 -0
  82. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/footprint/__init__.py +0 -0
  83. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/footprint/client.py +0 -0
  84. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/footprint/edmx_parser.py +0 -0
  85. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/footprint/metadata.py +0 -0
  86. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/function/__init__.py +0 -0
  87. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/function/generator.py +0 -0
  88. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/function/models.py +0 -0
  89. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/function/validator.py +0 -0
  90. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/graph.py +0 -0
  91. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/output/__init__.py +0 -0
  92. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/output/csv_fmt.py +0 -0
  93. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/output/formatter.py +0 -0
  94. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/output/json_fmt.py +0 -0
  95. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/output/redaction.py +0 -0
  96. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/output/yaml_fmt.py +0 -0
  97. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/release_notes.py +0 -0
  98. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/responses.py +0 -0
  99. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/telemetry/__init__.py +0 -0
  100. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/telemetry/config.py +0 -0
  101. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/telemetry/identity.py +0 -0
  102. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/telemetry/recorder.py +0 -0
  103. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/telemetry/scrubber.py +0 -0
  104. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/core/telemetry/sender.py +0 -0
  105. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/models/__init__.py +0 -0
  106. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/report/__init__.py +0 -0
  107. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/report/datasource_binding.py +0 -0
  108. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/report/engine.py +0 -0
  109. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/report/field_parser.py +0 -0
  110. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/report/folder.py +0 -0
  111. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/report/manifest.py +0 -0
  112. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/report/models.py +0 -0
  113. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/report/preview.py +0 -0
  114. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/report/preview_arjs.py +0 -0
  115. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/report/schema.py +0 -0
  116. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/report/svg_renderer.py +0 -0
  117. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/report/templates/__init__.py +0 -0
  118. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/report/templates/bill_of_lading.rdlx-json +0 -0
  119. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/report/templates/shipping_label.rdlx-json +0 -0
  120. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/report/validate_arjs.py +0 -0
  121. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/report/validator.py +0 -0
  122. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/report/wrapper.py +0 -0
  123. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/utils/__init__.py +0 -0
  124. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/utils/click_options.py +0 -0
  125. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/utils/config.py +0 -0
  126. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/utils/errors.py +0 -0
  127. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/utils/filtering.py +0 -0
  128. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/utils/image.py +0 -0
  129. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/utils/paths.py +0 -0
  130. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/utils/resolvers.py +0 -0
  131. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/utils/responses.py +0 -0
  132. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/utils/restricted.py +0 -0
  133. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/utils/sorting.py +0 -0
  134. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/__init__.py +0 -0
  135. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/app.py +0 -0
  136. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/design.py +0 -0
  137. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/proxy_app.py +0 -0
  138. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/404/index.html +0 -0
  139. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/404.html +0 -0
  140. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/UgyAMtPjH-Pt0RYWOHzIT/_buildManifest.js +0 -0
  141. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/UgyAMtPjH-Pt0RYWOHzIT/_ssgManifest.js +0 -0
  142. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/0b24cca5-c1e1c8810348f107.js +0 -0
  143. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/255-102f2e5b2e3dc2ef.js +0 -0
  144. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/4bd1b696-c023c6e3521b1417.js +0 -0
  145. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/538-84e2e111415f1fda.js +0 -0
  146. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/697-0e000ab410d9f470.js +0 -0
  147. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/871-1acacdb7b4022abf.js +0 -0
  148. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/8b8f67fc-6295949a4b5485a4.js +0 -0
  149. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/909-c88abba3cf0caec3.js +0 -0
  150. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/app/_not-found/page-ea1be7001c230704.js +0 -0
  151. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/app/design/capture/page-a5e129c2d223432c.js +0 -0
  152. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/app/design/page-21ba66a3dd3b03f0.js +0 -0
  153. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/app/layout-2cc6eac09e476c91.js +0 -0
  154. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/app/page-20c358395882cdac.js +0 -0
  155. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/framework-de98b93a850cfc71.js +0 -0
  156. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/main-0f18f91200dac003.js +0 -0
  157. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/main-app-b69998d8941231d8.js +0 -0
  158. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/pages/_app-7d307437aca18ad4.js +0 -0
  159. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/pages/_error-cb2a52f75f2162e2.js +0 -0
  160. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -0
  161. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/chunks/webpack-2b297ada5306c17f.js +0 -0
  162. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/_next/static/css/360c657de5e04df8.css +0 -0
  163. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/design/capture/index.html +0 -0
  164. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/design/capture/index.txt +0 -0
  165. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/design/index.html +0 -0
  166. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/design/index.txt +0 -0
  167. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/index.html +0 -0
  168. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/index.txt +0 -0
  169. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/render-cli.js +0 -0
  170. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/src/dxs/web/static/report-preview.html +0 -0
  171. {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.4}/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.3
3
+ Version: 0.4.4
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.3"
7
+ version = "0.4.4"
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"
@@ -1,4 +1,4 @@
1
1
  """Datex Studio CLI - Command-line interface for Datex Studio platform."""
2
2
 
3
- __version__ = "0.4.3"
3
+ __version__ = "0.4.4"
4
4
  __app_name__ = "dxs"
@@ -15,9 +15,12 @@ from __future__ import annotations
15
15
 
16
16
  import json
17
17
  import os
18
+ import platform
18
19
  import re
19
20
  import shlex
21
+ import subprocess
20
22
  import sys
23
+ import tempfile
21
24
  import threading
22
25
  import time
23
26
  from pathlib import Path
@@ -146,16 +149,29 @@ def detect_upgrade_command() -> str:
146
149
 
147
150
 
148
151
  def _run_upgrade(command: str) -> int:
149
- """Replace this process with the upgrade command.
150
-
151
- Using ``os.execvp`` is intentional: it tears down the running ``dxs``
152
- process before the upgrade tool (uv/pipx/pip) starts rewriting the venv,
153
- avoiding "file in use" conflicts where the upgrader can't replace the
154
- binary or package files while ``dxs`` is still running.
155
-
156
- On success this function does not return the process image is replaced.
157
- Returns 1 only when exec itself fails to start.
152
+ """Hand off to the upgrade command, tearing down this process first.
153
+
154
+ POSIX uses ``os.execvp``, which truly replaces the process image and
155
+ frees all file handles before the upgrader (uv/pipx/pip) starts rewriting
156
+ the venv.
157
+
158
+ Windows is different: ``os.execvp`` there spawns a child and exits, but
159
+ Windows holds an exclusive image-file lock on the running ``dxs.exe``
160
+ launcher (e.g. ``~/.local/bin/dxs.exe``) until the launcher process fully
161
+ terminates — uv races ahead and fails to overwrite the entry-point shim
162
+ with "os error 32: file in use". So on Windows we write a small batch
163
+ helper that waits briefly for the launcher to exit, then runs the
164
+ upgrade in a fresh console window, and we exit immediately to release
165
+ the lock.
166
+
167
+ On success this function does not return. Returns 1 only when the
168
+ upgrade fails to start.
158
169
  """
170
+ command = command.strip()
171
+ if not command:
172
+ click.echo("Upgrade command was empty.", err=True)
173
+ return 1
174
+
159
175
  click.echo(f"Running: {command}", err=True)
160
176
  try:
161
177
  sys.stdout.flush()
@@ -163,10 +179,10 @@ def _run_upgrade(command: str) -> int:
163
179
  except Exception: # noqa: BLE001
164
180
  pass
165
181
 
182
+ if platform.system() == "Windows":
183
+ return _spawn_windows_upgrade(command)
184
+
166
185
  args = shlex.split(command)
167
- if not args:
168
- click.echo("Upgrade command was empty.", err=True)
169
- return 1
170
186
  try:
171
187
  os.execvp(args[0], args)
172
188
  except OSError as e:
@@ -175,6 +191,62 @@ def _run_upgrade(command: str) -> int:
175
191
  return 1 # unreachable on success
176
192
 
177
193
 
194
+ def _spawn_windows_upgrade(command: str) -> int:
195
+ """Spawn the upgrade in a new console window detached from this process.
196
+
197
+ Writes a temporary ``.cmd`` file that waits ~3 seconds for ``dxs.exe`` to
198
+ fully terminate (releasing Windows' image-file lock on the launcher),
199
+ then runs the upgrade with one short retry if the first attempt still
200
+ hits a file-in-use error. The current process exits immediately so the
201
+ lock is released as quickly as possible.
202
+ """
203
+ script = (
204
+ "@echo off\r\n"
205
+ "echo Waiting for dxs to exit so its files can be replaced...\r\n"
206
+ # ping -n N sleeps roughly (N-1) seconds; portable across all
207
+ # Windows versions where `timeout` may not be available.
208
+ "ping -n 4 127.0.0.1 > nul\r\n"
209
+ f"echo Running: {command}\r\n"
210
+ f"{command}\r\n"
211
+ "if %ERRORLEVEL% NEQ 0 (\r\n"
212
+ " echo.\r\n"
213
+ " echo First attempt failed; waiting and retrying once...\r\n"
214
+ " ping -n 6 127.0.0.1 > nul\r\n"
215
+ f" {command}\r\n"
216
+ ")\r\n"
217
+ "echo.\r\n"
218
+ "if %ERRORLEVEL% NEQ 0 (echo Upgrade failed.) else (echo Upgrade complete.)\r\n"
219
+ "echo.\r\n"
220
+ "pause\r\n"
221
+ )
222
+
223
+ try:
224
+ fd, script_path = tempfile.mkstemp(prefix="dxs-upgrade-", suffix=".cmd")
225
+ with os.fdopen(fd, "w", newline="") as f:
226
+ f.write(script)
227
+ except OSError as e:
228
+ click.echo(f"Failed to write upgrade helper script: {e}", err=True)
229
+ return 1
230
+
231
+ click.echo(
232
+ "Spawning the upgrade in a new console window so dxs can exit and release its files.",
233
+ err=True,
234
+ )
235
+
236
+ CREATE_NEW_CONSOLE = 0x00000010
237
+ try:
238
+ subprocess.Popen(
239
+ ["cmd.exe", "/c", script_path],
240
+ creationflags=CREATE_NEW_CONSOLE,
241
+ close_fds=True,
242
+ )
243
+ except OSError as e:
244
+ click.echo(f"Failed to spawn upgrade: {e}", err=True)
245
+ return 1
246
+
247
+ sys.exit(0)
248
+
249
+
178
250
  def _interactive() -> bool:
179
251
  """True only when stdin, stderr, and stdout are all attached to a TTY.
180
252
 
@@ -231,8 +303,8 @@ def maybe_show_update_notice(skip: bool = False) -> None:
231
303
  err=True,
232
304
  )
233
305
  exit_code = _run_upgrade(upgrade_cmd)
234
- # _run_upgrade only returns when exec failed to start.
235
- click.echo(f" Upgrade exited with code {exit_code}.", err=True)
306
+ # _run_upgrade only returns when the upgrade failed to start.
307
+ click.echo(f" Upgrade failed to start (code {exit_code}).", err=True)
236
308
  except (click.Abort, EOFError):
237
309
  click.echo("", err=True)
238
310
  return