gooddata-sdk 1.48.1.dev3__tar.gz → 1.48.1.dev4__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.
- {gooddata_sdk-1.48.1.dev3/gooddata_sdk.egg-info → gooddata_sdk-1.48.1.dev4}/PKG-INFO +4 -4
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/README.md +1 -1
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/declarative_model/data_source.py +4 -4
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/declarative_model/physical_model/table.py +2 -2
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/user/declarative_model/user.py +2 -2
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/user/declarative_model/user_group.py +2 -2
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/content_service.py +9 -5
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/declarative_model/workspace/analytics_model/analytics_model.py +11 -11
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/declarative_model/workspace/analytics_model/base.py +2 -2
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/dataset/dataset.py +2 -2
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/dataset_extensions/dataset_extension.py +2 -2
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/date_dataset/date_dataset.py +2 -2
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/ldm.py +6 -6
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/declarative_model/workspace/workspace.py +12 -12
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/service.py +3 -2
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/utils.py +30 -3
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4/gooddata_sdk.egg-info}/PKG-INFO +4 -4
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk.egg-info/requires.txt +1 -1
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/setup.py +3 -3
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/LICENSE.txt +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/MANIFEST.in +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/bin/gdc +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/_version.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/base.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/catalog_service_base.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/action_model/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/action_model/requests/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/action_model/requests/ldm_request.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/action_model/requests/scan_model_request.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/action_model/requests/scan_sql_request.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/action_model/responses/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/action_model/responses/scan_sql_response.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/action_model/sql_column.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/declarative_model/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/declarative_model/physical_model/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/declarative_model/physical_model/column.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/declarative_model/physical_model/pdm.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/entity_model/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/entity_model/content_objects/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/entity_model/data_source.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/service.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/validation/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/validation/data_source.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/depends_on.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/entity.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/export/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/export/request.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/export/service.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/filter_by.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/identifier.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/common/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/common/dashboard_slides_template.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/common/running_section.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/common/slide_template.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/common/widget_slides_template.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/entity_model/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/entity_model/directive.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/entity_model/export_template.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/entity_model/identity_provider.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/entity_model/jwk.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/entity_model/llm_endpoint.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/entity_model/organization.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/entity_model/setting.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/layout/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/layout/export_template.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/layout/identity_provider.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/layout/notification_channel.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/service.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/parameter.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/permission/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/permission/declarative_model/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/permission/declarative_model/dashboard_assignees.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/permission/declarative_model/dashboard_permissions.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/permission/declarative_model/manage_dashboard_permissions.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/permission/declarative_model/permission.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/permission/service.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/rule.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/setting.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/types.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/user/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/user/declarative_model/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/user/declarative_model/user_and_user_groups.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/user/entity_model/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/user/entity_model/api_token.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/user/entity_model/user.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/user/entity_model/user_group.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/user/management_model/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/user/management_model/management.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/user/service.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/validate_by_item.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/declarative_model/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/declarative_model/workspace/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/declarative_model/workspace/analytics_model/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/declarative_model/workspace/analytics_model/export_definition.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/declarative_model/workspace/automation.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/data_filter_references.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/dataset/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/dataset_extensions/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/date_dataset/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/entity_model/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/entity_model/content_objects/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/entity_model/content_objects/dataset.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/entity_model/content_objects/metric.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/entity_model/content_objects/workspace_setting.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/entity_model/filter_view.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/entity_model/graph_objects/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/entity_model/graph_objects/graph.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/entity_model/user_data_filter.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/entity_model/workspace.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/model_container.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/cli/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/cli/clone.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/cli/constants.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/cli/deploy.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/cli/gdc_core.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/cli/package.json +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/cli/utils.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/client.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/compute/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/compute/compute_to_sdk_converter.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/compute/model/__init__.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/compute/model/attribute.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/compute/model/base.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/compute/model/execution.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/compute/model/filter.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/compute/model/metric.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/compute/service.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/compute/visualization_to_sdk_converter.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/config.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/py.typed +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/sdk.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/support.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/table.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/type_converter.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/visualization.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk.egg-info/SOURCES.txt +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk.egg-info/dependency_links.txt +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk.egg-info/top_level.txt +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/setup.cfg +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/tests/test_client.py +0 -0
- {gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/tests/test_type_converter.py +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gooddata-sdk
|
|
3
|
-
Version: 1.48.1.
|
|
3
|
+
Version: 1.48.1.dev4
|
|
4
4
|
Summary: GoodData Cloud Python SDK
|
|
5
5
|
Author: GoodData
|
|
6
6
|
Author-email: support@gooddata.com
|
|
7
7
|
License: MIT
|
|
8
|
-
Project-URL: Documentation, https://www.gooddata.com/docs/python-sdk/1.48.1.
|
|
8
|
+
Project-URL: Documentation, https://www.gooddata.com/docs/python-sdk/1.48.1.dev4
|
|
9
9
|
Project-URL: Source, https://github.com/gooddata/gooddata-python-sdk
|
|
10
10
|
Keywords: gooddata,sdk,api,analytics,headless,business,intelligence,headless-bi,cloud,native,semantic,layer,sql,metrics
|
|
11
11
|
Classifier: Development Status :: 5 - Production/Stable
|
|
@@ -23,7 +23,7 @@ Classifier: Typing :: Typed
|
|
|
23
23
|
Requires-Python: >=3.9.0
|
|
24
24
|
Description-Content-Type: text/markdown
|
|
25
25
|
License-File: LICENSE.txt
|
|
26
|
-
Requires-Dist: gooddata-api-client~=1.48.1.
|
|
26
|
+
Requires-Dist: gooddata-api-client~=1.48.1.dev4
|
|
27
27
|
Requires-Dist: python-dateutil>=2.5.3
|
|
28
28
|
Requires-Dist: pyyaml>=6.0
|
|
29
29
|
Requires-Dist: attrs<=24.2.0,>=21.4.0
|
|
@@ -59,7 +59,7 @@ At the moment the SDK provides services to inspect and interact with the Semanti
|
|
|
59
59
|
* Compute Service
|
|
60
60
|
* Table Service
|
|
61
61
|
|
|
62
|
-
See [DOCUMENTATION](https://www.gooddata.com/docs/python-sdk/1.48.1.
|
|
62
|
+
See [DOCUMENTATION](https://www.gooddata.com/docs/python-sdk/1.48.1.dev4) for more details.
|
|
63
63
|
|
|
64
64
|
## Requirements
|
|
65
65
|
|
|
@@ -13,7 +13,7 @@ At the moment the SDK provides services to inspect and interact with the Semanti
|
|
|
13
13
|
* Compute Service
|
|
14
14
|
* Table Service
|
|
15
15
|
|
|
16
|
-
See [DOCUMENTATION](https://www.gooddata.com/docs/python-sdk/1.48.1.
|
|
16
|
+
See [DOCUMENTATION](https://www.gooddata.com/docs/python-sdk/1.48.1.dev4) for more details.
|
|
17
17
|
|
|
18
18
|
## Requirements
|
|
19
19
|
|
|
@@ -110,11 +110,11 @@ class CatalogDeclarativeDataSources(Base):
|
|
|
110
110
|
def data_sources_folder(layout_organization_folder: Path) -> Path:
|
|
111
111
|
return layout_organization_folder / LAYOUT_DATA_SOURCES_DIR
|
|
112
112
|
|
|
113
|
-
def store_to_disk(self, layout_organization_folder: Path) -> None:
|
|
113
|
+
def store_to_disk(self, layout_organization_folder: Path, sort: bool = False) -> None:
|
|
114
114
|
data_sources_folder = self.data_sources_folder(layout_organization_folder)
|
|
115
115
|
create_directory(data_sources_folder)
|
|
116
116
|
for data_source in self.data_sources:
|
|
117
|
-
data_source.store_to_disk(data_sources_folder)
|
|
117
|
+
data_source.store_to_disk(data_sources_folder, sort=sort)
|
|
118
118
|
|
|
119
119
|
@classmethod
|
|
120
120
|
def load_from_disk(cls, layout_organization_folder: Path) -> CatalogDeclarativeDataSources:
|
|
@@ -201,12 +201,12 @@ class CatalogDeclarativeDataSource(Base):
|
|
|
201
201
|
dictionary["client_secret"] = client_secret
|
|
202
202
|
return self.client_class().from_dict(dictionary)
|
|
203
203
|
|
|
204
|
-
def store_to_disk(self, data_sources_folder: Path) -> None:
|
|
204
|
+
def store_to_disk(self, data_sources_folder: Path, sort: bool = False) -> None:
|
|
205
205
|
data_source_folder = self.data_source_folder(data_sources_folder, self.id)
|
|
206
206
|
file_path = data_source_folder / f"{self.id}.yaml"
|
|
207
207
|
data_source_dict = self.to_api().to_dict(camel_case=True)
|
|
208
208
|
|
|
209
|
-
write_layout_to_file(file_path, data_source_dict)
|
|
209
|
+
write_layout_to_file(file_path, data_source_dict, sort=sort)
|
|
210
210
|
|
|
211
211
|
@classmethod
|
|
212
212
|
def load_from_disk(cls, data_sources_folder: Path, data_source_id: str) -> CatalogDeclarativeDataSource:
|
|
@@ -25,10 +25,10 @@ class CatalogDeclarativeTable(Base):
|
|
|
25
25
|
def client_class() -> builtins.type[DeclarativeTable]:
|
|
26
26
|
return DeclarativeTable
|
|
27
27
|
|
|
28
|
-
def store_to_disk(self, pdm_folder: Path) -> None:
|
|
28
|
+
def store_to_disk(self, pdm_folder: Path, sort: bool = False) -> None:
|
|
29
29
|
table_dict = self.to_api().to_dict(camel_case=True)
|
|
30
30
|
table_file_path = pdm_folder / f"{self.id}.yaml"
|
|
31
|
-
write_layout_to_file(table_file_path, table_dict)
|
|
31
|
+
write_layout_to_file(table_file_path, table_dict, sort=sort)
|
|
32
32
|
|
|
33
33
|
@classmethod
|
|
34
34
|
def load_from_disk(cls, table_file_path: Path) -> CatalogDeclarativeTable:
|
|
@@ -34,12 +34,12 @@ class CatalogDeclarativeUsers(Base):
|
|
|
34
34
|
users = [CatalogDeclarativeUser.from_dict(record, camel_case=True) for record in data]
|
|
35
35
|
return cls(users=users)
|
|
36
36
|
|
|
37
|
-
def store_to_disk(self, layout_organization_folder: Path) -> None:
|
|
37
|
+
def store_to_disk(self, layout_organization_folder: Path, sort: bool = False) -> None:
|
|
38
38
|
users_directory = layout_organization_folder / LAYOUT_USERS_DIR
|
|
39
39
|
users_file = users_directory / LAYOUT_USERS_FILE
|
|
40
40
|
create_directory(users_directory)
|
|
41
41
|
users = [user.to_dict(camel_case=True) for user in self.users]
|
|
42
|
-
write_layout_to_file(users_file, users)
|
|
42
|
+
write_layout_to_file(users_file, users, sort=sort)
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
@attr.s(auto_attribs=True, kw_only=True)
|
|
@@ -33,12 +33,12 @@ class CatalogDeclarativeUserGroups(Base):
|
|
|
33
33
|
user_groups = [CatalogDeclarativeUserGroup.from_dict(record, camel_case=True) for record in data]
|
|
34
34
|
return cls(user_groups=user_groups)
|
|
35
35
|
|
|
36
|
-
def store_to_disk(self, layout_organization_folder: Path) -> None:
|
|
36
|
+
def store_to_disk(self, layout_organization_folder: Path, sort: bool = False) -> None:
|
|
37
37
|
user_groups_directory = layout_organization_folder / LAYOUT_USER_GROUPS_DIR
|
|
38
38
|
user_groups_file = user_groups_directory / LAYOUT_USER_GROUPS_FILE
|
|
39
39
|
create_directory(user_groups_directory)
|
|
40
40
|
user_groups = [user_group.to_dict(camel_case=True) for user_group in self.user_groups]
|
|
41
|
-
write_layout_to_file(user_groups_file, user_groups)
|
|
41
|
+
write_layout_to_file(user_groups_file, user_groups, sort=sort)
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
@attr.s(auto_attribs=True, kw_only=True)
|
|
@@ -358,7 +358,7 @@ class CatalogWorkspaceContentService(CatalogServiceBase):
|
|
|
358
358
|
declarative_ldm = self.load_declarative_ldm(workspace_id, layout_root_path)
|
|
359
359
|
self.put_declarative_ldm(workspace_id, declarative_ldm, validator, standalone_copy)
|
|
360
360
|
|
|
361
|
-
def store_ldm_to_disk(self, workspace_id: str, path: Path = Path.cwd()) -> None:
|
|
361
|
+
def store_ldm_to_disk(self, workspace_id: str, path: Path = Path.cwd(), sort: bool = False) -> None:
|
|
362
362
|
"""Store declarative logical data model for a given workspace in directory hierarchy.
|
|
363
363
|
This method does not tie the LDM to the workspace and organization, thus it is recommended
|
|
364
364
|
for migration between organizations. If you want to backup LDM use store_declarative_ldm.
|
|
@@ -368,11 +368,13 @@ class CatalogWorkspaceContentService(CatalogServiceBase):
|
|
|
368
368
|
Workspace identification string e.g. "demo"
|
|
369
369
|
path (Path, optional):
|
|
370
370
|
Path to the root of the layout directory. Defaults to Path.cwd().
|
|
371
|
+
sort (bool, optional):
|
|
372
|
+
Flag if the output should be sorted before storing to disk. Default is False.
|
|
371
373
|
|
|
372
374
|
Returns:
|
|
373
375
|
None
|
|
374
376
|
"""
|
|
375
|
-
self.get_declarative_ldm(workspace_id).store_to_disk(path)
|
|
377
|
+
self.get_declarative_ldm(workspace_id).store_to_disk(path, sort=sort)
|
|
376
378
|
|
|
377
379
|
@staticmethod
|
|
378
380
|
def load_ldm_from_disk(path: Path = Path.cwd()) -> CatalogDeclarativeModel:
|
|
@@ -479,7 +481,7 @@ class CatalogWorkspaceContentService(CatalogServiceBase):
|
|
|
479
481
|
self.put_declarative_analytics_model(workspace_id, declarative_analytics_model)
|
|
480
482
|
|
|
481
483
|
def store_analytics_model_to_disk(
|
|
482
|
-
self, workspace_id: str, path: Path = Path.cwd(), exclude: Optional[list[str]] = None
|
|
484
|
+
self, workspace_id: str, path: Path = Path.cwd(), exclude: Optional[list[str]] = None, sort: bool = False
|
|
483
485
|
) -> None:
|
|
484
486
|
"""Store analytics model for a given workspace in directory hierarchy.This method does not tie the declarative
|
|
485
487
|
analytics model to the workspace and organization, thus it is recommended for migration between workspaces.
|
|
@@ -491,12 +493,14 @@ class CatalogWorkspaceContentService(CatalogServiceBase):
|
|
|
491
493
|
path (Path, optional):
|
|
492
494
|
Path to the root of the layout directory. Defaults to Path.cwd().
|
|
493
495
|
exclude (Optional[list[str]]):
|
|
494
|
-
Defines properties which should not be included in the
|
|
496
|
+
Defines properties which should not be included in the result. E.g.: ["ACTIVITY_INFO"] – refers to createdBy, etc. Default is None.
|
|
497
|
+
sort (bool, optional):
|
|
498
|
+
Flag if the output should be sorted before storing to disk. Default is False.
|
|
495
499
|
|
|
496
500
|
Returns:
|
|
497
501
|
None
|
|
498
502
|
"""
|
|
499
|
-
self.get_declarative_analytics_model(workspace_id, exclude).store_to_disk(path)
|
|
503
|
+
self.get_declarative_analytics_model(workspace_id, exclude).store_to_disk(path, sort=sort)
|
|
500
504
|
|
|
501
505
|
@staticmethod
|
|
502
506
|
def load_analytics_model_from_disk(path: Path = Path.cwd()) -> CatalogDeclarativeAnalytics:
|
|
@@ -58,9 +58,9 @@ class CatalogDeclarativeAnalytics(Base):
|
|
|
58
58
|
def client_class() -> type[DeclarativeAnalytics]:
|
|
59
59
|
return DeclarativeAnalytics
|
|
60
60
|
|
|
61
|
-
def store_to_disk(self, workspace_folder: Path) -> None:
|
|
61
|
+
def store_to_disk(self, workspace_folder: Path, sort: bool = False) -> None:
|
|
62
62
|
if self.analytics is not None:
|
|
63
|
-
self.analytics.store_to_disk(workspace_folder)
|
|
63
|
+
self.analytics.store_to_disk(workspace_folder, sort=sort)
|
|
64
64
|
|
|
65
65
|
@classmethod
|
|
66
66
|
def load_from_disk(cls, workspace_folder: Path) -> CatalogDeclarativeAnalytics:
|
|
@@ -137,7 +137,7 @@ class CatalogDeclarativeAnalyticsLayer(Base):
|
|
|
137
137
|
create_directory(folder)
|
|
138
138
|
return folder
|
|
139
139
|
|
|
140
|
-
def store_to_disk(self, workspace_folder: Path) -> None:
|
|
140
|
+
def store_to_disk(self, workspace_folder: Path, sort: bool = False) -> None:
|
|
141
141
|
analytics_model_folder = self.get_analytics_model_folder(workspace_folder)
|
|
142
142
|
|
|
143
143
|
analytical_dashboards_folder = self.get_analytical_dashboards_folder(analytics_model_folder)
|
|
@@ -150,28 +150,28 @@ class CatalogDeclarativeAnalyticsLayer(Base):
|
|
|
150
150
|
export_definition_folder = self.get_export_definition_dif(analytical_dashboards_folder)
|
|
151
151
|
|
|
152
152
|
for analytical_dashboard in self.analytical_dashboards:
|
|
153
|
-
analytical_dashboard.store_to_disk(analytical_dashboards_folder)
|
|
153
|
+
analytical_dashboard.store_to_disk(analytical_dashboards_folder, sort=sort)
|
|
154
154
|
|
|
155
155
|
for analytical_dashboard_extension in self.analytical_dashboard_extensions:
|
|
156
|
-
analytical_dashboard_extension.store_to_disk(analytical_dashboard_extensions_folder)
|
|
156
|
+
analytical_dashboard_extension.store_to_disk(analytical_dashboard_extensions_folder, sort=sort)
|
|
157
157
|
|
|
158
158
|
for dashboard_plugin in self.dashboard_plugins:
|
|
159
|
-
dashboard_plugin.store_to_disk(dashboard_plugins_folder)
|
|
159
|
+
dashboard_plugin.store_to_disk(dashboard_plugins_folder, sort=sort)
|
|
160
160
|
|
|
161
161
|
for filter_context in self.filter_contexts:
|
|
162
|
-
filter_context.store_to_disk(filter_contexts_folder)
|
|
162
|
+
filter_context.store_to_disk(filter_contexts_folder, sort=sort)
|
|
163
163
|
|
|
164
164
|
for metric in self.metrics:
|
|
165
|
-
metric.store_to_disk(metrics_folder)
|
|
165
|
+
metric.store_to_disk(metrics_folder, sort=sort)
|
|
166
166
|
|
|
167
167
|
for visualization_object in self.visualization_objects:
|
|
168
|
-
visualization_object.store_to_disk(visualization_objects_folder)
|
|
168
|
+
visualization_object.store_to_disk(visualization_objects_folder, sort=sort)
|
|
169
169
|
|
|
170
170
|
for attribute_hierarchy in self.attribute_hierarchies:
|
|
171
|
-
attribute_hierarchy.store_to_disk(attribute_hierarchy_folder)
|
|
171
|
+
attribute_hierarchy.store_to_disk(attribute_hierarchy_folder, sort=sort)
|
|
172
172
|
|
|
173
173
|
for export_definition in self.export_definitions:
|
|
174
|
-
export_definition.store_to_disk(export_definition_folder)
|
|
174
|
+
export_definition.store_to_disk(export_definition_folder, sort=sort)
|
|
175
175
|
|
|
176
176
|
@classmethod
|
|
177
177
|
def load_from_disk(cls, workspace_folder: Path) -> CatalogDeclarativeAnalyticsLayer:
|
|
@@ -15,9 +15,9 @@ T = TypeVar("T", bound="CatalogAnalyticsObjectBase")
|
|
|
15
15
|
class CatalogAnalyticsObjectBase(Base):
|
|
16
16
|
id: str
|
|
17
17
|
|
|
18
|
-
def store_to_disk(self, analytics_folder: Path) -> None:
|
|
18
|
+
def store_to_disk(self, analytics_folder: Path, sort: bool = False) -> None:
|
|
19
19
|
analytics_file = analytics_folder / f"{self.id}.yaml"
|
|
20
|
-
write_layout_to_file(analytics_file, self.to_api().to_dict(camel_case=True))
|
|
20
|
+
write_layout_to_file(analytics_file, self.to_api().to_dict(camel_case=True), sort=sort)
|
|
21
21
|
|
|
22
22
|
@classmethod
|
|
23
23
|
def load_from_disk(cls: type[T], analytics_file: Path) -> T:
|
|
@@ -53,9 +53,9 @@ class CatalogDeclarativeDataset(Base):
|
|
|
53
53
|
def client_class() -> type[DeclarativeDataset]:
|
|
54
54
|
return DeclarativeDataset
|
|
55
55
|
|
|
56
|
-
def store_to_disk(self, datasets_folder: Path) -> None:
|
|
56
|
+
def store_to_disk(self, datasets_folder: Path, sort: bool = False) -> None:
|
|
57
57
|
dataset_file = datasets_folder / f"{self.id}.yaml"
|
|
58
|
-
write_layout_to_file(dataset_file, self.to_api().to_dict(camel_case=True))
|
|
58
|
+
write_layout_to_file(dataset_file, self.to_api().to_dict(camel_case=True), sort=sort)
|
|
59
59
|
|
|
60
60
|
@classmethod
|
|
61
61
|
def load_from_disk(cls, dataset_file: Path) -> CatalogDeclarativeDataset:
|
|
@@ -22,9 +22,9 @@ class CatalogDeclarativeDatasetExtension(Base):
|
|
|
22
22
|
def client_class() -> type[DeclarativeDatasetExtension]:
|
|
23
23
|
return DeclarativeDatasetExtension
|
|
24
24
|
|
|
25
|
-
def store_to_disk(self, dataset_extension_folder: Path) -> None:
|
|
25
|
+
def store_to_disk(self, dataset_extension_folder: Path, sort: bool = False) -> None:
|
|
26
26
|
dataset_extension_file = dataset_extension_folder / f"{self.id}.yaml"
|
|
27
|
-
write_layout_to_file(dataset_extension_file, self.to_api().to_dict(camel_case=True))
|
|
27
|
+
write_layout_to_file(dataset_extension_file, self.to_api().to_dict(camel_case=True), sort=sort)
|
|
28
28
|
|
|
29
29
|
@classmethod
|
|
30
30
|
def load_from_disk(cls, dataset_extension_file: Path) -> "CatalogDeclarativeDatasetExtension":
|
|
@@ -27,9 +27,9 @@ class CatalogDeclarativeDateDataset(Base):
|
|
|
27
27
|
def client_class() -> type[DeclarativeDateDataset]:
|
|
28
28
|
return DeclarativeDateDataset
|
|
29
29
|
|
|
30
|
-
def store_to_disk(self, date_instances_folder: Path) -> None:
|
|
30
|
+
def store_to_disk(self, date_instances_folder: Path, sort: bool = False) -> None:
|
|
31
31
|
date_instance_file = date_instances_folder / f"{self.id}.yaml"
|
|
32
|
-
write_layout_to_file(date_instance_file, self.to_api().to_dict(camel_case=True))
|
|
32
|
+
write_layout_to_file(date_instance_file, self.to_api().to_dict(camel_case=True), sort=sort)
|
|
33
33
|
|
|
34
34
|
@classmethod
|
|
35
35
|
def load_from_disk(cls, date_instance_file: Path) -> CatalogDeclarativeDateDataset:
|
|
@@ -34,9 +34,9 @@ class CatalogDeclarativeModel(Base):
|
|
|
34
34
|
def client_class() -> type[DeclarativeModel]:
|
|
35
35
|
return DeclarativeModel
|
|
36
36
|
|
|
37
|
-
def store_to_disk(self, workspace_folder: Path) -> None:
|
|
37
|
+
def store_to_disk(self, workspace_folder: Path, sort: bool = False) -> None:
|
|
38
38
|
if self.ldm is not None:
|
|
39
|
-
self.ldm.store_to_disk(workspace_folder)
|
|
39
|
+
self.ldm.store_to_disk(workspace_folder, sort=sort)
|
|
40
40
|
|
|
41
41
|
@classmethod
|
|
42
42
|
def load_from_disk(cls, workspace_folder: Path) -> CatalogDeclarativeModel:
|
|
@@ -106,20 +106,20 @@ class CatalogDeclarativeLdm(Base):
|
|
|
106
106
|
create_directory(folder)
|
|
107
107
|
return folder
|
|
108
108
|
|
|
109
|
-
def store_to_disk(self, workspace_folder: Path) -> None:
|
|
109
|
+
def store_to_disk(self, workspace_folder: Path, sort: bool = False) -> None:
|
|
110
110
|
ldm_folder = self.create_ldm_folder(workspace_folder)
|
|
111
111
|
datasets_folder = self.create_datasets_folder(ldm_folder)
|
|
112
112
|
date_instances_folder = self.create_date_instances_folder(ldm_folder)
|
|
113
113
|
|
|
114
114
|
for dataset in self.datasets:
|
|
115
|
-
dataset.store_to_disk(datasets_folder)
|
|
115
|
+
dataset.store_to_disk(datasets_folder, sort=sort)
|
|
116
116
|
for date_instance in self.date_instances:
|
|
117
|
-
date_instance.store_to_disk(date_instances_folder)
|
|
117
|
+
date_instance.store_to_disk(date_instances_folder, sort=sort)
|
|
118
118
|
# Note: should be defaulted to an empty list in the future
|
|
119
119
|
if self.dataset_extensions:
|
|
120
120
|
dataset_extensions_folder = self.create_dataset_extensions_folder(ldm_folder)
|
|
121
121
|
for dataset_extension in self.dataset_extensions:
|
|
122
|
-
dataset_extension.store_to_disk(dataset_extensions_folder)
|
|
122
|
+
dataset_extension.store_to_disk(dataset_extensions_folder, sort=sort)
|
|
123
123
|
|
|
124
124
|
@classmethod
|
|
125
125
|
def load_from_disk(cls, workspace_folder: Path) -> CatalogDeclarativeLdm:
|
|
@@ -54,11 +54,11 @@ class CatalogDeclarativeWorkspaceModel(Base):
|
|
|
54
54
|
def client_class() -> type[DeclarativeWorkspaceModel]:
|
|
55
55
|
return DeclarativeWorkspaceModel
|
|
56
56
|
|
|
57
|
-
def store_to_disk(self, workspace_folder: Path) -> None:
|
|
57
|
+
def store_to_disk(self, workspace_folder: Path, sort: bool = False) -> None:
|
|
58
58
|
if self.ldm is not None:
|
|
59
|
-
self.ldm.store_to_disk(workspace_folder)
|
|
59
|
+
self.ldm.store_to_disk(workspace_folder, sort=sort)
|
|
60
60
|
if self.analytics is not None:
|
|
61
|
-
self.analytics.store_to_disk(workspace_folder)
|
|
61
|
+
self.analytics.store_to_disk(workspace_folder, sort=sort)
|
|
62
62
|
|
|
63
63
|
@classmethod
|
|
64
64
|
def load_from_disk(cls, workspace_folder: Path) -> CatalogDeclarativeWorkspaceModel:
|
|
@@ -102,16 +102,16 @@ class CatalogDeclarativeWorkspace(Base):
|
|
|
102
102
|
del dictionary["model"]
|
|
103
103
|
return client_class.from_dict(dictionary, camel_case=False)
|
|
104
104
|
|
|
105
|
-
def store_to_disk(self, workspaces_folder: Path) -> None:
|
|
105
|
+
def store_to_disk(self, workspaces_folder: Path, sort: bool = False) -> None:
|
|
106
106
|
workspace_folder = workspaces_folder / self.id
|
|
107
107
|
file_path = workspace_folder / f"{self.id}.yaml"
|
|
108
108
|
create_directory(workspace_folder)
|
|
109
109
|
|
|
110
110
|
workspace_dict = self.to_api(include_nested_structures=False).to_dict(camel_case=True)
|
|
111
|
-
write_layout_to_file(file_path, workspace_dict)
|
|
111
|
+
write_layout_to_file(file_path, workspace_dict, sort=sort)
|
|
112
112
|
|
|
113
113
|
if self.model is not None:
|
|
114
|
-
self.model.store_to_disk(workspace_folder)
|
|
114
|
+
self.model.store_to_disk(workspace_folder, sort)
|
|
115
115
|
|
|
116
116
|
@classmethod
|
|
117
117
|
def load_from_disk(cls, workspaces_folder: Path, workspace_id: str) -> CatalogDeclarativeWorkspace:
|
|
@@ -204,9 +204,9 @@ class CatalogDeclarativeWorkspaceDataFilter(Base):
|
|
|
204
204
|
def client_class() -> type[DeclarativeWorkspaceDataFilter]:
|
|
205
205
|
return DeclarativeWorkspaceDataFilter
|
|
206
206
|
|
|
207
|
-
def store_to_disk(self, workspaces_data_filters_folder: Path) -> None:
|
|
207
|
+
def store_to_disk(self, workspaces_data_filters_folder: Path, sort: bool = False) -> None:
|
|
208
208
|
workspaces_data_filter_file = workspaces_data_filters_folder / f"{self.id}.yaml"
|
|
209
|
-
write_layout_to_file(workspaces_data_filter_file, self.to_api().to_dict(camel_case=True))
|
|
209
|
+
write_layout_to_file(workspaces_data_filter_file, self.to_api().to_dict(camel_case=True), sort=sort)
|
|
210
210
|
|
|
211
211
|
@classmethod
|
|
212
212
|
def load_from_disk(cls, workspaces_data_filter_file: Path) -> CatalogDeclarativeWorkspaceDataFilter:
|
|
@@ -267,9 +267,9 @@ class CatalogDeclarativeUserDataFilter(Base):
|
|
|
267
267
|
def client_class() -> type[DeclarativeUserDataFilter]:
|
|
268
268
|
return DeclarativeUserDataFilter
|
|
269
269
|
|
|
270
|
-
def store_to_disk(self, user_data_filters_folder: Path) -> None:
|
|
270
|
+
def store_to_disk(self, user_data_filters_folder: Path, sort: bool = False) -> None:
|
|
271
271
|
user_data_filter_file = user_data_filters_folder / f"{self.id}.yaml"
|
|
272
|
-
write_layout_to_file(user_data_filter_file, self.to_api().to_dict(camel_case=True))
|
|
272
|
+
write_layout_to_file(user_data_filter_file, self.to_api().to_dict(camel_case=True), sort=sort)
|
|
273
273
|
|
|
274
274
|
@classmethod
|
|
275
275
|
def load_from_disk(cls, user_data_filter_file: Path) -> CatalogDeclarativeUserDataFilter:
|
|
@@ -306,9 +306,9 @@ class CatalogDeclarativeFilterView(Base):
|
|
|
306
306
|
def client_class() -> type[DeclarativeFilterView]:
|
|
307
307
|
return DeclarativeFilterView
|
|
308
308
|
|
|
309
|
-
def store_to_disk(self, filter_views_folder: Path) -> None:
|
|
309
|
+
def store_to_disk(self, filter_views_folder: Path, sort: bool = False) -> None:
|
|
310
310
|
filter_view_file = filter_views_folder / f"{self.id}.yaml"
|
|
311
|
-
write_layout_to_file(filter_view_file, self.to_api().to_dict(camel_case=True))
|
|
311
|
+
write_layout_to_file(filter_view_file, self.to_api().to_dict(camel_case=True), sort=sort)
|
|
312
312
|
|
|
313
313
|
@classmethod
|
|
314
314
|
def load_from_disk(cls, filter_view_file: Path) -> CatalogDeclarativeFilterView:
|
{gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/service.py
RENAMED
|
@@ -666,6 +666,7 @@ class CatalogWorkspaceService(CatalogServiceBase):
|
|
|
666
666
|
from_lang: str,
|
|
667
667
|
already_translated: dict[str, str],
|
|
668
668
|
translation_file_path: Path,
|
|
669
|
+
sort: bool = False,
|
|
669
670
|
) -> dict[str, str]:
|
|
670
671
|
if to_translate and translator_func:
|
|
671
672
|
translated = {
|
|
@@ -673,7 +674,7 @@ class CatalogWorkspaceService(CatalogServiceBase):
|
|
|
673
674
|
**already_translated,
|
|
674
675
|
}
|
|
675
676
|
# Write translation file
|
|
676
|
-
write_layout_to_file(translation_file_path, translated)
|
|
677
|
+
write_layout_to_file(translation_file_path, translated, sort=sort)
|
|
677
678
|
elif already_translated:
|
|
678
679
|
logger.info("Nothing to translate, but translation file exists, so we can apply it.")
|
|
679
680
|
translated = already_translated
|
|
@@ -686,7 +687,7 @@ class CatalogWorkspaceService(CatalogServiceBase):
|
|
|
686
687
|
translated = {}
|
|
687
688
|
for x in to_translate:
|
|
688
689
|
translated[x] = x
|
|
689
|
-
write_layout_to_file(translation_file_path, translated)
|
|
690
|
+
write_layout_to_file(translation_file_path, translated, sort=sort)
|
|
690
691
|
return translated
|
|
691
692
|
|
|
692
693
|
@staticmethod
|
|
@@ -5,7 +5,7 @@ import functools
|
|
|
5
5
|
import json
|
|
6
6
|
import os
|
|
7
7
|
import re
|
|
8
|
-
from collections.abc import KeysView
|
|
8
|
+
from collections.abc import KeysView, Mapping
|
|
9
9
|
from enum import Enum, auto
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
from shutil import rmtree
|
|
@@ -182,9 +182,18 @@ class IndentDumper(yaml.SafeDumper):
|
|
|
182
182
|
return super().increase_indent(flow, False)
|
|
183
183
|
|
|
184
184
|
|
|
185
|
-
def write_layout_to_file(path: Path, content: Union[dict[str, Any], list[dict]]) -> None:
|
|
185
|
+
def write_layout_to_file(path: Path, content: Union[dict[str, Any], list[dict]], sort: bool = False) -> None:
|
|
186
|
+
"""
|
|
187
|
+
Write content to a YAML file.
|
|
188
|
+
|
|
189
|
+
Args:
|
|
190
|
+
path (Path): The path to the file where the content will be written.
|
|
191
|
+
content (Union[dict[str, Any], list[dict]]): The content to write to the file.
|
|
192
|
+
sort (bool): If True, the content will be sorted before writing. Defaults to False
|
|
193
|
+
"""
|
|
194
|
+
content_to_store = deep_sort(content) if sort else content
|
|
186
195
|
with open(path, "w", encoding="utf-8") as fp:
|
|
187
|
-
yaml.dump(
|
|
196
|
+
yaml.dump(content_to_store, fp, indent=2, Dumper=IndentDumper, allow_unicode=True)
|
|
188
197
|
|
|
189
198
|
|
|
190
199
|
def read_layout_from_file(path: Path) -> Any:
|
|
@@ -451,3 +460,21 @@ def filter_for_attributes_labels(attributes: list[Attribute], character_limit: i
|
|
|
451
460
|
if current_batch: # Add remaining batch
|
|
452
461
|
queries.append(f"labels.id=in=({','.join(current_batch)})")
|
|
453
462
|
return queries
|
|
463
|
+
|
|
464
|
+
|
|
465
|
+
def deep_sort(obj: Any) -> Any:
|
|
466
|
+
"""
|
|
467
|
+
Recursively sort dictionaries by key. The order of lists and tuples is preserved.
|
|
468
|
+
"""
|
|
469
|
+
if isinstance(obj, Mapping):
|
|
470
|
+
# Sort dict by keys, deep-sorting values
|
|
471
|
+
return {k: deep_sort(v) for k, v in sorted(obj.items(), key=lambda kv: kv[0])}
|
|
472
|
+
elif isinstance(obj, list):
|
|
473
|
+
# Deep-sort elements first
|
|
474
|
+
list_items = [deep_sort(x) for x in obj]
|
|
475
|
+
return list_items
|
|
476
|
+
elif isinstance(obj, tuple):
|
|
477
|
+
tuple_items = tuple(deep_sort(x) for x in obj)
|
|
478
|
+
return tuple_items
|
|
479
|
+
else:
|
|
480
|
+
return obj
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gooddata-sdk
|
|
3
|
-
Version: 1.48.1.
|
|
3
|
+
Version: 1.48.1.dev4
|
|
4
4
|
Summary: GoodData Cloud Python SDK
|
|
5
5
|
Author: GoodData
|
|
6
6
|
Author-email: support@gooddata.com
|
|
7
7
|
License: MIT
|
|
8
|
-
Project-URL: Documentation, https://www.gooddata.com/docs/python-sdk/1.48.1.
|
|
8
|
+
Project-URL: Documentation, https://www.gooddata.com/docs/python-sdk/1.48.1.dev4
|
|
9
9
|
Project-URL: Source, https://github.com/gooddata/gooddata-python-sdk
|
|
10
10
|
Keywords: gooddata,sdk,api,analytics,headless,business,intelligence,headless-bi,cloud,native,semantic,layer,sql,metrics
|
|
11
11
|
Classifier: Development Status :: 5 - Production/Stable
|
|
@@ -23,7 +23,7 @@ Classifier: Typing :: Typed
|
|
|
23
23
|
Requires-Python: >=3.9.0
|
|
24
24
|
Description-Content-Type: text/markdown
|
|
25
25
|
License-File: LICENSE.txt
|
|
26
|
-
Requires-Dist: gooddata-api-client~=1.48.1.
|
|
26
|
+
Requires-Dist: gooddata-api-client~=1.48.1.dev4
|
|
27
27
|
Requires-Dist: python-dateutil>=2.5.3
|
|
28
28
|
Requires-Dist: pyyaml>=6.0
|
|
29
29
|
Requires-Dist: attrs<=24.2.0,>=21.4.0
|
|
@@ -59,7 +59,7 @@ At the moment the SDK provides services to inspect and interact with the Semanti
|
|
|
59
59
|
* Compute Service
|
|
60
60
|
* Table Service
|
|
61
61
|
|
|
62
|
-
See [DOCUMENTATION](https://www.gooddata.com/docs/python-sdk/1.48.1.
|
|
62
|
+
See [DOCUMENTATION](https://www.gooddata.com/docs/python-sdk/1.48.1.dev4) for more details.
|
|
63
63
|
|
|
64
64
|
## Requirements
|
|
65
65
|
|
|
@@ -7,7 +7,7 @@ this_directory = Path(__file__).parent
|
|
|
7
7
|
long_description = (this_directory / "README.md").read_text(encoding="utf-8")
|
|
8
8
|
|
|
9
9
|
REQUIRES = [
|
|
10
|
-
"gooddata-api-client~=1.48.1.
|
|
10
|
+
"gooddata-api-client~=1.48.1.dev4",
|
|
11
11
|
"python-dateutil>=2.5.3",
|
|
12
12
|
"pyyaml>=6.0",
|
|
13
13
|
"attrs>=21.4.0,<=24.2.0",
|
|
@@ -22,7 +22,7 @@ setup(
|
|
|
22
22
|
description="GoodData Cloud Python SDK",
|
|
23
23
|
long_description=long_description,
|
|
24
24
|
long_description_content_type="text/markdown",
|
|
25
|
-
version="1.48.1.
|
|
25
|
+
version="1.48.1.dev4",
|
|
26
26
|
author="GoodData",
|
|
27
27
|
author_email="support@gooddata.com",
|
|
28
28
|
license="MIT",
|
|
@@ -36,7 +36,7 @@ setup(
|
|
|
36
36
|
"bin/gdc",
|
|
37
37
|
],
|
|
38
38
|
project_urls={
|
|
39
|
-
"Documentation": "https://www.gooddata.com/docs/python-sdk/1.48.1.
|
|
39
|
+
"Documentation": "https://www.gooddata.com/docs/python-sdk/1.48.1.dev4",
|
|
40
40
|
"Source": "https://github.com/gooddata/gooddata-python-sdk",
|
|
41
41
|
},
|
|
42
42
|
classifiers=[
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/catalog_service_base.py
RENAMED
|
File without changes
|
{gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/__init__.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
|
{gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/data_source/service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/export/__init__.py
RENAMED
|
File without changes
|
{gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/export/request.py
RENAMED
|
File without changes
|
{gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/export/service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/__init__.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
|
{gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/organization/service.py
RENAMED
|
File without changes
|
|
File without changes
|
{gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/permission/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/permission/service.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
|
{gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/user/entity_model/user.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/validate_by_item.py
RENAMED
|
File without changes
|
{gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/catalog/workspace/__init__.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
|
{gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/compute/model/__init__.py
RENAMED
|
File without changes
|
{gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/compute/model/attribute.py
RENAMED
|
File without changes
|
|
File without changes
|
{gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk/compute/model/execution.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
|
{gooddata_sdk-1.48.1.dev3 → gooddata_sdk-1.48.1.dev4}/gooddata_sdk.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|