codemie-sdk-python 0.1.440__tar.gz → 0.1.446__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 (62) hide show
  1. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/PKG-INFO +1 -1
  2. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/pyproject.toml +1 -1
  3. codemie_sdk_python-0.1.446/src/codemie_sdk/models/user.py +123 -0
  4. codemie_sdk_python-0.1.446/src/codemie_sdk/services/user.py +172 -0
  5. codemie_sdk_python-0.1.440/src/codemie_sdk/models/user.py +0 -46
  6. codemie_sdk_python-0.1.440/src/codemie_sdk/services/user.py +0 -34
  7. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/README.md +0 -0
  8. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/__init__.py +0 -0
  9. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/auth/__init__.py +0 -0
  10. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/auth/credentials.py +0 -0
  11. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/client/__init__.py +0 -0
  12. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/client/client.py +0 -0
  13. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/exceptions.py +0 -0
  14. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/__init__.py +0 -0
  15. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/admin.py +0 -0
  16. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/analytics.py +0 -0
  17. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/assistant.py +0 -0
  18. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/categories.py +0 -0
  19. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/common.py +0 -0
  20. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/conversation.py +0 -0
  21. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/datasource.py +0 -0
  22. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/errors.py +0 -0
  23. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/file_operation.py +0 -0
  24. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/guardrails.py +0 -0
  25. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/integration.py +0 -0
  26. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/llm.py +0 -0
  27. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/mermaid.py +0 -0
  28. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/project.py +0 -0
  29. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/skill.py +0 -0
  30. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/task.py +0 -0
  31. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/vendor_assistant.py +0 -0
  32. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/vendor_guardrail.py +0 -0
  33. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/vendor_knowledgebase.py +0 -0
  34. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/vendor_workflow.py +0 -0
  35. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/workflow.py +0 -0
  36. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/workflow_execution_payload.py +0 -0
  37. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/workflow_state.py +0 -0
  38. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/models/workflow_thoughts.py +0 -0
  39. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/admin.py +0 -0
  40. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/analytics.py +0 -0
  41. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/assistant.py +0 -0
  42. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/categories.py +0 -0
  43. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/codemie_guardrails.py +0 -0
  44. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/conversation.py +0 -0
  45. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/datasource.py +0 -0
  46. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/files.py +0 -0
  47. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/integration.py +0 -0
  48. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/llm.py +0 -0
  49. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/mermaid.py +0 -0
  50. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/project.py +0 -0
  51. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/skill.py +0 -0
  52. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/task.py +0 -0
  53. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/vendor_assistant.py +0 -0
  54. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/vendor_guardrail.py +0 -0
  55. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/vendor_knowledgebase.py +0 -0
  56. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/vendor_workflow.py +0 -0
  57. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/webhook.py +0 -0
  58. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/workflow.py +0 -0
  59. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/workflow_execution.py +0 -0
  60. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/services/workflow_execution_state.py +0 -0
  61. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/src/codemie_sdk/utils/__init__.py +0 -0
  62. {codemie_sdk_python-0.1.440 → codemie_sdk_python-0.1.446}/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.440
3
+ Version: 0.1.446
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.440"
3
+ version = "0.1.446"
4
4
  description = "CodeMie SDK for Python"
5
5
  authors = [
6
6
  "Vadym Vlasenko <vadym_vlasenko@epam.com>",
@@ -0,0 +1,123 @@
1
+ """Models for user-related data structures."""
2
+
3
+ from typing import List, Optional
4
+
5
+ from pydantic import BaseModel, ConfigDict, Field
6
+
7
+
8
+ class PaginationInfo(BaseModel):
9
+ model_config = ConfigDict(extra="ignore")
10
+
11
+ total: int
12
+ page: int
13
+ per_page: int
14
+
15
+
16
+ class AdminUserListItem(BaseModel):
17
+ model_config = ConfigDict(extra="ignore")
18
+
19
+ id: str
20
+ username: str
21
+ email: str
22
+ name: Optional[str] = None
23
+ user_type: Optional[str] = None
24
+ is_active: bool
25
+ is_admin: bool
26
+ is_maintainer: bool = False
27
+ auth_source: Optional[str] = None
28
+ last_login_at: Optional[str] = None
29
+ date: Optional[str] = None
30
+
31
+
32
+ class PaginatedUserListResponse(BaseModel):
33
+ model_config = ConfigDict(extra="ignore")
34
+
35
+ data: List[AdminUserListItem]
36
+ pagination: PaginationInfo
37
+
38
+
39
+ class AdminUserProjectInfo(BaseModel):
40
+ model_config = ConfigDict(extra="ignore")
41
+
42
+ name: str
43
+ is_project_admin: bool = False
44
+
45
+
46
+ class CodeMieUserDetail(BaseModel):
47
+ model_config = ConfigDict(extra="ignore")
48
+
49
+ id: str
50
+ username: str
51
+ email: str
52
+ name: Optional[str] = None
53
+ picture: Optional[str] = None
54
+ user_type: Optional[str] = None
55
+ is_active: bool
56
+ is_admin: bool
57
+ is_maintainer: bool = False
58
+ auth_source: Optional[str] = None
59
+ email_verified: bool = False
60
+ last_login_at: Optional[str] = None
61
+ projects: List[AdminUserProjectInfo] = []
62
+ project_limit: Optional[int] = None
63
+ knowledge_bases: List[str] = []
64
+ date: Optional[str] = None
65
+ update_date: Optional[str] = None
66
+ deleted_at: Optional[str] = None
67
+
68
+
69
+ class AdminUserProject(BaseModel):
70
+ model_config = ConfigDict(extra="ignore")
71
+
72
+ project_name: str
73
+ is_project_admin: bool = False
74
+ date: Optional[str] = None
75
+
76
+
77
+ class UserProjectsResponse(BaseModel):
78
+ model_config = ConfigDict(extra="ignore")
79
+
80
+ projects: List[AdminUserProject] = []
81
+
82
+
83
+ class User(BaseModel):
84
+ """Model representing a user profile."""
85
+
86
+ model_config = ConfigDict(populate_by_name=True, extra="ignore")
87
+
88
+ user_id: str = Field(
89
+ description="Unique identifier of the user", validation_alias="userId"
90
+ )
91
+ name: str = Field(description="Full name of the user")
92
+ username: str = Field(description="Username for authentication")
93
+ email: str = Field(description="User email")
94
+ is_admin: bool = Field(
95
+ description="Whether the user has admin privileges", validation_alias="isAdmin"
96
+ )
97
+ applications: list[str] = Field(
98
+ default_factory=list, description="List of applications the user has access to"
99
+ )
100
+ applications_admin: list[str] = Field(
101
+ default_factory=list,
102
+ description="List of applications where user has admin rights",
103
+ validation_alias="applicationsAdmin",
104
+ )
105
+ picture: str = Field(default="", description="URL to user's profile picture")
106
+ knowledge_bases: list[str] = Field(
107
+ default_factory=list,
108
+ description="List of knowledge bases the user has access to",
109
+ validation_alias="knowledgeBases",
110
+ )
111
+
112
+
113
+ class UserData(BaseModel):
114
+ """Model representing user data."""
115
+
116
+ model_config = ConfigDict(populate_by_name=True, extra="ignore")
117
+
118
+ id: str | None = Field(
119
+ default=None, description="Unique identifier of the user data record"
120
+ )
121
+ date: str | None = Field(default=None, description="Creation timestamp")
122
+ update_date: str | None = Field(default=None, description="Last update timestamp")
123
+ user_id: str | None = Field(default=None, description="Associated user identifier")
@@ -0,0 +1,172 @@
1
+ """User service implementation."""
2
+
3
+ from typing import Any, Dict, List, Optional
4
+
5
+ from ..models.user import (
6
+ AdminUserProject,
7
+ CodeMieUserDetail,
8
+ PaginatedUserListResponse,
9
+ User,
10
+ UserData,
11
+ UserProjectsResponse,
12
+ )
13
+ from ..utils.http import ApiRequestHandler, TokenSource
14
+
15
+
16
+ class UserService:
17
+ """Service for managing user profile and preferences."""
18
+
19
+ def __init__(self, api_domain: str, token: TokenSource, verify_ssl: bool = True):
20
+ """Initialize the User service.
21
+
22
+ Args:
23
+ api_domain: Base URL for the CodeMie API
24
+ token: Authentication token
25
+ verify_ssl: Whether to verify SSL certificates. Default: True
26
+ """
27
+ self._api = ApiRequestHandler(api_domain, token, verify_ssl)
28
+
29
+ def about_me(self) -> User:
30
+ """Get current user profile.
31
+
32
+ Returns:
33
+ User profile information
34
+ """
35
+ return self._api.get("/v1/user", User, wrap_response=False)
36
+
37
+ def get_data(self) -> UserData:
38
+ """Get user data and preferences.
39
+
40
+ Returns:
41
+ User data and preferences
42
+ """
43
+ return self._api.get("/v1/user/data", UserData, wrap_response=False)
44
+
45
+ def list_admin_users(
46
+ self,
47
+ page: int = 0,
48
+ per_page: int = 20,
49
+ search: Optional[str] = None,
50
+ filters: Optional[str] = None,
51
+ ) -> PaginatedUserListResponse:
52
+ """List all users with pagination and filtering (admin only).
53
+
54
+ Args:
55
+ page: Page number (0-indexed)
56
+ per_page: Results per page (10, 20, 50, or 100)
57
+ search: Search string matching email, username, or name
58
+ filters: Stringified JSON with filter keys: projects, user_type, is_active, platform_role, budgets
59
+ """
60
+ params: Dict[str, Any] = {"page": page, "per_page": per_page}
61
+ if search is not None:
62
+ params["search"] = search
63
+ if filters is not None:
64
+ params["filters"] = filters
65
+ return self._api.get(
66
+ "/v1/admin/users",
67
+ PaginatedUserListResponse,
68
+ params=params,
69
+ wrap_response=False,
70
+ )
71
+
72
+ def get_admin_user(self, user_id: str) -> CodeMieUserDetail:
73
+ """Get full details for a specific user (admin only).
74
+
75
+ Args:
76
+ user_id: The user's unique identifier
77
+ """
78
+ return self._api.get(
79
+ f"/v1/admin/users/{user_id}", CodeMieUserDetail, wrap_response=False
80
+ )
81
+
82
+ def update_admin_user(self, user_id: str, **kwargs: Any) -> CodeMieUserDetail:
83
+ """Update editable fields of a user (SuperAdmin only).
84
+
85
+ Args:
86
+ user_id: The user's unique identifier
87
+ **kwargs: Fields to update (name, picture, is_admin, is_maintainer, is_active, project_limit, etc.)
88
+ """
89
+ return self._api.put(
90
+ f"/v1/admin/users/{user_id}",
91
+ CodeMieUserDetail,
92
+ json_data=kwargs,
93
+ wrap_response=False,
94
+ )
95
+
96
+ def get_user_projects(self, user_id: str) -> List[AdminUserProject]:
97
+ """Get a user's project memberships (admin only).
98
+
99
+ Args:
100
+ user_id: The user's unique identifier
101
+ """
102
+ response = self._api.get(
103
+ f"/v1/admin/users/{user_id}/projects",
104
+ UserProjectsResponse,
105
+ wrap_response=False,
106
+ )
107
+ return response.projects
108
+
109
+ def assign_user_to_project(
110
+ self,
111
+ user_id: str,
112
+ project_name: str,
113
+ is_project_admin: bool = False,
114
+ ) -> dict:
115
+ """Grant a user access to a project (SuperAdmin only).
116
+
117
+ Args:
118
+ user_id: The user's unique identifier
119
+ project_name: Name of the project to grant access to
120
+ is_project_admin: Whether the user should be a project admin
121
+ """
122
+ return self._api.post(
123
+ f"/v1/admin/users/{user_id}/projects",
124
+ dict,
125
+ json_data={
126
+ "project_name": project_name,
127
+ "is_project_admin": is_project_admin,
128
+ },
129
+ wrap_response=False,
130
+ )
131
+
132
+ def remove_user_from_project(self, user_id: str, project_name: str) -> None:
133
+ """Remove a user's access to a project (SuperAdmin only).
134
+
135
+ Args:
136
+ user_id: The user's unique identifier
137
+ project_name: Name of the project to remove access from
138
+ """
139
+ self._api.delete(
140
+ f"/v1/admin/users/{user_id}/projects/{project_name}",
141
+ dict,
142
+ wrap_response=False,
143
+ )
144
+
145
+ def update_user_project_role(
146
+ self, user_id: str, project_name: str, is_project_admin: bool
147
+ ) -> None:
148
+ """Change a user's role within a project (SuperAdmin only).
149
+
150
+ Args:
151
+ user_id: The user's unique identifier
152
+ project_name: Name of the project
153
+ is_project_admin: Whether the user should be a project admin
154
+ """
155
+ self._api.put(
156
+ f"/v1/admin/users/{user_id}/projects/{project_name}",
157
+ dict,
158
+ json_data={"is_project_admin": is_project_admin},
159
+ wrap_response=False,
160
+ )
161
+
162
+ def deactivate_user(self, user_id: str) -> None:
163
+ """Deactivate (soft-delete) a user (SuperAdmin only).
164
+
165
+ Args:
166
+ user_id: The user's unique identifier
167
+ """
168
+ self._api.delete(
169
+ f"/v1/admin/users/{user_id}",
170
+ dict,
171
+ wrap_response=False,
172
+ )
@@ -1,46 +0,0 @@
1
- """Models for user-related data structures."""
2
-
3
- from pydantic import BaseModel, ConfigDict, Field
4
-
5
-
6
- class User(BaseModel):
7
- """Model representing a user profile."""
8
-
9
- model_config = ConfigDict(populate_by_name=True, extra="ignore")
10
-
11
- user_id: str = Field(
12
- description="Unique identifier of the user", validation_alias="userId"
13
- )
14
- name: str = Field(description="Full name of the user")
15
- username: str = Field(description="Username for authentication")
16
- email: str = Field(description="User email")
17
- is_admin: bool = Field(
18
- description="Whether the user has admin privileges", validation_alias="isAdmin"
19
- )
20
- applications: list[str] = Field(
21
- default_factory=list, description="List of applications the user has access to"
22
- )
23
- applications_admin: list[str] = Field(
24
- default_factory=list,
25
- description="List of applications where user has admin rights",
26
- validation_alias="applicationsAdmin",
27
- )
28
- picture: str = Field(default="", description="URL to user's profile picture")
29
- knowledge_bases: list[str] = Field(
30
- default_factory=list,
31
- description="List of knowledge bases the user has access to",
32
- validation_alias="knowledgeBases",
33
- )
34
-
35
-
36
- class UserData(BaseModel):
37
- """Model representing user data."""
38
-
39
- model_config = ConfigDict(populate_by_name=True, extra="ignore")
40
-
41
- id: str | None = Field(
42
- default=None, description="Unique identifier of the user data record"
43
- )
44
- date: str | None = Field(default=None, description="Creation timestamp")
45
- update_date: str | None = Field(default=None, description="Last update timestamp")
46
- user_id: str | None = Field(default=None, description="Associated user identifier")
@@ -1,34 +0,0 @@
1
- """User service implementation."""
2
-
3
- from ..models.user import User, UserData
4
- from ..utils.http import ApiRequestHandler, TokenSource
5
-
6
-
7
- class UserService:
8
- """Service for managing user profile and preferences."""
9
-
10
- def __init__(self, api_domain: str, token: TokenSource, verify_ssl: bool = True):
11
- """Initialize the User service.
12
-
13
- Args:
14
- api_domain: Base URL for the CodeMie API
15
- token: Authentication token
16
- verify_ssl: Whether to verify SSL certificates. Default: True
17
- """
18
- self._api = ApiRequestHandler(api_domain, token, verify_ssl)
19
-
20
- def about_me(self) -> User:
21
- """Get current user profile.
22
-
23
- Returns:
24
- User profile information
25
- """
26
- return self._api.get("/v1/user", User, wrap_response=False)
27
-
28
- def get_data(self) -> UserData:
29
- """Get user data and preferences.
30
-
31
- Returns:
32
- User data and preferences
33
- """
34
- return self._api.get("/v1/user/data", UserData, wrap_response=False)