dataiku-api-client 14.7.4__tar.gz → 14.7.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/HISTORY.txt +6 -0
  2. {dataiku_api_client-14.7.4/dataiku_api_client.egg-info → dataiku_api_client-14.7.5}/PKG-INFO +8 -2
  3. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5/dataiku_api_client.egg-info}/PKG-INFO +8 -2
  4. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/app.py +5 -1
  5. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/cobuild.py +297 -5
  6. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/project.py +18 -3
  7. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/scenario.py +3 -0
  8. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dssclient.py +7 -0
  9. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/setup.py +1 -1
  10. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/LICENSE.txt +0 -0
  11. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/MANIFEST.in +0 -0
  12. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/README +0 -0
  13. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataiku_api_client.egg-info/SOURCES.txt +0 -0
  14. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataiku_api_client.egg-info/dependency_links.txt +0 -0
  15. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataiku_api_client.egg-info/requires.txt +0 -0
  16. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataiku_api_client.egg-info/top_level.txt +0 -0
  17. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/__init__.py +0 -0
  18. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/apinode_admin/__init__.py +0 -0
  19. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/apinode_admin/auth.py +0 -0
  20. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/apinode_admin/service.py +0 -0
  21. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/apinode_admin_client.py +0 -0
  22. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/apinode_client.py +0 -0
  23. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/auth.py +0 -0
  24. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/base_client.py +0 -0
  25. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/__init__.py +0 -0
  26. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/admin.py +0 -0
  27. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/agent.py +0 -0
  28. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/agent_review.py +0 -0
  29. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/agent_tool.py +0 -0
  30. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/analysis.py +0 -0
  31. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/apideployer.py +0 -0
  32. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/apiservice.py +0 -0
  33. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/businessapp.py +0 -0
  34. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/codestudio.py +0 -0
  35. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/continuousactivity.py +0 -0
  36. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/dashboard.py +0 -0
  37. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/data_collection.py +0 -0
  38. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/data_directories_footprint.py +0 -0
  39. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/data_quality.py +0 -0
  40. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/dataset.py +0 -0
  41. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/discussion.py +0 -0
  42. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/document_extractor.py +0 -0
  43. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/drift.py +0 -0
  44. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/enterprise_asset_library.py +0 -0
  45. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/evaluationcomparison.py +0 -0
  46. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/evaluationstore.py +0 -0
  47. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/feature_store.py +0 -0
  48. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/flow.py +0 -0
  49. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/future.py +0 -0
  50. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/insight.py +0 -0
  51. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/job.py +0 -0
  52. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/jupyternotebook.py +0 -0
  53. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/knowledgebank.py +0 -0
  54. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/labeling_task.py +0 -0
  55. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/langchain/__init__.py +0 -0
  56. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/langchain/embeddings.py +0 -0
  57. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/langchain/knowledge_bank.py +0 -0
  58. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/langchain/llm.py +0 -0
  59. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/langchain/tool.py +0 -0
  60. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/langchain/utils.py +0 -0
  61. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/llm.py +0 -0
  62. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/llm_tracing/__init__.py +0 -0
  63. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/llm_utils/__init__.py +0 -0
  64. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/local_model.py +0 -0
  65. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/macro.py +0 -0
  66. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/managedfolder.py +0 -0
  67. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/meaning.py +0 -0
  68. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/messaging_channel.py +0 -0
  69. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/metrics.py +0 -0
  70. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/mira.py +0 -0
  71. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/ml.py +0 -0
  72. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/mlflow.py +0 -0
  73. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/modelcomparison.py +0 -0
  74. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/modelevaluationstore.py +0 -0
  75. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/notebook.py +0 -0
  76. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/plugin.py +0 -0
  77. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/project_standards.py +0 -0
  78. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/projectdeployer.py +0 -0
  79. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/projectfolder.py +0 -0
  80. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/projectlibrary.py +0 -0
  81. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/recipe.py +0 -0
  82. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/retrieval_augmented_llm.py +0 -0
  83. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/savedmodel.py +0 -0
  84. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/semantic_model.py +0 -0
  85. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/sqlnotebook.py +0 -0
  86. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/sqlquery.py +0 -0
  87. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/statistics.py +0 -0
  88. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/streaming_endpoint.py +0 -0
  89. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/tools/__init__.py +0 -0
  90. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/tools/codegen.py +0 -0
  91. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/tools/langchain.py +0 -0
  92. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/unifiedmonitoring.py +0 -0
  93. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/utils.py +0 -0
  94. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/webapp.py +0 -0
  95. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/wiki.py +0 -0
  96. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss/workspace.py +0 -0
  97. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss_plugin_mlflow/__init__.py +0 -0
  98. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss_plugin_mlflow/artifact_repository.py +0 -0
  99. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss_plugin_mlflow/header_provider.py +0 -0
  100. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/dss_plugin_mlflow/utils.py +0 -0
  101. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/fm/__init__.py +0 -0
  102. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/fm/cloudaccounts.py +0 -0
  103. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/fm/future.py +0 -0
  104. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/fm/instances.py +0 -0
  105. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/fm/instancesettingstemplates.py +0 -0
  106. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/fm/loadbalancers.py +0 -0
  107. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/fm/tenant.py +0 -0
  108. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/fm/virtualnetworks.py +0 -0
  109. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/fmclient.py +0 -0
  110. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/govern/__init__.py +0 -0
  111. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/govern/admin.py +0 -0
  112. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/govern/admin_blueprint_designer.py +0 -0
  113. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/govern/admin_custom_pages_handler.py +0 -0
  114. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/govern/admin_roles_permissions_handler.py +0 -0
  115. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/govern/artifact.py +0 -0
  116. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/govern/artifact_search.py +0 -0
  117. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/govern/blueprint.py +0 -0
  118. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/govern/custom_page.py +0 -0
  119. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/govern/future.py +0 -0
  120. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/govern/time_series.py +0 -0
  121. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/govern/uploaded_file.py +0 -0
  122. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/govern/users_container.py +0 -0
  123. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/govern_client.py +0 -0
  124. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/iam/__init__.py +0 -0
  125. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/iam/settings.py +0 -0
  126. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/launchpad/__init__.py +0 -0
  127. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/launchpad/exceptions.py +0 -0
  128. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/launchpad/group.py +0 -0
  129. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/launchpad/node.py +0 -0
  130. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/launchpad/profile.py +0 -0
  131. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/launchpad/response.py +0 -0
  132. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/launchpad/task.py +0 -0
  133. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/launchpad/user.py +0 -0
  134. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/launchpad_client.py +0 -0
  135. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/dataikuapi/utils.py +0 -0
  136. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/requirements.txt +0 -0
  137. {dataiku_api_client-14.7.4 → dataiku_api_client-14.7.5}/setup.cfg +0 -0
@@ -2,6 +2,12 @@ Changelog
2
2
  ==========
3
3
 
4
4
 
5
+
6
+ 14.7.5 (2026-09-29)
7
+ -------------------
8
+
9
+ * Initial release for DSS 14.7.5
10
+
5
11
  14.7.4 (2026-09-14)
6
12
  -------------------
7
13
 
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dataiku-api-client
3
- Version: 14.7.4
3
+ Version: 14.7.5
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/14.7.4
6
+ Download-URL: https://github.com/dataiku/dataiku-api-client-python/tarball/14.7.5
7
7
  Author: Dataiku
8
8
  Author-email: support@dataiku.com
9
9
  License: Apache Software License
@@ -36,6 +36,12 @@ Changelog
36
36
  ==========
37
37
 
38
38
 
39
+
40
+ 14.7.5 (2026-09-29)
41
+ -------------------
42
+
43
+ * Initial release for DSS 14.7.5
44
+
39
45
  14.7.4 (2026-09-14)
40
46
  -------------------
41
47
 
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dataiku-api-client
3
- Version: 14.7.4
3
+ Version: 14.7.5
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/14.7.4
6
+ Download-URL: https://github.com/dataiku/dataiku-api-client-python/tarball/14.7.5
7
7
  Author: Dataiku
8
8
  Author-email: support@dataiku.com
9
9
  License: Apache Software License
@@ -36,6 +36,12 @@ Changelog
36
36
  ==========
37
37
 
38
38
 
39
+
40
+ 14.7.5 (2026-09-29)
41
+ -------------------
42
+
43
+ * Initial release for DSS 14.7.5
44
+
39
45
  14.7.4 (2026-09-14)
40
46
  -------------------
41
47
 
@@ -264,7 +264,11 @@ class TemporaryDSSAppInstance(DSSAppInstance):
264
264
  """
265
265
  Delete this app instance.
266
266
  """
267
- self.get_as_project().delete(clear_managed_datasets=True)
267
+ self.get_as_project().delete(
268
+ clear_managed_datasets=True,
269
+ clear_output_managed_folders=True,
270
+ clear_managed_knowledge_banks=True,
271
+ clear_job_and_scenario_logs=True)
268
272
 
269
273
  def __enter__(self,):
270
274
  return self
@@ -7,6 +7,210 @@ from dataikuapi.dss.recipe import DSSRecipe
7
7
  from dataikuapi.dss.savedmodel import DSSSavedModel
8
8
  from dataikuapi.dss.streaming_endpoint import DSSStreamingEndpoint
9
9
 
10
+ import sys
11
+
12
+ # Only meant to avoid parent modules to fail when importing this module, but this won't work at runtime. We aren't trying to support
13
+ # Python versions older than 3.5 in this module. See this thread (if it still exists: https://dataiku.slack.com/archives/CBZBN0ZCN/p1788265325448089).
14
+ if sys.version_info > (3, 4):
15
+ from enum import Enum
16
+ else:
17
+ class Enum(object):
18
+ pass
19
+
20
+
21
+ class CobuildConversationMode(Enum):
22
+ """Mode used for a Cobuild user message."""
23
+ BUILD = "BUILD"
24
+ PLAN = "PLAN"
25
+
26
+
27
+ class CobuildPlanStatus(Enum):
28
+ """Lifecycle state of a :class:`CobuildPlan`."""
29
+ DRAFT = "DRAFT"
30
+ ACTIVE = "ACTIVE"
31
+ INACTIVE = "INACTIVE"
32
+
33
+
34
+ class CobuildPlanMilestoneStatus(Enum):
35
+ """Execution state of a :class:`CobuildPlanMilestone`."""
36
+ NOT_STARTED = "NOT_STARTED"
37
+ IN_PROGRESS = "IN_PROGRESS"
38
+ DONE = "DONE"
39
+
40
+
41
+ class CobuildPlanImplementationNotes(object):
42
+ """
43
+ Additional implementation context for a Cobuild plan milestone.
44
+
45
+ These notes record the tools that Cobuild planned to use and the reasoning it retained while
46
+ validating and executing the plan. They are provided for inspection only; changing this object
47
+ does not modify the plan in DSS.
48
+ """
49
+
50
+ def __init__(self, raw):
51
+ self._raw = raw
52
+
53
+ @property
54
+ def tools(self):
55
+ """
56
+ Names of the tools Cobuild planned to use.
57
+
58
+ :rtype: list[str]
59
+ """
60
+ return list(self._raw.get("tools") or [])
61
+
62
+ @property
63
+ def details(self):
64
+ """
65
+ Detailed implementation and validation notes.
66
+
67
+ :rtype: str or None
68
+ """
69
+ return self._raw.get("details")
70
+
71
+
72
+ class CobuildPlanMilestone(object):
73
+ """
74
+ One ordered unit of work in a :class:`CobuildPlan`.
75
+
76
+ Milestones are read-only snapshots of the plan returned by DSS. Their fields describe both the
77
+ intended work and its current execution state; changing this object does not modify the plan in
78
+ DSS.
79
+ """
80
+
81
+ def __init__(self, raw):
82
+ self._raw = raw
83
+
84
+ @property
85
+ def id(self):
86
+ """
87
+ Identifier of this milestone.
88
+
89
+ :rtype: str
90
+ """
91
+ return self._raw.get("id")
92
+
93
+ @property
94
+ def status(self):
95
+ """
96
+ Current execution state of this milestone.
97
+
98
+ :rtype: :class:`CobuildPlanMilestoneStatus`
99
+ """
100
+ return CobuildPlanMilestoneStatus(self._raw.get("status"))
101
+
102
+ @property
103
+ def title(self):
104
+ """
105
+ Short description of the milestone.
106
+
107
+ :rtype: str or None
108
+ """
109
+ return self._raw.get("title")
110
+
111
+ @property
112
+ def steps(self):
113
+ """
114
+ Markdown description of the work Cobuild intends to carry out.
115
+
116
+ :rtype: str or None
117
+ """
118
+ return self._raw.get("steps")
119
+
120
+ @property
121
+ def completion_checklist(self):
122
+ """
123
+ Checks Cobuild uses to determine whether the milestone is complete.
124
+
125
+ :rtype: list[str]
126
+ """
127
+ return list(self._raw.get("completionChecklist") or [])
128
+
129
+ @property
130
+ def output_description_summary(self):
131
+ """
132
+ Summary of the expected outputs or outcomes of this milestone.
133
+
134
+ :rtype: str or None
135
+ """
136
+ return self._raw.get("outputDescriptionSummary")
137
+
138
+ @property
139
+ def implementation_notes(self):
140
+ """
141
+ Additional implementation context, when Cobuild supplied it.
142
+
143
+ :rtype: :class:`CobuildPlanImplementationNotes` or None
144
+ """
145
+ raw = self._raw.get("implementationNotes")
146
+ return CobuildPlanImplementationNotes(raw) if raw is not None else None
147
+
148
+ class CobuildPlan(object):
149
+ """
150
+ Read-only typed snapshot of a Cobuild plan.
151
+
152
+ A plan is returned by :attr:`CobuildAssistantResponse.updated_plan` whenever Cobuild updates
153
+ it while processing a request. The snapshot contains the complete current plan, not a patch.
154
+ To revise it, send another message in :attr:`CobuildConversationMode.PLAN` mode; to execute a
155
+ draft, call :meth:`DSSCobuildConversation.approve_plan`.
156
+
157
+ For example::
158
+
159
+ plan = response.updated_plan
160
+ if plan is not None:
161
+ print(plan.title, plan.status.value)
162
+ for milestone in plan.milestones:
163
+ print(milestone.title, milestone.status.value)
164
+ """
165
+
166
+ def __init__(self, raw):
167
+ self._raw = raw
168
+
169
+ @property
170
+ def id(self):
171
+ """
172
+ Identifier of this plan.
173
+
174
+ :rtype: str
175
+ """
176
+ return self._raw.get("id")
177
+
178
+ @property
179
+ def status(self):
180
+ """
181
+ Current lifecycle state of this plan.
182
+
183
+ :rtype: :class:`CobuildPlanStatus`
184
+ """
185
+ return CobuildPlanStatus(self._raw.get("status"))
186
+
187
+ @property
188
+ def title(self):
189
+ """
190
+ Short description of the overall plan.
191
+
192
+ :rtype: str or None
193
+ """
194
+ return self._raw.get("title")
195
+
196
+ @property
197
+ def description(self):
198
+ """
199
+ Detailed description of the plan.
200
+
201
+ :rtype: str or None
202
+ """
203
+ return self._raw.get("description")
204
+
205
+ @property
206
+ def milestones(self):
207
+ """
208
+ Ordered milestones making up this plan.
209
+
210
+ :rtype: list of :class:`CobuildPlanMilestone`
211
+ """
212
+ return [CobuildPlanMilestone(raw) for raw in self._raw.get("milestones") or []]
213
+
10
214
 
11
215
  class CobuildMessage(object):
12
216
  def __init__(self, raw):
@@ -29,7 +233,7 @@ class CobuildAssistantResponse(CobuildMessage):
29
233
  .. important::
30
234
  Do not create this class directly, it is returned by :meth:`DSSCobuildConversation.send_message`
31
235
  :meth:`DSSCobuildConversation.answer_confirmation`, and
32
- :meth:`DSSCobuildConversation.answer_question`.
236
+ :meth:`DSSCobuildConversation.answer_question`, and :meth:`DSSCobuildConversation.approve_plan`.
33
237
  """
34
238
 
35
239
  @property
@@ -195,6 +399,20 @@ class CobuildAssistantResponse(CobuildMessage):
195
399
  """
196
400
  return self._raw.get("selectFirstAnswerByDefault")
197
401
 
402
+ @property
403
+ def updated_plan(self):
404
+ """
405
+ The latest non-null plan update emitted while processing this request.
406
+
407
+ The returned :class:`CobuildPlan` is a read-only snapshot of the complete current plan,
408
+ including its status, title, description, and typed milestones. ``None`` when the request
409
+ did not update a plan or if it got discarded.
410
+
411
+ :rtype: :class:`CobuildPlan` or None
412
+ """
413
+ raw = self._raw.get("updatedPlan")
414
+ return CobuildPlan(raw) if raw is not None else None
415
+
198
416
  def __repr__(self):
199
417
  return "CobuildAssistantResponse(type=%r, message=%r)" % (self.type, self.message)
200
418
 
@@ -333,8 +551,16 @@ class DSSCobuildConversation(object):
333
551
  )
334
552
  print(response.message)
335
553
 
336
- If a tool requires edit permission, pass ``allow_edit_project=True`` to
337
- :meth:`send_message` to allow Cobuild to create and edit objects for that message.
554
+ For tools that require project edit permission, pass ``allow_edit_project=True`` to
555
+ :meth:`send_message`. To allow file operations in specific managed folders, pass their IDs
556
+ through ``allow_edit_managed_folder_contents``.
557
+
558
+ Cobuild can also create plans, iterate with the user and implement them once approved by the user.
559
+ The conversation can be in one of three states: build mode without a plan, plan mode with a draft plan,
560
+ and build mode with an active plan. Send messages with
561
+ ``conversation_mode=CobuildConversationMode.PLAN`` to draft a plan, then call
562
+ :meth:`approve_plan` to execute it and wait for the final response. Discard a draft plan
563
+ before returning to build mode, and discard an active plan before returning to plan mode.
338
564
  """
339
565
 
340
566
  def __init__(self, client, project_key, conversation_id, selected_objects=None):
@@ -359,7 +585,7 @@ class DSSCobuildConversation(object):
359
585
  """
360
586
  return list(self._messages)
361
587
 
362
- def send_message(self, message, selected_objects=None, allow_edit_project=False):
588
+ def send_message(self, message, selected_objects=None, allow_edit_project=False, conversation_mode=CobuildConversationMode.BUILD, intelligence_level=None, allow_edit_managed_folder_contents=None):
363
589
  """
364
590
  Send a message to the assistant and wait for its response.
365
591
 
@@ -371,14 +597,30 @@ class DSSCobuildConversation(object):
371
597
  :param bool allow_edit_project: whether to allow Cobuild to create and edit everything
372
598
  needed in this project to follow this message. This permission applies only to this
373
599
  message.
600
+ :param list[str] allow_edit_managed_folder_contents: list of managed folder ids in which Cobuild is allowed to write, modify or delete files
601
+ This permission applies only to this message.
602
+ :param CobuildConversationMode conversation_mode: :attr:`CobuildConversationMode.BUILD`
603
+ (the default) for normal or plan-execution messages, or
604
+ :attr:`CobuildConversationMode.PLAN` to draft or revise a plan. A draft plan must
605
+ be discarded before switching back to build mode; an active plan must be discarded
606
+ before switching back to plan mode.
607
+ :param str intelligence_level: optional intelligence level: ``"LIGHT"``, ``"MEDIUM"``,
608
+ ``"HIGH"``, or ``"VERY_HIGH"``. ``None`` defaults to ``"MEDIUM"``.
374
609
 
375
610
  :returns: the assistant's response
376
611
  :rtype: :class:`CobuildAssistantResponse`
377
612
  """
613
+ if not isinstance(conversation_mode, CobuildConversationMode):
614
+ raise ValueError("conversation_mode must be a CobuildConversationMode, got %r" % conversation_mode)
378
615
  if selected_objects is not None:
379
616
  self._selected_objects = _DSS_objects_to_selected(self.project_key, selected_objects)
380
617
 
381
- self._messages.append(CobuildUserMessage({"type": "request", "message": message, "selected_objects": self._selected_objects}))
618
+ self._messages.append(CobuildUserMessage({
619
+ "type": "request",
620
+ "message": message,
621
+ "selected_objects": self._selected_objects,
622
+ "conversation_mode": conversation_mode.value,
623
+ }))
382
624
  raw = self.client._perform_json(
383
625
  "POST",
384
626
  "/projects/%s/cobuild/conversations/%s/messages" % (self.project_key, self.conversation_id),
@@ -386,6 +628,9 @@ class DSSCobuildConversation(object):
386
628
  "message": message,
387
629
  "selectedObjects": self._selected_objects or [],
388
630
  "allowEditProject": allow_edit_project,
631
+ "allowEditManagedFolderContents": allow_edit_managed_folder_contents or [],
632
+ "conversationMode": conversation_mode.value,
633
+ "intelligenceLevel": intelligence_level,
389
634
  },
390
635
  )
391
636
  response = CobuildAssistantResponse(raw)
@@ -394,6 +639,53 @@ class DSSCobuildConversation(object):
394
639
  self._messages.append(response)
395
640
  return response
396
641
 
642
+ def approve_plan(self, allow_edit_project=False, intelligence_level=None, allow_edit_managed_folder_contents=None):
643
+ """
644
+ Approve the current draft plan, wait for its execution, and return its final response.
645
+
646
+ A plan can be approved only while it is a draft. Use :meth:`detach_plan` to remove the
647
+ active plan before returning to plan mode.
648
+
649
+ :param bool allow_edit_project: whether to allow Cobuild to create and edit everything
650
+ needed in this project to execute the plan. This permission applies only to this
651
+ Cobuild turn. If Cobuild comes back with a message without the plan being fully
652
+ executed (e.g. after hitting a blocker), the same parameter should be passed on the
653
+ next turn to retain this behavior.
654
+ :param list[str] allow_edit_managed_folder_contents: list of managed folder ids in which Cobuild is allowed to write, modify or delete files
655
+ permission applies to the next turn, as it does for allow_edit_project
656
+ :param str intelligence_level: optional intelligence level: ``"LIGHT"``, ``"MEDIUM"``,
657
+ ``"HIGH"``, or ``"VERY_HIGH"``. ``None`` defaults to ``"MEDIUM"``.
658
+
659
+ :returns: the final assistant response from plan execution
660
+ :rtype: :class:`CobuildAssistantResponse`
661
+ """
662
+ raw = self.client._perform_json(
663
+ "POST",
664
+ "/projects/%s/cobuild/conversations/%s/plan/approve" % (self.project_key, self.conversation_id),
665
+ body={
666
+ "allowEditProject": allow_edit_project,
667
+ "allowEditManagedFolderContents": allow_edit_managed_folder_contents or [],
668
+ "intelligenceLevel": intelligence_level,
669
+ },
670
+ )
671
+ response = CobuildAssistantResponse(raw)
672
+ self._pending_confirmation_id = raw["confirmationId"] if response.is_confirmation_request else None
673
+ self._pending_question_id = raw["questionId"] if response.is_question_request else None
674
+ self._messages.append(response)
675
+ return response
676
+
677
+ def detach_plan(self):
678
+ """
679
+ Detach the current draft/active/completed plan and return the conversation to build mode.
680
+
681
+ Call this before leaving plan mode with a draft, or before entering plan mode while an
682
+ active plan is attached to the conversation.
683
+ """
684
+ return self.client._perform_empty(
685
+ "POST",
686
+ "/projects/%s/cobuild/conversations/%s/plan/discard" % (self.project_key, self.conversation_id),
687
+ )
688
+
397
689
  def answer_confirmation(self, choice, options=None):
398
690
  """
399
691
  Answer a pending confirmation request and wait for the assistant's next response.
@@ -102,7 +102,7 @@ class DSSProject(object):
102
102
  # Project deletion
103
103
  ########################################################
104
104
 
105
- def delete(self, clear_managed_datasets=False, clear_output_managed_folders=False, clear_job_and_scenario_logs=True,
105
+ def delete(self, clear_managed_datasets=False, clear_output_managed_folders=False, clear_job_and_scenario_logs=True, clear_managed_knowledge_banks=False,
106
106
  **kwargs):
107
107
  """
108
108
  Delete the project
@@ -113,6 +113,7 @@ class DSSProject(object):
113
113
  :param bool clear_managed_datasets: Should the data of managed datasets be cleared (defaults to **False**)
114
114
  :param bool clear_output_managed_folders: Should the data of managed folders used as outputs of recipes be cleared (defaults to **False**)
115
115
  :param bool clear_job_and_scenario_logs: Should the job and scenario logs be cleared (defaults to **True**)
116
+ :param bool clear_managed_knowledge_banks: Should the data of managed knowledge banks be cleared (defaults to **False**)
116
117
  :param bool wait: Whether to wait for the deletion to complete (defaults to **True**)
117
118
 
118
119
  :return: if `wait` is True, a dict containing messages about the deletion if errors arose. If `wait` is False,
@@ -131,6 +132,7 @@ class DSSProject(object):
131
132
  "clearManagedDatasets": clear_managed_datasets,
132
133
  "clearOutputManagedFolders": clear_output_managed_folders,
133
134
  "clearJobAndScenarioLogs": clear_job_and_scenario_logs,
135
+ "clearManagedKnowledgeBanks": clear_managed_knowledge_banks,
134
136
  "wait": wait
135
137
  })
136
138
  # no need to wait python-side, it's done java-side
@@ -3235,8 +3237,10 @@ class DSSProject(object):
3235
3237
  )
3236
3238
  print(response.message)
3237
3239
 
3238
- Without ``allow_edit_project=True``, Cobuild asks before using tools that create or edit
3239
- objects. In the public API, missing permissions are returned as an error response::
3240
+ Without the appropriate edit permission, Cobuild asks before using tools that create or
3241
+ edit objects. Pass ``allow_edit_project=True`` for project objects, or
3242
+ ``allow_edit_managed_folder_contents=["FOLDER_ID"]`` for files in specific managed
3243
+ folders. In the public API, missing permissions are returned as an error response::
3240
3244
 
3241
3245
  project = client.get_project("MY_PROJECT")
3242
3246
  conv = project.new_cobuild_conversation()
@@ -3261,6 +3265,17 @@ class DSSProject(object):
3261
3265
  )
3262
3266
  print(response.message)
3263
3267
 
3268
+ Cobuild can draft a plan before making changes. Continue sending messages with
3269
+ ``conversation_mode=CobuildConversationMode.PLAN`` while revising the draft, then
3270
+ approve it to execute the plan and return its final response. Discard an active plan
3271
+ before switching back to plan mode::
3272
+
3273
+ from dataikuapi.dss.cobuild import CobuildConversationMode
3274
+
3275
+ conv = project.new_cobuild_conversation()
3276
+ conv.send_message("Plan a cleanup of stale datasets", conversation_mode=CobuildConversationMode.PLAN)
3277
+ conv.approve_plan()
3278
+
3264
3279
  :returns: a handle to the newly created empty conversation
3265
3280
  :rtype: :class:`dataikuapi.dss.cobuild.DSSCobuildConversation`
3266
3281
  """
@@ -393,6 +393,9 @@ class DSSScenarioStatus(object):
393
393
  This is an approximate indication as scenario run may be delayed, especially in the case of
394
394
  multiple triggers or high load.
395
395
 
396
+ The next run excludes past occurrences that remain executable only because of a trigger's
397
+ tolerance window (about three days for monthly triggers).
398
+
396
399
  :rtype: :class:`datetime.datetime`
397
400
  """
398
401
  if not "nextRun" in self.data or self.data["nextRun"] == 0:
@@ -2372,6 +2372,13 @@ class DSSClient(object):
2372
2372
  """
2373
2373
  return DSSPermissionsCheckRequest(self)
2374
2374
 
2375
+ def get_cobuild_status(self):
2376
+ """Returns whether Cobuild is available to the authenticated caller.
2377
+
2378
+ :rtype: dict
2379
+ """
2380
+ return self._perform_json("GET", "/cobuild/status")
2381
+
2375
2382
  ########################################################
2376
2383
  # Enterprise Asset Library
2377
2384
  ########################################################
@@ -2,7 +2,7 @@
2
2
 
3
3
  from setuptools import setup
4
4
 
5
- VERSION = "14.7.4"
5
+ VERSION = "14.7.5"
6
6
 
7
7
  long_description = (open('README').read() + '\n\n' +
8
8
  open('HISTORY.txt').read())