gooddata-sdk 1.31.1.dev1__tar.gz → 1.31.1.dev2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. {gooddata_sdk-1.31.1.dev1/gooddata_sdk.egg-info → gooddata_sdk-1.31.1.dev2}/PKG-INFO +4 -4
  2. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/README.md +1 -1
  3. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/__init__.py +1 -0
  4. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/declarative_model/data_source.py +12 -0
  5. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/entity_model/data_source.py +2 -0
  6. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/entity.py +22 -0
  7. gooddata_sdk-1.31.1.dev2/gooddata_sdk/catalog/organization/entity_model/identity_provider.py +88 -0
  8. gooddata_sdk-1.31.1.dev2/gooddata_sdk/catalog/organization/layout/identity_provider.py +24 -0
  9. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/organization/service.py +115 -6
  10. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2/gooddata_sdk.egg-info}/PKG-INFO +4 -4
  11. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk.egg-info/SOURCES.txt +2 -0
  12. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk.egg-info/requires.txt +1 -1
  13. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/setup.py +3 -3
  14. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/LICENSE.txt +0 -0
  15. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/MANIFEST.in +0 -0
  16. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/bin/gdc +0 -0
  17. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/_version.py +0 -0
  18. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/__init__.py +0 -0
  19. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/base.py +0 -0
  20. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/catalog_service_base.py +0 -0
  21. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/__init__.py +0 -0
  22. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/action_model/__init__.py +0 -0
  23. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/action_model/requests/__init__.py +0 -0
  24. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/action_model/requests/ldm_request.py +0 -0
  25. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/action_model/requests/scan_model_request.py +0 -0
  26. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/action_model/requests/scan_sql_request.py +0 -0
  27. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/action_model/responses/__init__.py +0 -0
  28. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/action_model/responses/scan_sql_response.py +0 -0
  29. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/action_model/sql_column.py +0 -0
  30. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/declarative_model/__init__.py +0 -0
  31. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/declarative_model/physical_model/__init__.py +0 -0
  32. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/declarative_model/physical_model/column.py +0 -0
  33. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/declarative_model/physical_model/pdm.py +0 -0
  34. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/declarative_model/physical_model/table.py +0 -0
  35. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/entity_model/__init__.py +0 -0
  36. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/entity_model/content_objects/__init__.py +0 -0
  37. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/service.py +0 -0
  38. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/validation/__init__.py +0 -0
  39. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/data_source/validation/data_source.py +0 -0
  40. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/depends_on.py +0 -0
  41. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/export/__init__.py +0 -0
  42. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/export/request.py +0 -0
  43. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/export/service.py +0 -0
  44. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/filter_by.py +0 -0
  45. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/identifier.py +0 -0
  46. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/organization/__init__.py +0 -0
  47. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/organization/entity_model/__init__.py +0 -0
  48. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/organization/entity_model/directive.py +0 -0
  49. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/organization/entity_model/jwk.py +0 -0
  50. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/organization/entity_model/organization.py +0 -0
  51. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/organization/entity_model/setting.py +0 -0
  52. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/organization/layout/__init__.py +0 -0
  53. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/organization/layout/notification_channel.py +0 -0
  54. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/parameter.py +0 -0
  55. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/permission/__init__.py +0 -0
  56. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/permission/declarative_model/__init__.py +0 -0
  57. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/permission/declarative_model/dashboard_assignees.py +0 -0
  58. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/permission/declarative_model/dashboard_permissions.py +0 -0
  59. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/permission/declarative_model/manage_dashboard_permissions.py +0 -0
  60. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/permission/declarative_model/permission.py +0 -0
  61. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/permission/service.py +0 -0
  62. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/rule.py +0 -0
  63. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/setting.py +0 -0
  64. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/types.py +0 -0
  65. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/user/__init__.py +0 -0
  66. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/user/declarative_model/__init__.py +0 -0
  67. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/user/declarative_model/user.py +0 -0
  68. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/user/declarative_model/user_and_user_groups.py +0 -0
  69. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/user/declarative_model/user_group.py +0 -0
  70. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/user/entity_model/__init__.py +0 -0
  71. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/user/entity_model/api_token.py +0 -0
  72. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/user/entity_model/user.py +0 -0
  73. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/user/entity_model/user_group.py +0 -0
  74. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/user/management_model/__init__.py +0 -0
  75. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/user/management_model/management.py +0 -0
  76. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/user/service.py +0 -0
  77. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/validate_by_item.py +0 -0
  78. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/__init__.py +0 -0
  79. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/content_service.py +0 -0
  80. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/declarative_model/__init__.py +0 -0
  81. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/declarative_model/workspace/__init__.py +0 -0
  82. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/declarative_model/workspace/analytics_model/__init__.py +0 -0
  83. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/declarative_model/workspace/analytics_model/analytics_model.py +0 -0
  84. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/declarative_model/workspace/analytics_model/base.py +0 -0
  85. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/declarative_model/workspace/analytics_model/export_definition.py +0 -0
  86. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/declarative_model/workspace/automation.py +0 -0
  87. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/__init__.py +0 -0
  88. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/data_filter_references.py +0 -0
  89. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/dataset/__init__.py +0 -0
  90. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/dataset/dataset.py +0 -0
  91. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/dataset_extensions/__init__.py +0 -0
  92. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/dataset_extensions/dataset_extension.py +0 -0
  93. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/date_dataset/__init__.py +0 -0
  94. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/date_dataset/date_dataset.py +0 -0
  95. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/declarative_model/workspace/logical_model/ldm.py +0 -0
  96. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/declarative_model/workspace/workspace.py +0 -0
  97. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/entity_model/__init__.py +0 -0
  98. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/entity_model/content_objects/__init__.py +0 -0
  99. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/entity_model/content_objects/dataset.py +0 -0
  100. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/entity_model/content_objects/metric.py +0 -0
  101. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/entity_model/content_objects/workspace_setting.py +0 -0
  102. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/entity_model/filter_view.py +0 -0
  103. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/entity_model/graph_objects/__init__.py +0 -0
  104. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/entity_model/graph_objects/graph.py +0 -0
  105. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/entity_model/user_data_filter.py +0 -0
  106. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/entity_model/workspace.py +0 -0
  107. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/model_container.py +0 -0
  108. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/catalog/workspace/service.py +0 -0
  109. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/cli/__init__.py +0 -0
  110. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/cli/clone.py +0 -0
  111. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/cli/constants.py +0 -0
  112. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/cli/deploy.py +0 -0
  113. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/cli/gdc_core.py +0 -0
  114. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/cli/package.json +0 -0
  115. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/cli/utils.py +0 -0
  116. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/client.py +0 -0
  117. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/compute/__init__.py +0 -0
  118. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/compute/compute_to_sdk_converter.py +0 -0
  119. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/compute/model/__init__.py +0 -0
  120. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/compute/model/attribute.py +0 -0
  121. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/compute/model/base.py +0 -0
  122. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/compute/model/execution.py +0 -0
  123. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/compute/model/filter.py +0 -0
  124. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/compute/model/metric.py +0 -0
  125. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/compute/service.py +0 -0
  126. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/config.py +0 -0
  127. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/py.typed +0 -0
  128. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/sdk.py +0 -0
  129. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/support.py +0 -0
  130. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/table.py +0 -0
  131. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/type_converter.py +0 -0
  132. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/utils.py +0 -0
  133. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk/visualization.py +0 -0
  134. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk.egg-info/dependency_links.txt +0 -0
  135. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/gooddata_sdk.egg-info/top_level.txt +0 -0
  136. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/setup.cfg +0 -0
  137. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/tests/test_client.py +0 -0
  138. {gooddata_sdk-1.31.1.dev1 → gooddata_sdk-1.31.1.dev2}/tests/test_type_converter.py +0 -0
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: gooddata-sdk
3
- Version: 1.31.1.dev1
3
+ Version: 1.31.1.dev2
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.31.1.dev1
8
+ Project-URL: Documentation, https://www.gooddata.com/docs/python-sdk/1.31.1.dev2
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
@@ -22,7 +22,7 @@ Classifier: Typing :: Typed
22
22
  Requires-Python: >=3.9.0
23
23
  Description-Content-Type: text/markdown
24
24
  License-File: LICENSE.txt
25
- Requires-Dist: gooddata-api-client~=1.31.1.dev1
25
+ Requires-Dist: gooddata-api-client~=1.31.1.dev2
26
26
  Requires-Dist: python-dateutil>=2.5.3
27
27
  Requires-Dist: pyyaml>=5.1
28
28
  Requires-Dist: attrs<=24.2.0,>=21.4.0
@@ -46,7 +46,7 @@ At the moment the SDK provides services to inspect and interact with the Semanti
46
46
  * Compute Service
47
47
  * Table Service
48
48
 
49
- See [DOCUMENTATION](https://www.gooddata.com/docs/python-sdk/1.31.1.dev1) for more details.
49
+ See [DOCUMENTATION](https://www.gooddata.com/docs/python-sdk/1.31.1.dev2) for more details.
50
50
 
51
51
  ## Requirements
52
52
 
@@ -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.31.1.dev1) for more details.
16
+ See [DOCUMENTATION](https://www.gooddata.com/docs/python-sdk/1.31.1.dev2) for more details.
17
17
 
18
18
  ## Requirements
19
19
 
@@ -55,6 +55,7 @@ from gooddata_sdk.catalog.depends_on import CatalogDependsOn, CatalogDependsOnDa
55
55
  from gooddata_sdk.catalog.entity import (
56
56
  AttrCatalogEntity,
57
57
  BasicCredentials,
58
+ ClientSecretCredentials,
58
59
  KeyPairCredentials,
59
60
  TokenCredentialsFromEnvVar,
60
61
  TokenCredentialsFromFile,
@@ -111,6 +111,8 @@ class CatalogDeclarativeDataSource(Base):
111
111
  token: Optional[str] = None,
112
112
  private_key: Optional[str] = None,
113
113
  private_key_passphrase: Optional[str] = None,
114
+ client_id: Optional[str] = None,
115
+ client_secret: Optional[str] = None,
114
116
  ) -> TestDefinitionRequest:
115
117
  kwargs: dict[str, Any] = {"schema": self.schema}
116
118
  if password is not None:
@@ -123,6 +125,10 @@ class CatalogDeclarativeDataSource(Base):
123
125
  kwargs["private_key"] = private_key
124
126
  if private_key_passphrase is not None:
125
127
  kwargs["private_key_passphrase"] = private_key
128
+ if client_id is not None:
129
+ kwargs["client_id"] = client_id
130
+ if client_secret is not None:
131
+ kwargs["client_secret"] = client_secret
126
132
  return TestDefinitionRequest(type=self.type, url=self.url, **kwargs)
127
133
 
128
134
  @staticmethod
@@ -141,6 +147,8 @@ class CatalogDeclarativeDataSource(Base):
141
147
  token: Optional[str] = None,
142
148
  private_key: Optional[str] = None,
143
149
  private_key_passphrase: Optional[str] = None,
150
+ client_id: Optional[str] = None,
151
+ client_secret: Optional[str] = None,
144
152
  ) -> DeclarativeDataSource:
145
153
  dictionary = self._get_snake_dict()
146
154
  if password is not None:
@@ -151,6 +159,10 @@ class CatalogDeclarativeDataSource(Base):
151
159
  dictionary["private_key"] = private_key
152
160
  if private_key_passphrase is not None:
153
161
  dictionary["private_key_passphrase"] = private_key_passphrase
162
+ if client_id is not None:
163
+ dictionary["client_id"] = client_id
164
+ if client_secret is not None:
165
+ dictionary["client_secret"] = client_secret
154
166
  return self.client_class().from_dict(dictionary)
155
167
 
156
168
  def store_to_disk(self, data_sources_folder: Path) -> None:
@@ -16,6 +16,7 @@ from gooddata_api_client.model.json_api_data_source_patch_document import JsonAp
16
16
  from gooddata_sdk.catalog.base import Base, value_in_allowed
17
17
  from gooddata_sdk.catalog.entity import (
18
18
  BasicCredentials,
19
+ ClientSecretCredentials,
19
20
  Credentials,
20
21
  KeyPairCredentials,
21
22
  TokenCredentials,
@@ -34,6 +35,7 @@ def db_attrs_with_template(instance: CatalogDataSource, *args: Any) -> None:
34
35
  class CatalogDataSourceBase(Base):
35
36
  _SUPPORTED_CREDENTIALS: ClassVar[list[type[Credentials]]] = [
36
37
  BasicCredentials,
38
+ ClientSecretCredentials,
37
39
  TokenCredentials,
38
40
  TokenCredentialsFromFile,
39
41
  KeyPairCredentials,
@@ -121,6 +121,8 @@ class Credentials(Base):
121
121
  PASSWORD_KEY: ClassVar[str] = "password"
122
122
  PRIVATE_KEY: ClassVar[str] = "private_key"
123
123
  PRIVATE_KEY_PASSPHRASE: ClassVar[str] = "private_key_passphrase"
124
+ CLIENT_ID: ClassVar[str] = "client_id"
125
+ CLIENT_SECRET: ClassVar[str] = "client_secret"
124
126
 
125
127
  def to_api_args(self) -> dict[str, Any]:
126
128
  return attr.asdict(self)
@@ -252,3 +254,23 @@ class KeyPairCredentials(Credentials):
252
254
  # You have to fill it to keep it or update it
253
255
  private_key="",
254
256
  )
257
+
258
+
259
+ @attr.s(auto_attribs=True, kw_only=True)
260
+ class ClientSecretCredentials(Credentials):
261
+ client_id: str
262
+ client_secret: str = attr.field(repr=lambda value: "***")
263
+
264
+ @classmethod
265
+ def is_part_of_api(cls, entity: dict[str, Any]) -> bool:
266
+ return cls.CLIENT_ID in entity and cls.CLIENT_SECRET in entity
267
+
268
+ @classmethod
269
+ def from_api(cls, attributes: dict[str, Any]) -> ClientSecretCredentials:
270
+ # Credentials are not returned for security reasons
271
+ return cls(
272
+ client_id=attributes[cls.CLIENT_ID],
273
+ # Client secret is not returned from API (security)
274
+ # You have to fill it to keep it or update it
275
+ client_secret="",
276
+ )
@@ -0,0 +1,88 @@
1
+ # (C) 2024 GoodData Corporation
2
+ from __future__ import annotations
3
+
4
+ from typing import Any, Optional
5
+
6
+ import attr
7
+ from gooddata_api_client.model.json_api_identity_provider_in import JsonApiIdentityProviderIn
8
+ from gooddata_api_client.model.json_api_identity_provider_in_attributes import JsonApiIdentityProviderInAttributes
9
+ from gooddata_api_client.model.json_api_identity_provider_in_document import JsonApiIdentityProviderInDocument
10
+
11
+ from gooddata_sdk.catalog.base import Base
12
+ from gooddata_sdk.utils import safeget
13
+
14
+
15
+ @attr.s(auto_attribs=True, kw_only=True)
16
+ class CatalogIdentityProviderDocument(Base):
17
+ data: CatalogIdentityProvider
18
+
19
+ @staticmethod
20
+ def client_class() -> type[JsonApiIdentityProviderInDocument]:
21
+ return JsonApiIdentityProviderInDocument
22
+
23
+
24
+ @attr.s(auto_attribs=True, kw_only=True)
25
+ class CatalogIdentityProvider(Base):
26
+ id: str
27
+ attributes: Optional[CatalogIdentityProviderAttributes] = None
28
+
29
+ @staticmethod
30
+ def client_class() -> type[JsonApiIdentityProviderIn]:
31
+ return JsonApiIdentityProviderIn
32
+
33
+ @classmethod
34
+ def init(
35
+ cls,
36
+ identity_provider_id: str,
37
+ custom_claim_mapping: Optional[dict[str, str]] = None,
38
+ identifiers: Optional[list[str]] = None,
39
+ oauth_client_id: Optional[str] = None,
40
+ oauth_client_secret: Optional[str] = None,
41
+ oauth_issuer_id: Optional[str] = None,
42
+ oauth_issuer_location: Optional[str] = None,
43
+ saml_metadata: Optional[str] = None,
44
+ ) -> CatalogIdentityProvider:
45
+ return cls(
46
+ id=identity_provider_id,
47
+ attributes=CatalogIdentityProviderAttributes(
48
+ custom_claim_mapping=custom_claim_mapping,
49
+ identifiers=identifiers,
50
+ oauth_client_id=oauth_client_id,
51
+ oauth_client_secret=oauth_client_secret,
52
+ oauth_issuer_id=oauth_issuer_id,
53
+ oauth_issuer_location=oauth_issuer_location,
54
+ saml_metadata=saml_metadata,
55
+ ),
56
+ )
57
+
58
+ @classmethod
59
+ def from_api(cls, entity: dict[str, Any]) -> CatalogIdentityProvider:
60
+ ea = entity["attributes"]
61
+ attr = CatalogIdentityProviderAttributes(
62
+ custom_claim_mapping=safeget(ea, ["custom_claim_mapping"]),
63
+ identifiers=safeget(ea, ["identifiers"]),
64
+ oauth_client_id=safeget(ea, ["oauth_client_id"]),
65
+ oauth_client_secret=safeget(ea, ["oauth_client_secret"]),
66
+ oauth_issuer_id=safeget(ea, ["oauth_issuer_id"]),
67
+ oauth_issuer_location=safeget(ea, ["oauth_issuer_location"]),
68
+ saml_metadata=safeget(ea, ["saml_metadata"]),
69
+ )
70
+ return cls(
71
+ id=entity["id"],
72
+ attributes=attr,
73
+ )
74
+
75
+
76
+ @attr.s(auto_attribs=True, kw_only=True)
77
+ class CatalogIdentityProviderAttributes(Base):
78
+ custom_claim_mapping: Optional[dict[str, str]] = None
79
+ identifiers: Optional[list[str]] = None
80
+ oauth_client_id: Optional[str] = None
81
+ oauth_client_secret: Optional[str] = None
82
+ oauth_issuer_id: Optional[str] = None
83
+ oauth_issuer_location: Optional[str] = None
84
+ saml_metadata: Optional[str] = None
85
+
86
+ @staticmethod
87
+ def client_class() -> type[JsonApiIdentityProviderInAttributes]:
88
+ return JsonApiIdentityProviderInAttributes
@@ -0,0 +1,24 @@
1
+ # (C) 2024 GoodData Corporation
2
+ import builtins
3
+ from typing import Optional
4
+
5
+ import attr
6
+ from gooddata_api_client.model.declarative_identity_provider import DeclarativeIdentityProvider
7
+
8
+ from gooddata_sdk.catalog.base import Base
9
+
10
+
11
+ @attr.s(auto_attribs=True, kw_only=True)
12
+ class CatalogDeclarativeIdentityProvider(Base):
13
+ id: str
14
+ custom_claim_mapping: Optional[dict[str, str]] = None
15
+ identifiers: Optional[list[str]] = None
16
+ oauth_client_id: Optional[str] = None
17
+ oauth_client_secret: Optional[str] = None
18
+ oauth_issuer_id: Optional[str] = None
19
+ oauth_issuer_location: Optional[str] = None
20
+ saml_metadata: Optional[str] = None
21
+
22
+ @staticmethod
23
+ def client_class() -> builtins.type[DeclarativeIdentityProvider]:
24
+ return DeclarativeIdentityProvider
@@ -7,16 +7,19 @@ from typing import Optional
7
7
  from gooddata_api_client.exceptions import NotFoundException
8
8
  from gooddata_api_client.model.declarative_notification_channels import DeclarativeNotificationChannels
9
9
  from gooddata_api_client.model.json_api_csp_directive_in_document import JsonApiCspDirectiveInDocument
10
+ from gooddata_api_client.model.json_api_identity_provider_in_document import JsonApiIdentityProviderInDocument
10
11
  from gooddata_api_client.model.json_api_organization_setting_in_document import JsonApiOrganizationSettingInDocument
11
12
 
12
13
  from gooddata_sdk.catalog.catalog_service_base import CatalogServiceBase
13
14
  from gooddata_sdk.catalog.organization.entity_model.directive import CatalogCspDirective
15
+ from gooddata_sdk.catalog.organization.entity_model.identity_provider import CatalogIdentityProvider
14
16
  from gooddata_sdk.catalog.organization.entity_model.jwk import CatalogJwk, CatalogJwkDocument
15
17
  from gooddata_sdk.catalog.organization.entity_model.organization import CatalogOrganizationDocument
16
18
  from gooddata_sdk.catalog.organization.entity_model.setting import CatalogOrganizationSetting
19
+ from gooddata_sdk.catalog.organization.layout.identity_provider import CatalogDeclarativeIdentityProvider
17
20
  from gooddata_sdk.catalog.organization.layout.notification_channel import CatalogDeclarativeNotificationChannel
18
21
  from gooddata_sdk.client import GoodDataApiClient
19
- from gooddata_sdk.utils import load_all_entities
22
+ from gooddata_sdk.utils import load_all_entities, load_all_entities_dict
20
23
 
21
24
 
22
25
  class CatalogOrganizationService(CatalogServiceBase):
@@ -188,7 +191,7 @@ class CatalogOrganizationService(CatalogServiceBase):
188
191
 
189
192
  Args:
190
193
  organization_setting (CatalogOrganizationSettings):
191
- A catalog organization setting an object to be created.
194
+ A catalog organization setting object to be created.
192
195
 
193
196
  Returns:
194
197
  None
@@ -225,7 +228,7 @@ class CatalogOrganizationService(CatalogServiceBase):
225
228
 
226
229
  Args:
227
230
  organization_setting (CatalogOrganizationSettings):
228
- A catalog organization setting an object to be updated.
231
+ A catalog organization setting object to be updated.
229
232
 
230
233
  Returns:
231
234
  None
@@ -249,7 +252,7 @@ class CatalogOrganizationService(CatalogServiceBase):
249
252
  """Returns a list of all csp directives in the current organization.
250
253
 
251
254
  Returns:
252
- list[CatalogOrganizationSettings]:
255
+ list[CatalogCspDirective]:
253
256
  List of csp directives in the current organization.
254
257
  """
255
258
  get_csp_directives = functools.partial(
@@ -277,7 +280,7 @@ class CatalogOrganizationService(CatalogServiceBase):
277
280
 
278
281
  Args:
279
282
  csp_directive (CatalogCspDirective):
280
- A catalog csp directive an object to be created.
283
+ A catalog csp directive object to be created.
281
284
 
282
285
  Returns:
283
286
  None
@@ -309,7 +312,7 @@ class CatalogOrganizationService(CatalogServiceBase):
309
312
 
310
313
  Args:
311
314
  csp_directive (CatalogCspDirective):
312
- A catalog csp directive an object to be updated.
315
+ A catalog csp directive object to be updated.
313
316
 
314
317
  Returns:
315
318
  None
@@ -324,6 +327,86 @@ class CatalogOrganizationService(CatalogServiceBase):
324
327
  except NotFoundException:
325
328
  raise ValueError(f"Can not update {csp_directive.id} csp directive. This csp directive does not exist.")
326
329
 
330
+ def list_identity_providers(self) -> list[CatalogIdentityProvider]:
331
+ """Returns a list of all identity providers in the current organization.
332
+
333
+ Returns:
334
+ list[CatalogIdentityProvider]:
335
+ List of identity providers in the current organization.
336
+ """
337
+ get_identity_providers = functools.partial(
338
+ self._entities_api.get_all_entities_identity_providers,
339
+ _check_return_type=False,
340
+ )
341
+ identity_providers = load_all_entities_dict(get_identity_providers, camel_case=False)
342
+ return [
343
+ CatalogIdentityProvider.from_dict(identity_provider, camel_case=False)
344
+ for identity_provider in identity_providers["data"]
345
+ ]
346
+
347
+ def get_identity_provider(self, identity_provider_id: str) -> CatalogIdentityProvider:
348
+ """Get an individual identity provider.
349
+
350
+ Args:
351
+ identity_provider_id (str):
352
+ Identity provider identification string e.g. "demo"
353
+
354
+ Returns:
355
+ CatalogIdentityProvider:
356
+ Catalog identity provider object containing structure of the identity provider.
357
+ """
358
+ identity_provider_api = self._entities_api.get_entity_identity_providers(id=identity_provider_id).data
359
+ return CatalogIdentityProvider.from_api(identity_provider_api)
360
+
361
+ def create_identity_provider(self, identity_provider: CatalogIdentityProvider) -> None:
362
+ """Create a new identity provider.
363
+
364
+ Args:
365
+ identity_provider (CatalogIdentityProvider):
366
+ A catalog identity provider object to be created.
367
+
368
+ Returns:
369
+ None
370
+ """
371
+ identity_provider_document = JsonApiIdentityProviderInDocument(data=identity_provider.to_api())
372
+ self._entities_api.create_entity_identity_providers(
373
+ json_api_identity_provider_in_document=identity_provider_document
374
+ )
375
+
376
+ def delete_identity_provider(self, identity_provider_id: str) -> None:
377
+ """Delete an identity provider.
378
+
379
+ Args:
380
+ identity_provider_id (str):
381
+ Identity provider identification string e.g. "demo"
382
+
383
+ Returns:
384
+ None
385
+ """
386
+ self._entities_api.delete_entity_identity_providers(identity_provider_id)
387
+
388
+ def update_identity_provider(self, identity_provider: CatalogIdentityProvider) -> None:
389
+ """Update an identity provider.
390
+
391
+ Args:
392
+ identity_provider (CatalogIdentityProvider):
393
+ A catalog identity provider object to be updated.
394
+
395
+ Returns:
396
+ None
397
+
398
+ Raises:
399
+ ValueError:
400
+ Identity provider does not exist.
401
+ """
402
+ try:
403
+ identity_provider_document = JsonApiIdentityProviderInDocument(data=identity_provider.to_api())
404
+ self._entities_api.update_entity_identity_providers(identity_provider.id, identity_provider_document)
405
+ except NotFoundException:
406
+ raise ValueError(
407
+ f"Can not update {identity_provider.id} identity provider. " f"This identity provider does not exist."
408
+ )
409
+
327
410
  # Layout APIs
328
411
 
329
412
  def get_declarative_notification_channels(self) -> list[CatalogDeclarativeNotificationChannel]:
@@ -354,3 +437,29 @@ class CatalogOrganizationService(CatalogServiceBase):
354
437
  """
355
438
  api_ncs = [nc.to_api() for nc in notification_channels]
356
439
  self._layout_api.set_notification_channels(DeclarativeNotificationChannels(notification_channels=api_ncs))
440
+
441
+ def get_declarative_identity_providers(self) -> list[CatalogDeclarativeIdentityProvider]:
442
+ """
443
+ Get all declarative identity providers in the current organization.
444
+
445
+ Returns:
446
+ list[CatalogDeclarativeIdentityProvider]:
447
+ List of declarative identity providers.
448
+ """
449
+ return [
450
+ CatalogDeclarativeIdentityProvider.from_api(idp) for idp in self._layout_api.get_identity_providers_layout()
451
+ ]
452
+
453
+ def put_declarative_identity_providers(self, identity_providers: list[CatalogDeclarativeIdentityProvider]) -> None:
454
+ """
455
+ Put declarative identity providers in the current organization.
456
+
457
+ Args:
458
+ identity_providers (list[CatalogDeclarativeIdentityProvider]):
459
+ List of declarative identity providers.
460
+
461
+ Returns:
462
+ None
463
+ """
464
+ api_idps = [idp.to_api() for idp in identity_providers]
465
+ self._layout_api.set_identity_providers(declarative_identity_provider=api_idps)
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: gooddata-sdk
3
- Version: 1.31.1.dev1
3
+ Version: 1.31.1.dev2
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.31.1.dev1
8
+ Project-URL: Documentation, https://www.gooddata.com/docs/python-sdk/1.31.1.dev2
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
@@ -22,7 +22,7 @@ Classifier: Typing :: Typed
22
22
  Requires-Python: >=3.9.0
23
23
  Description-Content-Type: text/markdown
24
24
  License-File: LICENSE.txt
25
- Requires-Dist: gooddata-api-client~=1.31.1.dev1
25
+ Requires-Dist: gooddata-api-client~=1.31.1.dev2
26
26
  Requires-Dist: python-dateutil>=2.5.3
27
27
  Requires-Dist: pyyaml>=5.1
28
28
  Requires-Dist: attrs<=24.2.0,>=21.4.0
@@ -46,7 +46,7 @@ At the moment the SDK provides services to inspect and interact with the Semanti
46
46
  * Compute Service
47
47
  * Table Service
48
48
 
49
- See [DOCUMENTATION](https://www.gooddata.com/docs/python-sdk/1.31.1.dev1) for more details.
49
+ See [DOCUMENTATION](https://www.gooddata.com/docs/python-sdk/1.31.1.dev2) for more details.
50
50
 
51
51
  ## Requirements
52
52
 
@@ -59,10 +59,12 @@ gooddata_sdk/catalog/organization/__init__.py
59
59
  gooddata_sdk/catalog/organization/service.py
60
60
  gooddata_sdk/catalog/organization/entity_model/__init__.py
61
61
  gooddata_sdk/catalog/organization/entity_model/directive.py
62
+ gooddata_sdk/catalog/organization/entity_model/identity_provider.py
62
63
  gooddata_sdk/catalog/organization/entity_model/jwk.py
63
64
  gooddata_sdk/catalog/organization/entity_model/organization.py
64
65
  gooddata_sdk/catalog/organization/entity_model/setting.py
65
66
  gooddata_sdk/catalog/organization/layout/__init__.py
67
+ gooddata_sdk/catalog/organization/layout/identity_provider.py
66
68
  gooddata_sdk/catalog/organization/layout/notification_channel.py
67
69
  gooddata_sdk/catalog/permission/__init__.py
68
70
  gooddata_sdk/catalog/permission/service.py
@@ -1,4 +1,4 @@
1
- gooddata-api-client~=1.31.1.dev1
1
+ gooddata-api-client~=1.31.1.dev2
2
2
  python-dateutil>=2.5.3
3
3
  pyyaml>=5.1
4
4
  attrs<=24.2.0,>=21.4.0
@@ -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.31.1.dev1",
10
+ "gooddata-api-client~=1.31.1.dev2",
11
11
  "python-dateutil>=2.5.3",
12
12
  "pyyaml>=5.1",
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.31.1.dev1",
25
+ version="1.31.1.dev2",
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.31.1.dev1",
39
+ "Documentation": "https://www.gooddata.com/docs/python-sdk/1.31.1.dev2",
40
40
  "Source": "https://github.com/gooddata/gooddata-python-sdk",
41
41
  },
42
42
  classifiers=[