datex-studio-cli 0.4.14__tar.gz → 0.4.16__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.14 → datex_studio_cli-0.4.16}/PKG-INFO +1 -1
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/pyproject.toml +1 -1
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/__init__.py +1 -1
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/auth.py +59 -24
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/crm.py +353 -110
- datex_studio_cli-0.4.16/src/dxs/commands/crm_delivery.py +1110 -0
- datex_studio_cli-0.4.16/src/dxs/commands/crm_time.py +915 -0
- datex_studio_cli-0.4.16/src/dxs/core/auth/tenants.py +164 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/dynamics/client.py +10 -1
- datex_studio_cli-0.4.16/src/dxs/core/dynamics/html.py +33 -0
- datex_studio_cli-0.4.16/src/dxs/core/dynamics/resolvers.py +160 -0
- datex_studio_cli-0.4.16/src/dxs/core/dynamics/time_entry.py +148 -0
- datex_studio_cli-0.4.14/src/dxs/core/auth/tenants.py +0 -71
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/.gitignore +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/README.md +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/report-creator.skill +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/scripts/analyze_corpus.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/scripts/generate_rdlx_schema.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/__main__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/cli.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/api.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/branch.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/cascade.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/config.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/configuration.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/datasource.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/devops.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/document.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/endpoint.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/env.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/explore.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/function.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/init.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/marketplace.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/ng/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/ng/_common.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/ng/api.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/ng/create.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/ng/data.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/ng/pack.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/ng/preview.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/odata.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/organization.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/proxy.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/reference.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/release_notes.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/repo.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/report/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/report/add_cmds.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/report/api.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/report/batch.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/report/create.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/report/data.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/report/dataset.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/report/edit.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/report/folder.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/report/preview.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/report/schema_cmds.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/reset.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/schema.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/servicepack.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/source.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/studio.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/telemetry.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/commands/user.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/context.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/api/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/api/app_config.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/api/client.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/api/endpoints.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/api/metadata_models.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/api/models.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/api/reference_graph.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/auth/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/auth/datex_tenant.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/auth/decorators.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/auth/msal_client.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/auth/token_cache.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/cache.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/datasource/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/datasource/flow_generator.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/datasource/flow_models.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/datasource/generator.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/datasource/models.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/datasource/parsers.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/datasource/resolver.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/datasource/type_def_parser.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/datasource/validator.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/designer/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/designer/flow_models.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/designer/models.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/designer/parsers.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/devops/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/devops/client.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/devops/helpers.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/devops/models.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/dynamics/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/dynamics/metadata_cache.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/footprint/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/footprint/client.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/footprint/edmx_parser.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/footprint/metadata.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/function/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/function/generator.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/function/models.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/function/validator.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/graph.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/onboarding.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/output/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/output/csv_fmt.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/output/formatter.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/output/json_fmt.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/output/redaction.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/output/yaml_fmt.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/release_notes.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/responses.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/telemetry/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/telemetry/config.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/telemetry/identity.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/telemetry/recorder.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/telemetry/scrubber.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/core/telemetry/sender.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/models/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/ng/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/ng/folder.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/ng/manifest.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/ng/mocks.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/ng/preview.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/ng/scaffold.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/py.typed +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/report/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/report/datasource_binding.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/report/engine.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/report/field_parser.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/report/folder.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/report/manifest.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/report/models.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/report/preview.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/report/preview_arjs.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/report/schema.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/report/svg_renderer.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/report/templates/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/report/templates/bill_of_lading.rdlx-json +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/report/templates/shipping_label.rdlx-json +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/report/validate_arjs.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/report/validator.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/report/wrapper.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/utils/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/utils/click_options.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/utils/clipboard.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/utils/config.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/utils/errors.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/utils/filtering.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/utils/image.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/utils/paths.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/utils/resolvers.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/utils/responses.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/utils/restricted.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/utils/sorting.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/utils/update_check.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/utils/versioning.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/__init__.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/app.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/design.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/proxy_app.py +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/404/index.html +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/404.html +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/UgyAMtPjH-Pt0RYWOHzIT/_buildManifest.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/UgyAMtPjH-Pt0RYWOHzIT/_ssgManifest.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/0b24cca5-c1e1c8810348f107.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/255-102f2e5b2e3dc2ef.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/4bd1b696-c023c6e3521b1417.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/538-84e2e111415f1fda.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/697-0e000ab410d9f470.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/871-1acacdb7b4022abf.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/8b8f67fc-6295949a4b5485a4.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/909-c88abba3cf0caec3.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/app/_not-found/page-ea1be7001c230704.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/app/design/capture/page-a5e129c2d223432c.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/app/design/page-21ba66a3dd3b03f0.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/app/layout-2cc6eac09e476c91.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/app/page-20c358395882cdac.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/framework-de98b93a850cfc71.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/main-0f18f91200dac003.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/main-app-b69998d8941231d8.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/pages/_app-7d307437aca18ad4.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/pages/_error-cb2a52f75f2162e2.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/chunks/webpack-2b297ada5306c17f.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/_next/static/css/360c657de5e04df8.css +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/design/capture/index.html +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/design/capture/index.txt +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/design/index.html +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/design/index.txt +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/index.html +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/index.txt +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/render-cli.js +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/report-preview.html +0 -0
- {datex_studio_cli-0.4.14 → datex_studio_cli-0.4.16}/src/dxs/web/static/report-validate.html +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: datex-studio-cli
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.16
|
|
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
|
|
@@ -15,7 +15,7 @@ from dxs.core.auth.decorators import get_access_token
|
|
|
15
15
|
from dxs.core.auth.tenants import org_needs_tenant_login, tenant_authority_for
|
|
16
16
|
from dxs.core.auth.token_cache import CachedIdentity, get_identity_override
|
|
17
17
|
from dxs.core.footprint import get_footprint_token
|
|
18
|
-
from dxs.utils.errors import AuthenticationError, ValidationError
|
|
18
|
+
from dxs.utils.errors import AuthenticationError, DxsError, ValidationError
|
|
19
19
|
from dxs.utils.responses import list_response, single
|
|
20
20
|
from dxs.utils.restricted import restrict_in_restricted_mode
|
|
21
21
|
|
|
@@ -255,8 +255,12 @@ def auth() -> None:
|
|
|
255
255
|
default=None,
|
|
256
256
|
help="Footprint API app registration client secret (for daemon auth)",
|
|
257
257
|
)
|
|
258
|
-
@click.option("--tenant-id", default=None, help="
|
|
259
|
-
@click.option(
|
|
258
|
+
@click.option("--tenant-id", default=None, help="Entra tenant ID (customer self-service)")
|
|
259
|
+
@click.option(
|
|
260
|
+
"--domain",
|
|
261
|
+
default=None,
|
|
262
|
+
help="Entra domain (e.g. csw-wi.com) — resolves the tenant ID for you",
|
|
263
|
+
)
|
|
260
264
|
@pass_context
|
|
261
265
|
def login(
|
|
262
266
|
ctx: DxsContext,
|
|
@@ -275,8 +279,11 @@ def login(
|
|
|
275
279
|
If you are already authenticated with a different identity, this will
|
|
276
280
|
add a new identity and set it as active (use 'dxs auth switch' to change).
|
|
277
281
|
|
|
278
|
-
|
|
279
|
-
|
|
282
|
+
Name an organization to authenticate against its own Entra tenant, looked up
|
|
283
|
+
from the API. On a machine with no credentials that lookup is impossible, so
|
|
284
|
+
pass --domain instead: it is resolved against Entra's public discovery
|
|
285
|
+
document and needs no prior authentication. --tenant-id does the same when
|
|
286
|
+
you already know the GUID.
|
|
280
287
|
|
|
281
288
|
Use --client-id and --client-secret together to configure daemon (client
|
|
282
289
|
credentials) authentication for the Footprint API, needed for cross-tenant
|
|
@@ -284,8 +291,10 @@ def login(
|
|
|
284
291
|
|
|
285
292
|
\b
|
|
286
293
|
Examples:
|
|
287
|
-
dxs auth login
|
|
288
|
-
dxs auth login CAG
|
|
294
|
+
dxs auth login # Login to default tenant
|
|
295
|
+
dxs auth login CAG # Login to CAG's tenant (needs an identity)
|
|
296
|
+
dxs auth login --domain csw-wi.com # Bootstrap: no identity required
|
|
297
|
+
dxs auth login --tenant-id <guid> # Same, when you know the GUID
|
|
289
298
|
dxs auth login CAG --client-id <id> --client-secret <secret>
|
|
290
299
|
"""
|
|
291
300
|
_reject_tenant_override(ctx, "login")
|
|
@@ -304,20 +313,33 @@ def login(
|
|
|
304
313
|
)
|
|
305
314
|
raise SystemExit(1)
|
|
306
315
|
|
|
307
|
-
if
|
|
316
|
+
if org and (tenant_id or domain):
|
|
308
317
|
ctx.output_error(
|
|
309
318
|
ValidationError(
|
|
310
|
-
message="Pass either an organization name or --tenant-id, not both",
|
|
319
|
+
message="Pass either an organization name or --domain/--tenant-id, not both",
|
|
311
320
|
code="DXS-AUTH-017",
|
|
312
321
|
suggestions=[
|
|
313
|
-
"dxs auth login <org>
|
|
314
|
-
"dxs auth login --
|
|
322
|
+
"dxs auth login <org> # Datex staff / known org",
|
|
323
|
+
"dxs auth login --domain <domain> # customer self-service",
|
|
324
|
+
"dxs auth login --tenant-id <guid> # when you know the GUID",
|
|
315
325
|
],
|
|
316
326
|
)
|
|
317
327
|
)
|
|
318
328
|
raise SystemExit(1)
|
|
319
329
|
|
|
320
|
-
if tenant_id:
|
|
330
|
+
if tenant_id or domain:
|
|
331
|
+
# Bootstrap path: no API lookup, so it works with an empty credentials
|
|
332
|
+
# cache. An explicit GUID wins, making the domain lookup free to skip.
|
|
333
|
+
if not tenant_id:
|
|
334
|
+
from dxs.core.auth.tenants import normalize_entra_domain, resolve_tenant_id_from_domain
|
|
335
|
+
|
|
336
|
+
try:
|
|
337
|
+
tenant_id = resolve_tenant_id_from_domain(domain) # type: ignore[arg-type]
|
|
338
|
+
except DxsError as e:
|
|
339
|
+
ctx.output_error(e)
|
|
340
|
+
raise SystemExit(1) from None
|
|
341
|
+
# Store/display the bare domain, never the sign-in address it came from.
|
|
342
|
+
domain = normalize_entra_domain(domain) # type: ignore[arg-type]
|
|
321
343
|
|
|
322
344
|
def on_device_code_external(device_code: dict[str, Any]) -> None:
|
|
323
345
|
ctx.output(
|
|
@@ -873,12 +895,12 @@ def switch(
|
|
|
873
895
|
@click.option(
|
|
874
896
|
"--tenant-id",
|
|
875
897
|
default=None,
|
|
876
|
-
help="
|
|
898
|
+
help="Entra tenant ID — self-service; skips the organization lookup",
|
|
877
899
|
)
|
|
878
900
|
@click.option(
|
|
879
901
|
"--domain",
|
|
880
902
|
default=None,
|
|
881
|
-
help="
|
|
903
|
+
help="Entra domain (e.g. csw-wi.com) — resolves the tenant ID for you",
|
|
882
904
|
)
|
|
883
905
|
@click.option("--open/--no-open", default=True, help="Open URL in browser (default: yes)")
|
|
884
906
|
@pass_context
|
|
@@ -889,33 +911,46 @@ def consent(
|
|
|
889
911
|
domain: str | None,
|
|
890
912
|
open: bool,
|
|
891
913
|
) -> None:
|
|
892
|
-
"""Generate admin consent URL
|
|
914
|
+
"""Generate the admin consent URL for an organization's Entra tenant.
|
|
893
915
|
|
|
894
|
-
|
|
895
|
-
|
|
916
|
+
Identify the tenant one of three ways: an organization NAME (Datex staff —
|
|
917
|
+
looked up from the API), a --domain (resolved against Entra's public
|
|
918
|
+
discovery document, no authentication needed), or a --tenant-id directly.
|
|
896
919
|
"""
|
|
897
920
|
import webbrowser
|
|
898
921
|
|
|
922
|
+
from dxs.core.auth.tenants import normalize_entra_domain, resolve_tenant_id_from_domain
|
|
899
923
|
from dxs.utils.config import get_settings
|
|
900
924
|
|
|
901
|
-
if not org and not tenant_id:
|
|
925
|
+
if not org and not tenant_id and not domain:
|
|
902
926
|
ctx.output_error(
|
|
903
927
|
ValidationError(
|
|
904
|
-
message="Provide an organization name or --tenant-id",
|
|
928
|
+
message="Provide an organization name, --domain, or --tenant-id",
|
|
905
929
|
code="DXS-AUTH-016",
|
|
906
930
|
suggestions=[
|
|
907
|
-
"dxs auth consent <org>
|
|
908
|
-
"dxs auth consent --
|
|
931
|
+
"dxs auth consent <org> # Datex staff (API lookup)",
|
|
932
|
+
"dxs auth consent --domain <domain> # resolves the tenant for you",
|
|
933
|
+
"dxs auth consent --tenant-id <id> # when you already know the GUID",
|
|
909
934
|
],
|
|
910
935
|
)
|
|
911
936
|
)
|
|
912
937
|
raise SystemExit(1)
|
|
913
938
|
|
|
914
|
-
if tenant_id:
|
|
915
|
-
# Self-service:
|
|
939
|
+
if tenant_id or domain:
|
|
940
|
+
# Self-service: no API lookup. An explicit GUID wins over the domain, so
|
|
941
|
+
# supplying both never costs a network round trip.
|
|
916
942
|
org_name = org or "your organization"
|
|
917
943
|
org_id: int | None = None
|
|
918
|
-
|
|
944
|
+
if tenant_id:
|
|
945
|
+
resolved_tenant_id = tenant_id
|
|
946
|
+
else:
|
|
947
|
+
try:
|
|
948
|
+
resolved_tenant_id = resolve_tenant_id_from_domain(domain) # type: ignore[arg-type]
|
|
949
|
+
except DxsError as e:
|
|
950
|
+
ctx.output_error(e)
|
|
951
|
+
raise SystemExit(1) from None
|
|
952
|
+
# Display the bare domain, never the sign-in address it came from.
|
|
953
|
+
domain = normalize_entra_domain(domain) # type: ignore[arg-type]
|
|
919
954
|
resolved_domain = domain
|
|
920
955
|
else:
|
|
921
956
|
org_info = _fetch_organization_by_name(ctx, org) # type: ignore[arg-type]
|