codemie-sdk-python 0.1.521__tar.gz → 0.1.522__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 (65) hide show
  1. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/PKG-INFO +1 -1
  2. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/pyproject.toml +1 -1
  3. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/datasource.py +43 -12
  4. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/utils/http.py +34 -0
  5. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/README.md +0 -0
  6. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/__init__.py +0 -0
  7. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/auth/__init__.py +0 -0
  8. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/auth/credentials.py +0 -0
  9. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/client/__init__.py +0 -0
  10. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/client/client.py +0 -0
  11. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/exceptions.py +0 -0
  12. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/__init__.py +0 -0
  13. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/activity_event.py +0 -0
  14. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/admin.py +0 -0
  15. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/analytics.py +0 -0
  16. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/assistant.py +0 -0
  17. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/categories.py +0 -0
  18. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/common.py +0 -0
  19. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/conversation.py +0 -0
  20. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/datasource.py +0 -0
  21. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/errors.py +0 -0
  22. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/file_operation.py +0 -0
  23. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/guardrails.py +0 -0
  24. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/integration.py +0 -0
  25. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/llm.py +0 -0
  26. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/mermaid.py +0 -0
  27. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/project.py +0 -0
  28. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/skill.py +0 -0
  29. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/task.py +0 -0
  30. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/user.py +0 -0
  31. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/vendor_assistant.py +0 -0
  32. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/vendor_guardrail.py +0 -0
  33. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/vendor_knowledgebase.py +0 -0
  34. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/vendor_runtime.py +0 -0
  35. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/vendor_workflow.py +0 -0
  36. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/workflow.py +0 -0
  37. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/workflow_execution_payload.py +0 -0
  38. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/workflow_state.py +0 -0
  39. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/workflow_thoughts.py +0 -0
  40. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/models/workflow_transition.py +0 -0
  41. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/activity_event.py +0 -0
  42. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/admin.py +0 -0
  43. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/analytics.py +0 -0
  44. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/assistant.py +0 -0
  45. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/categories.py +0 -0
  46. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/codemie_guardrails.py +0 -0
  47. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/conversation.py +0 -0
  48. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/files.py +0 -0
  49. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/integration.py +0 -0
  50. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/llm.py +0 -0
  51. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/mermaid.py +0 -0
  52. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/project.py +0 -0
  53. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/skill.py +0 -0
  54. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/task.py +0 -0
  55. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/user.py +0 -0
  56. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/vendor_assistant.py +0 -0
  57. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/vendor_guardrail.py +0 -0
  58. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/vendor_knowledgebase.py +0 -0
  59. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/vendor_runtime.py +0 -0
  60. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/vendor_workflow.py +0 -0
  61. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/webhook.py +0 -0
  62. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/workflow.py +0 -0
  63. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/workflow_execution.py +0 -0
  64. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/services/workflow_execution_state.py +0 -0
  65. {codemie_sdk_python-0.1.521 → codemie_sdk_python-0.1.522}/src/codemie_sdk/utils/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: codemie-sdk-python
3
- Version: 0.1.521
3
+ Version: 0.1.522
4
4
  Summary: CodeMie SDK for Python
5
5
  Author: Vadym Vlasenko
6
6
  Author-email: vadym_vlasenko@epam.com
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "codemie-sdk-python"
3
- version = "0.1.521"
3
+ version = "0.1.522"
4
4
  description = "CodeMie SDK for Python"
5
5
  authors = [
6
6
  "Vadym Vlasenko <vadym_vlasenko@epam.com>",
@@ -60,26 +60,20 @@ class DatasourceService:
60
60
  json_data=request.model_dump(by_alias=True, exclude_none=True),
61
61
  )
62
62
 
63
- def create_file_datasource(
64
- self,
65
- request: FileDataSourceRequest,
63
+ @staticmethod
64
+ def _build_file_uploads(
66
65
  files: list[str | Tuple[str, bytes, str]],
67
- ) -> dict:
68
- """Create a new file datasource with file uploads.
66
+ ) -> list[tuple[str, tuple[str, bytes, str]]]:
67
+ """Build multipart file tuples from file paths or (filename, content, mime_type) tuples.
69
68
 
70
69
  Args:
71
- request: File datasource creation request
72
70
  files: List of files to upload. Each item can be:
73
71
  - str: file path (will read file and detect MIME type)
74
72
  - Tuple[str, bytes, str]: (filename, content, mime_type)
75
73
 
76
74
  Returns:
77
- dict: Response from the server containing operation status
75
+ list: Multipart-ready ("files", (filename, content, mime_type)) tuples
78
76
  """
79
- endpoint = "/v1/index/knowledge_base/file"
80
-
81
- # Prepare multipart form data
82
- params = request.model_dump(by_alias=True, exclude_none=True)
83
77
  file_uploads = []
84
78
 
85
79
  for file_item in files:
@@ -106,15 +100,47 @@ class DatasourceService:
106
100
  "Each file must be either a file path (str) or a tuple of (filename, content, mime_type)"
107
101
  )
108
102
 
103
+ return file_uploads
104
+
105
+ def create_file_datasource(
106
+ self,
107
+ request: FileDataSourceRequest,
108
+ files: list[str | Tuple[str, bytes, str]],
109
+ ) -> dict:
110
+ """Create a new file datasource with file uploads.
111
+
112
+ Args:
113
+ request: File datasource creation request
114
+ files: List of files to upload. Each item can be:
115
+ - str: file path (will read file and detect MIME type)
116
+ - Tuple[str, bytes, str]: (filename, content, mime_type)
117
+
118
+ Returns:
119
+ dict: Response from the server containing operation status
120
+ """
121
+ endpoint = "/v1/index/knowledge_base/file"
122
+
123
+ # Prepare multipart form data
124
+ params = request.model_dump(by_alias=True, exclude_none=True)
125
+ file_uploads = self._build_file_uploads(files)
126
+
109
127
  return self._api.post_multipart(
110
128
  endpoint, dict, params=params, files=file_uploads
111
129
  )
112
130
 
113
- def update(self, datasource_id: str, request: BaseUpdateDataSourceRequest) -> dict:
131
+ def update(
132
+ self,
133
+ datasource_id: str,
134
+ request: BaseUpdateDataSourceRequest,
135
+ files: list[str | Tuple[str, bytes, str]] | None = None,
136
+ ) -> dict:
114
137
  """Update an existing datasource.
115
138
 
116
139
  Args:
117
140
  request: Update datasource request
141
+ files: Optional list of files to add to a File datasource. Each item
142
+ can be a file path (str) or a (filename, content, mime_type)
143
+ tuple. Only supported for UpdateFileDataSourceRequest.
118
144
 
119
145
  Returns:
120
146
  dict: Response from the server containing operation status
@@ -140,6 +166,11 @@ class DatasourceService:
140
166
  # PUT /index/knowledge_base/file now uses Depends() — all fields are query params
141
167
  if isinstance(request, UpdateFileDataSourceRequest):
142
168
  params.update(data)
169
+ if files:
170
+ file_uploads = self._build_file_uploads(files)
171
+ return self._api.put_multipart(
172
+ endpoint, dict, params=params, files=file_uploads
173
+ )
143
174
  return self._api.put(endpoint, dict, {}, params=params)
144
175
 
145
176
  return self._api.put(endpoint, dict, params=params, json_data=data)
@@ -274,6 +274,40 @@ class ApiRequestHandler:
274
274
 
275
275
  return self._parse_response(response, response_model, wrap_response)
276
276
 
277
+ @log_request
278
+ def put_multipart(
279
+ self,
280
+ endpoint: str,
281
+ response_model: Type[T],
282
+ params: dict[str, Any] | None = None,
283
+ files: list | None = None,
284
+ wrap_response: bool = True,
285
+ ) -> T:
286
+ """Makes a PUT multipart/form-data request and parses the response.
287
+
288
+ Args:
289
+ endpoint: API endpoint path
290
+ response_model: Pydantic model class or list[Model] for response
291
+ params: Url parameters
292
+ files: List of file tuples for upload
293
+ wrap_response: Whether response is wrapped in 'data' field
294
+
295
+ Returns:
296
+ Parsed response object or list of objects
297
+ """
298
+ response = requests.put(
299
+ url=f"{self._base_url}{endpoint}",
300
+ headers=self._get_headers(
301
+ exclude_content_type=True
302
+ ), # Let requests set multipart content-type
303
+ params=params,
304
+ files=files,
305
+ verify=self._verify_ssl,
306
+ )
307
+ response.raise_for_status()
308
+
309
+ return self._parse_response(response, response_model, wrap_response)
310
+
277
311
  @log_request
278
312
  def put(
279
313
  self,