codemie-sdk-python 0.1.599__tar.gz → 0.1.601__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 (71) hide show
  1. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/PKG-INFO +1 -1
  2. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/pyproject.toml +1 -1
  3. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/client/client.py +4 -0
  4. codemie_sdk_python-0.1.601/src/codemie_sdk/models/cost_center.py +42 -0
  5. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/project.py +4 -0
  6. codemie_sdk_python-0.1.601/src/codemie_sdk/services/cost_center.py +76 -0
  7. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/project.py +4 -1
  8. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/README.md +0 -0
  9. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/__init__.py +0 -0
  10. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/auth/__init__.py +0 -0
  11. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/auth/credentials.py +0 -0
  12. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/client/__init__.py +0 -0
  13. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/exceptions.py +0 -0
  14. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/__init__.py +0 -0
  15. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/activity_event.py +0 -0
  16. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/admin.py +0 -0
  17. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/analytics.py +0 -0
  18. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/assistant.py +0 -0
  19. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/categories.py +0 -0
  20. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/common.py +0 -0
  21. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/conversation.py +0 -0
  22. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/datasource.py +0 -0
  23. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/errors.py +0 -0
  24. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/file_operation.py +0 -0
  25. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/guardrails.py +0 -0
  26. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/integration.py +0 -0
  27. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/llm.py +0 -0
  28. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/mcp_config.py +0 -0
  29. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/mermaid.py +0 -0
  30. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/skill.py +0 -0
  31. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/task.py +0 -0
  32. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/user.py +0 -0
  33. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/vendor_assistant.py +0 -0
  34. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/vendor_guardrail.py +0 -0
  35. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/vendor_knowledgebase.py +0 -0
  36. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/vendor_runtime.py +0 -0
  37. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/vendor_workflow.py +0 -0
  38. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/workflow.py +0 -0
  39. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/workflow_execution_payload.py +0 -0
  40. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/workflow_state.py +0 -0
  41. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/workflow_thoughts.py +0 -0
  42. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/models/workflow_transition.py +0 -0
  43. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/activity_event.py +0 -0
  44. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/admin.py +0 -0
  45. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/analytics.py +0 -0
  46. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/assistant.py +0 -0
  47. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/categories.py +0 -0
  48. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/codemie_guardrails.py +0 -0
  49. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/conversation.py +0 -0
  50. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/customer_config_service.py +0 -0
  51. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/datasource.py +0 -0
  52. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/dynamic_config.py +0 -0
  53. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/files.py +0 -0
  54. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/integration.py +0 -0
  55. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/llm.py +0 -0
  56. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/mcp_configs.py +0 -0
  57. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/mermaid.py +0 -0
  58. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/skill.py +0 -0
  59. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/task.py +0 -0
  60. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/user.py +0 -0
  61. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/vendor_assistant.py +0 -0
  62. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/vendor_guardrail.py +0 -0
  63. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/vendor_knowledgebase.py +0 -0
  64. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/vendor_runtime.py +0 -0
  65. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/vendor_workflow.py +0 -0
  66. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/webhook.py +0 -0
  67. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/workflow.py +0 -0
  68. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/workflow_execution.py +0 -0
  69. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/services/workflow_execution_state.py +0 -0
  70. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/utils/__init__.py +0 -0
  71. {codemie_sdk_python-0.1.599 → codemie_sdk_python-0.1.601}/src/codemie_sdk/utils/http.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: codemie-sdk-python
3
- Version: 0.1.599
3
+ Version: 0.1.601
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.599"
3
+ version = "0.1.601"
4
4
  description = "CodeMie SDK for Python"
5
5
  authors = [
6
6
  "Vadym Vlasenko <vadym_vlasenko@epam.com>",
@@ -28,6 +28,7 @@ from ..services.activity_event import ActivityEventService
28
28
  from ..services.codemie_guardrails import CodemieGuardrailService
29
29
  from ..services.dynamic_config import DynamicConfigService
30
30
  from ..services.mcp_configs import MCPConfigsService
31
+ from ..services.cost_center import CostCenterService
31
32
  from ..services.customer_config_service import CustomerConfigService
32
33
 
33
34
 
@@ -173,6 +174,9 @@ class CodeMieClient:
173
174
  self.customer_config = CustomerConfigService(
174
175
  self._api_domain, _token_source, verify_ssl=self._verify_ssl
175
176
  )
177
+ self.cost_centers = CostCenterService(
178
+ self._api_domain, _token_source, verify_ssl=self._verify_ssl
179
+ )
176
180
 
177
181
  @property
178
182
  def token(self) -> str:
@@ -0,0 +1,42 @@
1
+ # Copyright 2026 EPAM Systems, Inc. ("EPAM")
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """Cost center management models for the CodeMie SDK."""
16
+
17
+ from datetime import datetime
18
+ from uuid import UUID
19
+
20
+ from pydantic import BaseModel, ConfigDict
21
+
22
+
23
+ class CostCenterResponse(BaseModel):
24
+ """Response model for a cost center."""
25
+
26
+ model_config = ConfigDict(extra="ignore")
27
+
28
+ id: UUID
29
+ name: str
30
+ description: str | None = None
31
+ created_by: str
32
+ created_at: datetime
33
+ project_count: int = 0
34
+
35
+
36
+ class CreateCostCenterRequest(BaseModel):
37
+ """Request model for creating a cost center."""
38
+
39
+ model_config = ConfigDict(extra="ignore")
40
+
41
+ name: str
42
+ description: str | None = None
@@ -79,6 +79,7 @@ class ProjectListItem(BaseModel):
79
79
  cost_center_name: str | None = None
80
80
  spending: float | None = None
81
81
  budgets: list[ProjectBudgetItem] | None = []
82
+ chargeback_attribution: str = "project"
82
83
 
83
84
 
84
85
  class PaginationInfo(BaseModel):
@@ -116,6 +117,7 @@ class ProjectDetailResponse(BaseModel):
116
117
  cost_center_id: UUID | None = None
117
118
  cost_center_name: str | None = None
118
119
  members: list[ProjectMember]
120
+ chargeback_attribution: str = "project"
119
121
 
120
122
 
121
123
  class ProjectCreateRequest(BaseModel):
@@ -147,6 +149,7 @@ class ProjectCreateResponse(BaseModel):
147
149
  cost_center_id: UUID | None = None
148
150
  cost_center_name: str | None = None
149
151
  enforce_member_spend_limits: bool = False
152
+ chargeback_attribution: str = "project"
150
153
 
151
154
 
152
155
  # PATCH /v1/projects/{name} returns the same shape as the create response
@@ -168,6 +171,7 @@ class ProjectUpdateRequest(BaseModel):
168
171
  cost_center_id: UUID | None = None
169
172
  clear_cost_center: bool = False
170
173
  enforce_member_spend_limits: bool | None = None
174
+ chargeback_attribution: str | None = None
171
175
 
172
176
 
173
177
  class ProjectDeleteResponse(BaseModel):
@@ -0,0 +1,76 @@
1
+ # Copyright 2026 EPAM Systems, Inc. ("EPAM")
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """Cost center management service for the CodeMie SDK (admin endpoints)."""
16
+
17
+ from uuid import UUID
18
+
19
+ from ..models.cost_center import CostCenterResponse, CreateCostCenterRequest
20
+ from ..utils.http import ApiRequestHandler, TokenSource
21
+
22
+
23
+ class CostCenterService:
24
+ """Service for managing cost centers via the CodeMie admin API."""
25
+
26
+ def __init__(self, api_domain: str, token: TokenSource, verify_ssl: bool = True):
27
+ """Initialize the CostCenterService.
28
+
29
+ Args:
30
+ api_domain: Base URL for the CodeMie API
31
+ token: Authentication token
32
+ verify_ssl: Whether to verify SSL certificates
33
+ """
34
+ self._api = ApiRequestHandler(api_domain, token, verify_ssl)
35
+
36
+ def create_cost_center(
37
+ self,
38
+ name: str,
39
+ description: str | None = None,
40
+ ) -> CostCenterResponse:
41
+ """Create a new cost center (admin-only).
42
+
43
+ Args:
44
+ name: Cost center name
45
+ description: Optional description
46
+
47
+ Returns:
48
+ CostCenterResponse with the created cost center details including id
49
+
50
+ Raises:
51
+ HTTPError: If cost center creation fails
52
+ """
53
+ payload = CreateCostCenterRequest(name=name, description=description)
54
+
55
+ return self._api.post(
56
+ "/v1/admin/cost-centers",
57
+ response_model=CostCenterResponse,
58
+ json_data=payload.model_dump(exclude_none=True),
59
+ )
60
+
61
+ def delete_cost_center(self, cost_center_id: UUID) -> None:
62
+ """Soft-delete a cost center (admin-only).
63
+
64
+ Sets deleted_at on the cost center; does not remove the row.
65
+
66
+ Args:
67
+ cost_center_id: UUID of the cost center to delete
68
+
69
+ Raises:
70
+ HTTPError: If deletion fails
71
+ """
72
+ self._api.delete(
73
+ f"/v1/admin/cost-centers/{cost_center_id}",
74
+ response_model=dict,
75
+ wrap_response=False,
76
+ )
@@ -80,7 +80,7 @@ class ProjectService:
80
80
  return self._api.post(
81
81
  "/v1/projects",
82
82
  response_model=ProjectCreateResponse,
83
- json_data=payload.model_dump(exclude_none=True),
83
+ json_data=payload.model_dump(mode="json", exclude_none=True),
84
84
  )
85
85
 
86
86
  def list_projects(
@@ -154,6 +154,7 @@ class ProjectService:
154
154
  clear_cost_center: bool = False,
155
155
  enforce_member_spend_limits: bool | None = None,
156
156
  display_name: str | None = None,
157
+ chargeback_attribution: str | None = None,
157
158
  ) -> ProjectUpdateResponse:
158
159
  """Update a project.
159
160
 
@@ -165,6 +166,7 @@ class ProjectService:
165
166
  clear_cost_center: Set to True to remove cost center
166
167
  enforce_member_spend_limits: Enable/disable per-member spend enforcement
167
168
  display_name: Human-friendly display name (max 150 chars)
169
+ chargeback_attribution: Chargeback attribution mode ("project" or "cost_center")
168
170
 
169
171
  Returns:
170
172
  ProjectUpdateResponse with updated project details
@@ -179,6 +181,7 @@ class ProjectService:
179
181
  clear_cost_center=clear_cost_center,
180
182
  enforce_member_spend_limits=enforce_member_spend_limits,
181
183
  display_name=display_name,
184
+ chargeback_attribution=chargeback_attribution,
182
185
  )
183
186
 
184
187
  return self._api.patch(