datex-studio-cli 0.4.3__tar.gz → 0.4.5__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.
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/PKG-INFO +1 -1
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/pyproject.toml +1 -1
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/__init__.py +1 -1
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/cli.py +25 -16
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/utils/update_check.py +39 -69
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/.gitignore +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/README.md +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/report-creator.skill +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/scripts/analyze_corpus.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/scripts/generate_rdlx_schema.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/__main__.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/__init__.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/api.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/auth.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/branch.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/config.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/configuration.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/crm.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/datasource.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/devops.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/document.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/endpoint.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/env.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/explore.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/function.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/marketplace.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/odata.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/organization.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/proxy.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/release_notes.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/repo.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/report/__init__.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/report/add_cmds.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/report/api.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/report/batch.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/report/create.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/report/data.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/report/dataset.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/report/edit.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/report/folder.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/report/preview.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/report/schema_cmds.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/schema.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/servicepack.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/source.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/studio.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/telemetry.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/commands/user.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/context.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/__init__.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/api/__init__.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/api/app_config.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/api/client.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/api/endpoints.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/api/metadata_models.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/api/models.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/auth/__init__.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/auth/decorators.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/auth/msal_client.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/auth/token_cache.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/cache.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/datasource/__init__.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/datasource/flow_generator.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/datasource/flow_models.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/datasource/generator.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/datasource/models.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/datasource/parsers.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/datasource/resolver.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/datasource/type_def_parser.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/datasource/validator.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/designer/__init__.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/designer/flow_models.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/designer/models.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/designer/parsers.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/devops/__init__.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/devops/client.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/devops/helpers.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/devops/models.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/dynamics/__init__.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/dynamics/client.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/dynamics/metadata_cache.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/footprint/__init__.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/footprint/client.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/footprint/edmx_parser.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/footprint/metadata.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/function/__init__.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/function/generator.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/function/models.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/function/validator.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/graph.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/output/__init__.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/output/csv_fmt.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/output/formatter.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/output/json_fmt.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/output/redaction.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/output/yaml_fmt.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/release_notes.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/responses.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/telemetry/__init__.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/telemetry/config.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/telemetry/identity.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/telemetry/recorder.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/telemetry/scrubber.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/telemetry/sender.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/models/__init__.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/report/__init__.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/report/datasource_binding.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/report/engine.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/report/field_parser.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/report/folder.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/report/manifest.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/report/models.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/report/preview.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/report/preview_arjs.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/report/schema.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/report/svg_renderer.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/report/templates/__init__.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/report/templates/bill_of_lading.rdlx-json +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/report/templates/shipping_label.rdlx-json +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/report/validate_arjs.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/report/validator.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/report/wrapper.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/utils/__init__.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/utils/click_options.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/utils/config.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/utils/errors.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/utils/filtering.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/utils/image.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/utils/paths.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/utils/resolvers.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/utils/responses.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/utils/restricted.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/utils/sorting.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/__init__.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/app.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/design.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/proxy_app.py +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/404/index.html +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/404.html +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/UgyAMtPjH-Pt0RYWOHzIT/_buildManifest.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/UgyAMtPjH-Pt0RYWOHzIT/_ssgManifest.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/0b24cca5-c1e1c8810348f107.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/255-102f2e5b2e3dc2ef.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/4bd1b696-c023c6e3521b1417.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/538-84e2e111415f1fda.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/697-0e000ab410d9f470.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/871-1acacdb7b4022abf.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/8b8f67fc-6295949a4b5485a4.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/909-c88abba3cf0caec3.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/app/_not-found/page-ea1be7001c230704.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/app/design/capture/page-a5e129c2d223432c.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/app/design/page-21ba66a3dd3b03f0.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/app/layout-2cc6eac09e476c91.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/app/page-20c358395882cdac.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/framework-de98b93a850cfc71.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/main-0f18f91200dac003.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/main-app-b69998d8941231d8.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/pages/_app-7d307437aca18ad4.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/pages/_error-cb2a52f75f2162e2.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/chunks/webpack-2b297ada5306c17f.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/_next/static/css/360c657de5e04df8.css +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/design/capture/index.html +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/design/capture/index.txt +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/design/index.html +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/design/index.txt +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/index.html +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/index.txt +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/render-cli.js +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/report-preview.html +0 -0
- {datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/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
|
+
Version: 0.4.5
|
|
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
|
|
@@ -507,18 +507,20 @@ def _ctx_extras(dxs_ctx: "DxsContext | None") -> dict[str, Any]:
|
|
|
507
507
|
|
|
508
508
|
|
|
509
509
|
@cli.command("update")
|
|
510
|
-
|
|
511
|
-
"
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
510
|
+
def update_cmd() -> None:
|
|
511
|
+
"""Check PyPI for a newer release and print the upgrade command.
|
|
512
|
+
|
|
513
|
+
This command never performs the upgrade itself — run the printed
|
|
514
|
+
command in a fresh shell. This avoids the running-binary file-lock
|
|
515
|
+
issues that any in-process upgrade hits on Windows.
|
|
516
|
+
"""
|
|
517
|
+
import time
|
|
518
|
+
|
|
519
519
|
from dxs.utils.update_check import (
|
|
520
|
+
PACKAGE_NAME,
|
|
520
521
|
_fetch_latest_version,
|
|
521
|
-
|
|
522
|
+
_read_cache,
|
|
523
|
+
_write_cache,
|
|
522
524
|
detect_upgrade_command,
|
|
523
525
|
is_newer,
|
|
524
526
|
)
|
|
@@ -536,12 +538,19 @@ def update_cmd(check_only: bool) -> None:
|
|
|
536
538
|
return
|
|
537
539
|
|
|
538
540
|
upgrade_cmd = detect_upgrade_command()
|
|
539
|
-
click.echo(
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
541
|
+
click.echo("", err=True)
|
|
542
|
+
click.echo(f" A new release of dxs is available: {__version__} → {latest}", err=True)
|
|
543
|
+
click.echo(f" To upgrade, run: {upgrade_cmd}", err=True)
|
|
544
|
+
click.echo(f" https://pypi.org/project/{PACKAGE_NAME}/{latest}/", err=True)
|
|
545
|
+
|
|
546
|
+
# Refresh the cache and suppress the auto-banner for the next dedupe
|
|
547
|
+
# window — the user has explicitly seen the news.
|
|
548
|
+
now = time.time()
|
|
549
|
+
cache = _read_cache() or {}
|
|
550
|
+
cache["latest"] = latest
|
|
551
|
+
cache["checked_at"] = now
|
|
552
|
+
cache["last_notified_at"] = now
|
|
553
|
+
_write_cache(cache)
|
|
545
554
|
|
|
546
555
|
|
|
547
556
|
# Register commands when module loads
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
"""PyPI update
|
|
1
|
+
"""PyPI update notifier.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
After each command, if the on-disk cache says a newer version exists on
|
|
4
|
+
PyPI, print a one-time banner to stderr telling the user how to upgrade.
|
|
5
|
+
The actual upgrade is the user's responsibility — we never exec, spawn,
|
|
6
|
+
or otherwise touch the running install. This sidesteps every file-lock,
|
|
7
|
+
process-replacement, and platform-specific upgrade problem.
|
|
8
|
+
|
|
9
|
+
The PyPI fetch happens in a background daemon thread, so a stale cache is
|
|
10
|
+
refreshed for *next* time. The current run never blocks on the network.
|
|
7
11
|
|
|
8
12
|
Environment / flag controls:
|
|
9
13
|
- ``DXS_NO_UPDATE_CHECK=1`` disables both the check and the banner.
|
|
@@ -16,7 +20,6 @@ from __future__ import annotations
|
|
|
16
20
|
import json
|
|
17
21
|
import os
|
|
18
22
|
import re
|
|
19
|
-
import shlex
|
|
20
23
|
import sys
|
|
21
24
|
import threading
|
|
22
25
|
import time
|
|
@@ -31,7 +34,7 @@ from dxs.utils.paths import get_datex_home
|
|
|
31
34
|
PYPI_URL = "https://pypi.org/pypi/datex-studio-cli/json"
|
|
32
35
|
PACKAGE_NAME = "datex-studio-cli"
|
|
33
36
|
CACHE_TTL_SECONDS = 24 * 60 * 60
|
|
34
|
-
|
|
37
|
+
NOTIFY_DEDUPE_SECONDS = 60 * 60 # at most one banner per hour per machine
|
|
35
38
|
HTTP_TIMEOUT_SECONDS = 2.0
|
|
36
39
|
|
|
37
40
|
_CI_ENV_VARS = ("CI", "CONTINUOUS_INTEGRATION", "GITHUB_ACTIONS", "BUILDKITE", "TF_BUILD")
|
|
@@ -145,58 +148,44 @@ def detect_upgrade_command() -> str:
|
|
|
145
148
|
return f"{exe} -m pip install --upgrade {PACKAGE_NAME}"
|
|
146
149
|
|
|
147
150
|
|
|
148
|
-
def
|
|
149
|
-
"""
|
|
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.
|
|
151
|
+
def _stderr_is_tty() -> bool:
|
|
152
|
+
"""True when stderr is attached to a TTY.
|
|
155
153
|
|
|
156
|
-
|
|
157
|
-
|
|
154
|
+
Only stderr matters — the banner is written there. Piping stdout (e.g.
|
|
155
|
+
``dxs odata ... | jq``) leaves stderr untouched, so the user still sees
|
|
156
|
+
the banner in their terminal. Redirecting stderr (``2>log``) suppresses
|
|
157
|
+
it, as intended.
|
|
158
158
|
"""
|
|
159
|
-
|
|
160
|
-
try:
|
|
161
|
-
sys.stdout.flush()
|
|
162
|
-
sys.stderr.flush()
|
|
163
|
-
except Exception: # noqa: BLE001
|
|
164
|
-
pass
|
|
165
|
-
|
|
166
|
-
args = shlex.split(command)
|
|
167
|
-
if not args:
|
|
168
|
-
click.echo("Upgrade command was empty.", err=True)
|
|
169
|
-
return 1
|
|
170
|
-
try:
|
|
171
|
-
os.execvp(args[0], args)
|
|
172
|
-
except OSError as e:
|
|
173
|
-
click.echo(f"Upgrade failed to start: {e}", err=True)
|
|
174
|
-
return 1
|
|
175
|
-
return 1 # unreachable on success
|
|
159
|
+
return sys.stderr.isatty()
|
|
176
160
|
|
|
177
161
|
|
|
178
|
-
def
|
|
179
|
-
"""
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
162
|
+
def _print_banner(latest: str, upgrade_cmd: str) -> None:
|
|
163
|
+
"""Print the update banner to stderr."""
|
|
164
|
+
click.echo("", err=True)
|
|
165
|
+
click.echo(
|
|
166
|
+
f" A new release of dxs is available: {__version__} → {latest}",
|
|
167
|
+
err=True,
|
|
168
|
+
)
|
|
169
|
+
click.echo(f" To upgrade, run: {upgrade_cmd}", err=True)
|
|
170
|
+
click.echo(f" https://pypi.org/project/{PACKAGE_NAME}/{latest}/", err=True)
|
|
186
171
|
|
|
187
172
|
|
|
188
173
|
def maybe_show_update_notice(skip: bool = False) -> None:
|
|
189
|
-
"""
|
|
174
|
+
"""If the cache shows a newer version, print a one-time banner to stderr.
|
|
190
175
|
|
|
191
|
-
Always returns quickly — the
|
|
176
|
+
Always returns quickly — the PyPI fetch happens in a background thread
|
|
177
|
+
that only writes to the cache. The first run on a stale cache prints
|
|
178
|
+
nothing; the next run sees the refreshed cache and prints the banner.
|
|
179
|
+
Dedupe keeps it to one banner per ``NOTIFY_DEDUPE_SECONDS`` window so
|
|
180
|
+
fast-fire commands don't spam.
|
|
192
181
|
|
|
193
182
|
Args:
|
|
194
|
-
skip: If True, skip both the check and any cache refresh. Used to
|
|
195
|
-
``--no-update-check``.
|
|
183
|
+
skip: If True, skip both the check and any cache refresh. Used to
|
|
184
|
+
honor ``--no-update-check``.
|
|
196
185
|
"""
|
|
197
186
|
if skip or is_disabled() or _is_ci():
|
|
198
187
|
return
|
|
199
|
-
if not
|
|
188
|
+
if not _stderr_is_tty():
|
|
200
189
|
return
|
|
201
190
|
|
|
202
191
|
cache = _read_cache()
|
|
@@ -209,30 +198,11 @@ def maybe_show_update_notice(skip: bool = False) -> None:
|
|
|
209
198
|
if not isinstance(latest, str) or not is_newer(latest, __version__):
|
|
210
199
|
return
|
|
211
200
|
|
|
212
|
-
|
|
213
|
-
if time.time() -
|
|
201
|
+
last_notified = float(cache.get("last_notified_at", 0))
|
|
202
|
+
if time.time() - last_notified < NOTIFY_DEDUPE_SECONDS:
|
|
214
203
|
return
|
|
215
204
|
|
|
216
|
-
|
|
217
|
-
click.echo("", err=True)
|
|
218
|
-
click.echo(
|
|
219
|
-
f" dxs {latest} is available (you have {__version__})",
|
|
220
|
-
err=True,
|
|
221
|
-
)
|
|
222
|
-
click.echo(f" Upgrade command: {upgrade_cmd}", err=True)
|
|
205
|
+
_print_banner(latest, detect_upgrade_command())
|
|
223
206
|
|
|
224
|
-
cache["
|
|
207
|
+
cache["last_notified_at"] = time.time()
|
|
225
208
|
_write_cache(cache)
|
|
226
|
-
|
|
227
|
-
try:
|
|
228
|
-
if click.confirm(" Upgrade now?", default=False, err=True):
|
|
229
|
-
click.echo(
|
|
230
|
-
" After upgrade completes, re-run your dxs command to use the new version.",
|
|
231
|
-
err=True,
|
|
232
|
-
)
|
|
233
|
-
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)
|
|
236
|
-
except (click.Abort, EOFError):
|
|
237
|
-
click.echo("", err=True)
|
|
238
|
-
return
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/core/datasource/type_def_parser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/report/templates/bill_of_lading.rdlx-json
RENAMED
|
File without changes
|
{datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/report/templates/shipping_label.rdlx-json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/design/capture/index.html
RENAMED
|
File without changes
|
{datex_studio_cli-0.4.3 → datex_studio_cli-0.4.5}/src/dxs/web/static/design/capture/index.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|