dataiku-api-client 15.1.0__tar.gz → 15.2.0__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 (160) hide show
  1. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/HISTORY.txt +5 -0
  2. {dataiku_api_client-15.1.0/dataiku_api_client.egg-info → dataiku_api_client-15.2.0}/PKG-INFO +7 -2
  3. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0/dataiku_api_client.egg-info}/PKG-INFO +7 -2
  4. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataiku_api_client.egg-info/SOURCES.txt +16 -2
  5. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/__init__.py +2 -1
  6. dataiku_api_client-15.2.0/dataikuapi/_vendor/requests_toolbelt/__init__.py +8 -0
  7. dataiku_api_client-15.2.0/dataikuapi/_vendor/requests_toolbelt/_compat.py +66 -0
  8. dataiku_api_client-15.2.0/dataikuapi/_vendor/requests_toolbelt/multipart/__init__.py +9 -0
  9. dataiku_api_client-15.2.0/dataikuapi/_vendor/requests_toolbelt/multipart/encoder.py +471 -0
  10. dataiku_api_client-15.2.0/dataikuapi/agentmanagement/__init__.py +1 -0
  11. dataiku_api_client-15.2.0/dataikuapi/agentmanagement/_utils.py +32 -0
  12. dataiku_api_client-15.2.0/dataikuapi/agentmanagement/agent.py +640 -0
  13. dataiku_api_client-15.2.0/dataikuapi/agentmanagement/alerting.py +535 -0
  14. dataiku_api_client-15.2.0/dataikuapi/agentmanagement/cobuild.py +147 -0
  15. dataiku_api_client-15.2.0/dataikuapi/agentmanagement/metrics.py +118 -0
  16. dataiku_api_client-15.2.0/dataikuapi/agentmanagement/operations.py +168 -0
  17. dataiku_api_client-15.2.0/dataikuapi/agentmanagement/platform.py +465 -0
  18. dataiku_api_client-15.2.0/dataikuapi/agentmanagement/risk.py +154 -0
  19. dataiku_api_client-15.2.0/dataikuapi/agentmanagement/settings.py +34 -0
  20. dataiku_api_client-15.2.0/dataikuapi/agentmanagement/topic_family.py +69 -0
  21. dataiku_api_client-15.2.0/dataikuapi/agentmanagement_client.py +739 -0
  22. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/agent.py +18 -0
  23. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/agent_review.py +34 -20
  24. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/cobuild.py +9 -5
  25. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/future.py +0 -87
  26. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/job.py +41 -1
  27. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/project.py +31 -4
  28. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/retrieval_augmented_llm.py +18 -0
  29. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dssclient.py +48 -12
  30. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/setup.py +2 -2
  31. dataiku_api_client-15.1.0/dataikuapi/dss/dam.py +0 -1485
  32. dataiku_api_client-15.1.0/dataikuapi/dss/mira.py +0 -226
  33. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/LICENSE.txt +0 -0
  34. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/MANIFEST.in +0 -0
  35. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/README +0 -0
  36. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataiku_api_client.egg-info/dependency_links.txt +0 -0
  37. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataiku_api_client.egg-info/requires.txt +0 -0
  38. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataiku_api_client.egg-info/top_level.txt +0 -0
  39. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/_vendor/__init__.py +0 -0
  40. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/apinode_admin/__init__.py +0 -0
  41. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/apinode_admin/auth.py +0 -0
  42. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/apinode_admin/service.py +0 -0
  43. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/apinode_admin_client.py +0 -0
  44. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/apinode_client.py +0 -0
  45. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/auth.py +0 -0
  46. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/base_client.py +0 -0
  47. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/__init__.py +0 -0
  48. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/admin.py +0 -0
  49. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/agent_skill.py +0 -0
  50. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/agent_tool.py +0 -0
  51. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/analysis.py +0 -0
  52. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/apideployer.py +0 -0
  53. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/apiservice.py +0 -0
  54. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/app.py +0 -0
  55. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/businessapp.py +0 -0
  56. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/codestudio.py +0 -0
  57. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/continuousactivity.py +0 -0
  58. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/dashboard.py +0 -0
  59. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/data_collection.py +0 -0
  60. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/data_directories_footprint.py +0 -0
  61. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/data_quality.py +0 -0
  62. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/dataset.py +0 -0
  63. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/discussion.py +0 -0
  64. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/document_extractor.py +0 -0
  65. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/drift.py +0 -0
  66. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/enterprise_asset_library.py +0 -0
  67. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/evaluationcomparison.py +0 -0
  68. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/evaluationstore.py +0 -0
  69. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/feature_store.py +0 -0
  70. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/flow.py +0 -0
  71. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/insight.py +0 -0
  72. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/jupyternotebook.py +0 -0
  73. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/knowledgebank.py +0 -0
  74. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/labeling_task.py +0 -0
  75. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/langchain/__init__.py +0 -0
  76. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/langchain/embeddings.py +0 -0
  77. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/langchain/knowledge_bank.py +0 -0
  78. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/langchain/llm.py +0 -0
  79. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/langchain/skill.py +0 -0
  80. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/langchain/tool.py +0 -0
  81. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/langchain/utils.py +0 -0
  82. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/llm.py +0 -0
  83. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/llm_tracing/__init__.py +0 -0
  84. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/llm_utils/__init__.py +0 -0
  85. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/local_model.py +0 -0
  86. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/macro.py +0 -0
  87. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/managedfolder.py +0 -0
  88. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/meaning.py +0 -0
  89. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/messaging_channel.py +0 -0
  90. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/metrics.py +0 -0
  91. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/ml.py +0 -0
  92. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/mlflow.py +0 -0
  93. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/modelcomparison.py +0 -0
  94. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/modelevaluationstore.py +0 -0
  95. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/notebook.py +0 -0
  96. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/plugin.py +0 -0
  97. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/project_standards.py +0 -0
  98. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/projectdeployer.py +0 -0
  99. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/projectfolder.py +0 -0
  100. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/projectlibrary.py +0 -0
  101. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/recipe.py +0 -0
  102. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/savedmodel.py +0 -0
  103. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/scenario.py +0 -0
  104. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/semantic_model.py +0 -0
  105. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/sqlnotebook.py +0 -0
  106. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/sqlquery.py +0 -0
  107. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/statistics.py +0 -0
  108. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/streaming_endpoint.py +0 -0
  109. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/tools/__init__.py +0 -0
  110. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/tools/codegen.py +0 -0
  111. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/tools/langchain.py +0 -0
  112. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/unifiedmonitoring.py +0 -0
  113. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/utils.py +0 -0
  114. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/webapp.py +0 -0
  115. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/wiki.py +0 -0
  116. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss/workspace.py +0 -0
  117. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss_plugin_mlflow/__init__.py +0 -0
  118. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss_plugin_mlflow/artifact_repository.py +0 -0
  119. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss_plugin_mlflow/header_provider.py +0 -0
  120. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/dss_plugin_mlflow/utils.py +0 -0
  121. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/fm/__init__.py +0 -0
  122. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/fm/cloudaccounts.py +0 -0
  123. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/fm/future.py +0 -0
  124. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/fm/instances.py +0 -0
  125. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/fm/instancesettingstemplates.py +0 -0
  126. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/fm/loadbalancers.py +0 -0
  127. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/fm/tenant.py +0 -0
  128. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/fm/virtualnetworks.py +0 -0
  129. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/fmclient.py +0 -0
  130. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/govern/__init__.py +0 -0
  131. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/govern/admin.py +0 -0
  132. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/govern/admin_blueprint_designer.py +0 -0
  133. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/govern/admin_custom_pages_handler.py +0 -0
  134. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/govern/admin_roles_permissions_handler.py +0 -0
  135. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/govern/artifact.py +0 -0
  136. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/govern/artifact_search.py +0 -0
  137. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/govern/blueprint.py +0 -0
  138. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/govern/custom_page.py +0 -0
  139. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/govern/future.py +0 -0
  140. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/govern/time_series.py +0 -0
  141. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/govern/uploaded_file.py +0 -0
  142. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/govern/users_container.py +0 -0
  143. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/govern_client.py +0 -0
  144. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/iam/__init__.py +0 -0
  145. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/iam/settings.py +0 -0
  146. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/launchpad/__init__.py +0 -0
  147. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/launchpad/exceptions.py +0 -0
  148. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/launchpad/group.py +0 -0
  149. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/launchpad/node.py +0 -0
  150. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/launchpad/profile.py +0 -0
  151. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/launchpad/response.py +0 -0
  152. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/launchpad/task.py +0 -0
  153. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/launchpad/user.py +0 -0
  154. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/launchpad_client.py +0 -0
  155. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/secretsmanager/__init__.py +0 -0
  156. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/secretsmanager/secretsmanager.py +0 -0
  157. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/secretsmanager/vaultsmanager.py +0 -0
  158. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/dataikuapi/utils.py +0 -0
  159. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/requirements.txt +0 -0
  160. {dataiku_api_client-15.1.0 → dataiku_api_client-15.2.0}/setup.cfg +0 -0
@@ -2,6 +2,11 @@ Changelog
2
2
  ==========
3
3
 
4
4
 
5
+ 15.2.0 (2026-10-16)
6
+ -------------------
7
+
8
+ * Initial release for DSS 15.2.0
9
+
5
10
  15.1.0 (2026-10-09)
6
11
  -------------------
7
12
 
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dataiku-api-client
3
- Version: 15.1.0
3
+ Version: 15.2.0
4
4
  Summary: Python API client for Dataiku APIs
5
5
  Home-page: https://www.dataiku.com
6
- Download-URL: https://github.com/dataiku/dataiku-api-client-python/tarball/15.1.0
6
+ Download-URL: https://github.com/dataiku/dataiku-api-client-python/tarball/15.2.0
7
7
  Author: Dataiku
8
8
  Author-email: support@dataiku.com
9
9
  License: Apache Software License
@@ -36,6 +36,11 @@ Changelog
36
36
  ==========
37
37
 
38
38
 
39
+ 15.2.0 (2026-10-16)
40
+ -------------------
41
+
42
+ * Initial release for DSS 15.2.0
43
+
39
44
  15.1.0 (2026-10-09)
40
45
  -------------------
41
46
 
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dataiku-api-client
3
- Version: 15.1.0
3
+ Version: 15.2.0
4
4
  Summary: Python API client for Dataiku APIs
5
5
  Home-page: https://www.dataiku.com
6
- Download-URL: https://github.com/dataiku/dataiku-api-client-python/tarball/15.1.0
6
+ Download-URL: https://github.com/dataiku/dataiku-api-client-python/tarball/15.2.0
7
7
  Author: Dataiku
8
8
  Author-email: support@dataiku.com
9
9
  License: Apache Software License
@@ -36,6 +36,11 @@ Changelog
36
36
  ==========
37
37
 
38
38
 
39
+ 15.2.0 (2026-10-16)
40
+ -------------------
41
+
42
+ * Initial release for DSS 15.2.0
43
+
39
44
  15.1.0 (2026-10-09)
40
45
  -------------------
41
46
 
@@ -10,6 +10,7 @@ dataiku_api_client.egg-info/dependency_links.txt
10
10
  dataiku_api_client.egg-info/requires.txt
11
11
  dataiku_api_client.egg-info/top_level.txt
12
12
  dataikuapi/__init__.py
13
+ dataikuapi/agentmanagement_client.py
13
14
  dataikuapi/apinode_admin_client.py
14
15
  dataikuapi/apinode_client.py
15
16
  dataikuapi/auth.py
@@ -20,6 +21,21 @@ dataikuapi/govern_client.py
20
21
  dataikuapi/launchpad_client.py
21
22
  dataikuapi/utils.py
22
23
  dataikuapi/_vendor/__init__.py
24
+ dataikuapi/_vendor/requests_toolbelt/__init__.py
25
+ dataikuapi/_vendor/requests_toolbelt/_compat.py
26
+ dataikuapi/_vendor/requests_toolbelt/multipart/__init__.py
27
+ dataikuapi/_vendor/requests_toolbelt/multipart/encoder.py
28
+ dataikuapi/agentmanagement/__init__.py
29
+ dataikuapi/agentmanagement/_utils.py
30
+ dataikuapi/agentmanagement/agent.py
31
+ dataikuapi/agentmanagement/alerting.py
32
+ dataikuapi/agentmanagement/cobuild.py
33
+ dataikuapi/agentmanagement/metrics.py
34
+ dataikuapi/agentmanagement/operations.py
35
+ dataikuapi/agentmanagement/platform.py
36
+ dataikuapi/agentmanagement/risk.py
37
+ dataikuapi/agentmanagement/settings.py
38
+ dataikuapi/agentmanagement/topic_family.py
23
39
  dataikuapi/apinode_admin/__init__.py
24
40
  dataikuapi/apinode_admin/auth.py
25
41
  dataikuapi/apinode_admin/service.py
@@ -37,7 +53,6 @@ dataikuapi/dss/businessapp.py
37
53
  dataikuapi/dss/cobuild.py
38
54
  dataikuapi/dss/codestudio.py
39
55
  dataikuapi/dss/continuousactivity.py
40
- dataikuapi/dss/dam.py
41
56
  dataikuapi/dss/dashboard.py
42
57
  dataikuapi/dss/data_collection.py
43
58
  dataikuapi/dss/data_directories_footprint.py
@@ -64,7 +79,6 @@ dataikuapi/dss/managedfolder.py
64
79
  dataikuapi/dss/meaning.py
65
80
  dataikuapi/dss/messaging_channel.py
66
81
  dataikuapi/dss/metrics.py
67
- dataikuapi/dss/mira.py
68
82
  dataikuapi/dss/ml.py
69
83
  dataikuapi/dss/mlflow.py
70
84
  dataikuapi/dss/modelcomparison.py
@@ -8,7 +8,8 @@ from .apinode_admin_client import APINodeAdminClient
8
8
  from .dss.recipe import GroupingRecipeCreator, UpsertRecipeCreator, JoinRecipeCreator, StackRecipeCreator, WindowRecipeCreator, SyncRecipeCreator, SamplingRecipeCreator, SQLQueryRecipeCreator, CodeRecipeCreator, SplitRecipeCreator, SortRecipeCreator, TopNRecipeCreator, DistinctRecipeCreator, DownloadRecipeCreator, PredictionScoringRecipeCreator, ClusteringScoringRecipeCreator
9
9
 
10
10
  from .dss.admin import DSSUserImpersonationRule, DSSGroupImpersonationRule
11
- from .dss.dam import DAMAgentFilter
11
+ from .agentmanagement_client import AgentManagementClient
12
+ from .agentmanagement.agent import AgentFilter
12
13
 
13
14
  import sys
14
15
  import warnings
@@ -0,0 +1,8 @@
1
+ # Vendored from requests-toolbelt.
2
+ # Source: https://github.com/requests/toolbelt/tree/1.0.0
3
+ # License: Apache-2.0
4
+ # Modified from upstream by Dataiku.
5
+
6
+ from .multipart.encoder import MultipartEncoder
7
+
8
+ __all__ = ["MultipartEncoder"]
@@ -0,0 +1,66 @@
1
+ #
2
+ # Vendored from requests-toolbelt.
3
+ # Source: https://github.com/requests/toolbelt/tree/1.0.0
4
+ # License: Apache-2.0
5
+ # Modified from upstream by Dataiku.
6
+ #
7
+ """Private module full of compatibility hacks.
8
+
9
+ Primarily this is for downstream redistributions of requests that unvendor
10
+ urllib3 without providing a shim.
11
+
12
+ .. warning::
13
+
14
+ This module is private. If you use it, and something breaks, you were
15
+ warned
16
+ """
17
+
18
+ # Not used:
19
+ # import requests
20
+
21
+ try:
22
+ from requests.packages.urllib3 import fields
23
+ except ImportError:
24
+ from urllib3 import fields
25
+
26
+ # Not used:
27
+ # try:
28
+ # from requests.packages.urllib3.connection import HTTPConnection
29
+ # from requests.packages.urllib3 import connection
30
+ # except ImportError:
31
+ # try:
32
+ # from urllib3.connection import HTTPConnection
33
+ # from urllib3 import connection
34
+ # except ImportError:
35
+ # HTTPConnection = None
36
+ # connection = None
37
+
38
+ # Not used:
39
+ # if requests.__build__ < 0x020300:
40
+ # timeout = None
41
+ # else:
42
+ # try:
43
+ # from requests.packages.urllib3.util import timeout
44
+ # except ImportError:
45
+ # from urllib3.util import timeout
46
+
47
+ # Not used:
48
+ # import sys
49
+ # PY3 = sys.version_info > (3, 0)
50
+
51
+ # Not used:
52
+ # if PY3:
53
+ # from collections.abc import Mapping, MutableMapping
54
+ # import queue
55
+ # from urllib.parse import urlencode, urljoin
56
+ # else:
57
+ # from collections import Mapping, MutableMapping
58
+ # import Queue as queue
59
+ # from urllib import urlencode
60
+ # from urlparse import urljoin
61
+
62
+ # Not used:
63
+ # try:
64
+ # basestring = basestring
65
+ # except NameError:
66
+ # basestring = (str, bytes)
@@ -0,0 +1,9 @@
1
+ #
2
+ # Vendored from requests-toolbelt.
3
+ # Source: https://github.com/requests/toolbelt/tree/1.0.0
4
+ # License: Apache-2.0
5
+ # Modified from upstream by Dataiku.
6
+ #
7
+ from .encoder import MultipartEncoder
8
+
9
+ __all__ = ["MultipartEncoder"]
@@ -0,0 +1,471 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Vendored from requests-toolbelt.
4
+ # Source: https://github.com/requests/toolbelt/tree/1.0.0
5
+ # License: Apache-2.0
6
+ # Modified from upstream by Dataiku.
7
+ #
8
+ """
9
+
10
+ requests_toolbelt.multipart.encoder
11
+ ===================================
12
+
13
+ This holds all of the implementation details of the MultipartEncoder
14
+
15
+ """
16
+ import contextlib
17
+ import io
18
+ import os
19
+ from uuid import uuid4
20
+
21
+ # Not used:
22
+ # import requests
23
+
24
+ from .._compat import fields
25
+
26
+
27
+ class MultipartEncoder(object):
28
+
29
+ """
30
+
31
+ The ``MultipartEncoder`` object is a generic interface to the engine that
32
+ will create a ``multipart/form-data`` body for you.
33
+
34
+ The basic usage is:
35
+
36
+ .. code-block:: python
37
+
38
+ import requests
39
+ from requests_toolbelt import MultipartEncoder
40
+
41
+ encoder = MultipartEncoder({'field': 'value',
42
+ 'other_field': 'other_value'})
43
+ r = requests.post('https://httpbin.org/post', data=encoder,
44
+ headers={'Content-Type': encoder.content_type})
45
+
46
+ If you do not need to take advantage of streaming the post body, you can
47
+ also do:
48
+
49
+ .. code-block:: python
50
+
51
+ r = requests.post('https://httpbin.org/post',
52
+ data=encoder.to_string(),
53
+ headers={'Content-Type': encoder.content_type})
54
+
55
+ If you want the encoder to use a specific order, you can use an
56
+ OrderedDict or more simply, a list of tuples:
57
+
58
+ .. code-block:: python
59
+
60
+ encoder = MultipartEncoder([('field', 'value'),
61
+ ('other_field', 'other_value')])
62
+
63
+ .. versionchanged:: 0.4.0
64
+
65
+ You can also provide tuples as part values as you would provide them to
66
+ requests' ``files`` parameter.
67
+
68
+ .. code-block:: python
69
+
70
+ encoder = MultipartEncoder({
71
+ 'field': ('file_name', b'{"a": "b"}', 'application/json',
72
+ {'X-My-Header': 'my-value'})
73
+ })
74
+
75
+ .. warning::
76
+
77
+ This object will end up directly in :mod:`httplib`. Currently,
78
+ :mod:`httplib` has a hard-coded read size of **8192 bytes**. This
79
+ means that it will loop until the file has been read and your upload
80
+ could take a while. This is **not** a bug in requests. A feature is
81
+ being considered for this object to allow you, the user, to specify
82
+ what size should be returned on a read. If you have opinions on this,
83
+ please weigh in on `this issue`_.
84
+
85
+ .. _this issue:
86
+ https://github.com/requests/toolbelt/issues/75
87
+
88
+ """
89
+
90
+ def __init__(self, fields, boundary=None, encoding='utf-8'):
91
+ #: Boundary value either passed in by the user or created
92
+ self.boundary_value = boundary or uuid4().hex
93
+
94
+ # Computed boundary
95
+ self.boundary = '--{}'.format(self.boundary_value)
96
+
97
+ #: Encoding of the data being passed in
98
+ self.encoding = encoding
99
+
100
+ # Pre-encoded boundary
101
+ self._encoded_boundary = b''.join([
102
+ encode_with(self.boundary, self.encoding),
103
+ encode_with('\r\n', self.encoding)
104
+ ])
105
+
106
+ #: Fields provided by the user
107
+ self.fields = fields
108
+
109
+ #: Whether or not the encoder is finished
110
+ self.finished = False
111
+
112
+ #: Pre-computed parts of the upload
113
+ self.parts = []
114
+
115
+ # Pre-computed parts iterator
116
+ self._iter_parts = iter([])
117
+
118
+ # The part we're currently working with
119
+ self._current_part = None
120
+
121
+ # Cached computation of the body's length
122
+ self._len = None
123
+
124
+ # Our buffer
125
+ self._buffer = CustomBytesIO(encoding=encoding)
126
+
127
+ # Pre-compute each part's headers
128
+ self._prepare_parts()
129
+
130
+ # Load boundary into buffer
131
+ self._write_boundary()
132
+
133
+ @property
134
+ def len(self):
135
+ """Length of the multipart/form-data body.
136
+
137
+ requests will first attempt to get the length of the body by calling
138
+ ``len(body)`` and then by checking for the ``len`` attribute.
139
+
140
+ On 32-bit systems, the ``__len__`` method cannot return anything
141
+ larger than an integer (in C) can hold. If the total size of the body
142
+ is even slightly larger than 4GB users will see an OverflowError. This
143
+ manifested itself in `bug #80`_.
144
+
145
+ As such, we now calculate the length lazily as a property.
146
+
147
+ .. _bug #80:
148
+ https://github.com/requests/toolbelt/issues/80
149
+ """
150
+ return self._len or self._calculate_length()
151
+
152
+ # Not used:
153
+ # def __repr__(self):
154
+ # pass
155
+
156
+ def _calculate_length(self):
157
+ """
158
+ This uses the parts to calculate the length of the body.
159
+
160
+ This returns the calculated length so __len__ can be lazy.
161
+ """
162
+ boundary_len = len(self.boundary)
163
+ self._len = sum(
164
+ (boundary_len + total_len(p) + 4) for p in self.parts
165
+ ) + boundary_len + 4
166
+ return self._len
167
+
168
+ def _calculate_load_amount(self, read_size):
169
+ """This calculates how many bytes need to be added to the buffer.
170
+
171
+ When a consumer read's ``x`` from the buffer, there are two cases to
172
+ satisfy:
173
+
174
+ 1. Enough data in the buffer to return the requested amount
175
+ 2. Not enough data
176
+
177
+ This function uses the amount of unread bytes in the buffer and
178
+ determines how much the Encoder has to load before it can return the
179
+ requested amount of bytes.
180
+
181
+ :param int read_size: the number of bytes the consumer requests
182
+ :returns: int -- the number of bytes that must be loaded into the
183
+ buffer before the read can be satisfied. This will be strictly
184
+ non-negative
185
+ """
186
+ amount = read_size - total_len(self._buffer)
187
+ return amount if amount > 0 else 0
188
+
189
+ def _load(self, amount):
190
+ """Load ``amount`` number of bytes into the buffer."""
191
+ self._buffer.smart_truncate()
192
+ part = self._current_part or self._next_part()
193
+ while amount == -1 or amount > 0:
194
+ written = 0
195
+ if part and not part.bytes_left_to_write():
196
+ written += self._write(b'\r\n')
197
+ written += self._write_boundary()
198
+ part = self._next_part()
199
+
200
+ if not part:
201
+ written += self._write_closing_boundary()
202
+ self.finished = True
203
+ break
204
+
205
+ written += part.write_to(self._buffer, amount)
206
+
207
+ if amount != -1:
208
+ amount -= written
209
+
210
+ def _next_part(self):
211
+ try:
212
+ p = self._current_part = next(self._iter_parts)
213
+ except StopIteration:
214
+ p = None
215
+ return p
216
+
217
+ def _iter_fields(self):
218
+ _fields = self.fields
219
+ if hasattr(self.fields, 'items'):
220
+ _fields = list(self.fields.items())
221
+ for k, v in _fields:
222
+ file_name = None
223
+ file_type = None
224
+ file_headers = None
225
+ if isinstance(v, (list, tuple)):
226
+ if len(v) == 2:
227
+ file_name, file_pointer = v
228
+ elif len(v) == 3:
229
+ file_name, file_pointer, file_type = v
230
+ else:
231
+ file_name, file_pointer, file_type, file_headers = v
232
+ else:
233
+ file_pointer = v
234
+
235
+ field = fields.RequestField(name=k, data=file_pointer,
236
+ filename=file_name,
237
+ headers=file_headers)
238
+ field.make_multipart(content_type=file_type)
239
+ yield field
240
+
241
+ def _prepare_parts(self):
242
+ """This uses the fields provided by the user and creates Part objects.
243
+
244
+ It populates the `parts` attribute and uses that to create a
245
+ generator for iteration.
246
+ """
247
+ enc = self.encoding
248
+ self.parts = [Part.from_field(f, enc) for f in self._iter_fields()]
249
+ self._iter_parts = iter(self.parts)
250
+
251
+ def _write(self, bytes_to_write):
252
+ """Write the bytes to the end of the buffer.
253
+
254
+ :param bytes bytes_to_write: byte-string (or bytearray) to append to
255
+ the buffer
256
+ :returns: int -- the number of bytes written
257
+ """
258
+ return self._buffer.append(bytes_to_write)
259
+
260
+ def _write_boundary(self):
261
+ """Write the boundary to the end of the buffer."""
262
+ return self._write(self._encoded_boundary)
263
+
264
+ def _write_closing_boundary(self):
265
+ """Write the bytes necessary to finish a multipart/form-data body."""
266
+ with reset(self._buffer):
267
+ self._buffer.seek(-2, 2)
268
+ self._buffer.write(b'--\r\n')
269
+ return 2
270
+
271
+ # Not used:
272
+ # def _write_headers(self, headers):
273
+ # pass
274
+
275
+ @property
276
+ def content_type(self):
277
+ return str(
278
+ 'multipart/form-data; boundary={}'.format(self.boundary_value)
279
+ )
280
+
281
+ # Not used:
282
+ # def to_string(self):
283
+ # pass
284
+
285
+ def read(self, size=-1):
286
+ """Read data from the streaming encoder.
287
+
288
+ :param int size: (optional), If provided, ``read`` will return exactly
289
+ that many bytes. If it is not provided, it will return the
290
+ remaining bytes.
291
+ :returns: bytes
292
+ """
293
+ if self.finished:
294
+ return self._buffer.read(size)
295
+
296
+ bytes_to_load = size
297
+ if bytes_to_load != -1 and bytes_to_load is not None:
298
+ bytes_to_load = self._calculate_load_amount(int(size))
299
+
300
+ self._load(bytes_to_load)
301
+ return self._buffer.read(size)
302
+
303
+ def encode_with(string, encoding):
304
+ """Encoding ``string`` with ``encoding`` if necessary.
305
+
306
+ :param str string: If string is a bytes object, it will not encode it.
307
+ Otherwise, this function will encode it with the provided encoding.
308
+ :param str encoding: The encoding with which to encode string.
309
+ :returns: encoded bytes object
310
+ """
311
+ if not (string is None or isinstance(string, bytes)):
312
+ return string.encode(encoding)
313
+ return string
314
+
315
+
316
+ # Not used:
317
+ # def readable_data(data, encoding):
318
+ # pass
319
+
320
+
321
+ def total_len(o):
322
+ if hasattr(o, '__len__'):
323
+ return len(o)
324
+
325
+ if hasattr(o, 'len'):
326
+ return o.len
327
+
328
+ if hasattr(o, 'fileno'):
329
+ try:
330
+ fileno = o.fileno()
331
+ except io.UnsupportedOperation:
332
+ pass
333
+ else:
334
+ return os.fstat(fileno).st_size
335
+
336
+ if hasattr(o, 'getvalue'):
337
+ return len(o.getvalue())
338
+
339
+
340
+ @contextlib.contextmanager
341
+ def reset(buffer):
342
+ """Keep track of the buffer's current position and write to the end.
343
+
344
+ This is a context manager meant to be used when adding data to the buffer.
345
+ It eliminates the need for every function to be concerned with the
346
+ position of the cursor in the buffer.
347
+ """
348
+ original_position = buffer.tell()
349
+ buffer.seek(0, 2)
350
+ yield
351
+ buffer.seek(original_position, 0)
352
+
353
+
354
+ def coerce_data(data, encoding):
355
+ """Ensure that every object's __len__ behaves uniformly."""
356
+ if not isinstance(data, CustomBytesIO):
357
+ if hasattr(data, 'getvalue'):
358
+ if hasattr(data, 'read'):
359
+ # Consume from the current cursor, as requests' ``files``
360
+ # parameter does, rather than restarting at byte zero.
361
+ return CustomBytesIO(data.read(), encoding)
362
+ return CustomBytesIO(data.getvalue(), encoding)
363
+
364
+ if hasattr(data, 'fileno'):
365
+ return FileWrapper(data)
366
+
367
+ if not hasattr(data, 'read'):
368
+ return CustomBytesIO(data, encoding)
369
+
370
+ return data
371
+
372
+
373
+ # Not used:
374
+ # def to_list(fields):
375
+ # pass
376
+
377
+
378
+ class Part(object):
379
+ def __init__(self, headers, body):
380
+ self.headers = headers
381
+ self.body = body
382
+ self.headers_unread = True
383
+ self.len = len(self.headers) + total_len(self.body)
384
+
385
+ @classmethod
386
+ def from_field(cls, field, encoding):
387
+ """Create a part from a Request Field generated by urllib3."""
388
+ headers = encode_with(field.render_headers(), encoding)
389
+ body = coerce_data(field.data, encoding)
390
+ return cls(headers, body)
391
+
392
+ def bytes_left_to_write(self):
393
+ """Determine if there are bytes left to write.
394
+
395
+ :returns: bool -- ``True`` if there are bytes left to write, otherwise
396
+ ``False``
397
+ """
398
+ to_read = 0
399
+ if self.headers_unread:
400
+ to_read += len(self.headers)
401
+
402
+ return (to_read + total_len(self.body)) > 0
403
+
404
+ def write_to(self, buffer, size):
405
+ """Write the requested amount of bytes to the buffer provided.
406
+
407
+ The number of bytes written may exceed size on the first read since we
408
+ load the headers ambitiously.
409
+
410
+ :param CustomBytesIO buffer: buffer we want to write bytes to
411
+ :param int size: number of bytes requested to be written to the buffer
412
+ :returns: int -- number of bytes actually written
413
+ """
414
+ written = 0
415
+ if self.headers_unread:
416
+ written += buffer.append(self.headers)
417
+ self.headers_unread = False
418
+
419
+ while total_len(self.body) > 0 and (size == -1 or written < size):
420
+ amount_to_read = size
421
+ if size != -1:
422
+ amount_to_read = size - written
423
+ written += buffer.append(self.body.read(amount_to_read))
424
+
425
+ return written
426
+
427
+
428
+ class CustomBytesIO(io.BytesIO):
429
+ def __init__(self, buffer=None, encoding='utf-8'):
430
+ buffer = encode_with(buffer, encoding)
431
+ super(CustomBytesIO, self).__init__(buffer)
432
+
433
+ def _get_end(self):
434
+ current_pos = self.tell()
435
+ self.seek(0, 2)
436
+ length = self.tell()
437
+ self.seek(current_pos, 0)
438
+ return length
439
+
440
+ @property
441
+ def len(self):
442
+ length = self._get_end()
443
+ return length - self.tell()
444
+
445
+ def append(self, bytes_):
446
+ with reset(self):
447
+ written = self.write(bytes_)
448
+ return written
449
+
450
+ def smart_truncate(self):
451
+ to_be_read = total_len(self)
452
+ already_read = self._get_end() - to_be_read
453
+
454
+ if already_read >= to_be_read:
455
+ old_bytes = self.read()
456
+ self.seek(0, 0)
457
+ self.truncate()
458
+ self.write(old_bytes)
459
+ self.seek(0, 0)
460
+
461
+
462
+ class FileWrapper(object):
463
+ def __init__(self, file_object):
464
+ self.fd = file_object
465
+
466
+ @property
467
+ def len(self):
468
+ return total_len(self.fd) - self.fd.tell()
469
+
470
+ def read(self, length=-1):
471
+ return self.fd.read(length)
@@ -0,0 +1 @@
1
+ """Resource handles for the Dataiku Agent Management API."""