superb-ai-onprem 0.9.0__py3-none-any.whl → 0.10.0__py3-none-any.whl

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.

Potentially problematic release.


This version of superb-ai-onprem might be problematic. Click here for more details.

Files changed (65) hide show
  1. spb_onprem/__init__.py +39 -9
  2. spb_onprem/_version.py +2 -2
  3. spb_onprem/data/entities/__init__.py +2 -0
  4. spb_onprem/data/entities/data.py +2 -0
  5. spb_onprem/data/entities/data_annotation_stats.py +8 -0
  6. spb_onprem/data/params/data_list.py +7 -2
  7. spb_onprem/data/params/update_data.py +11 -0
  8. spb_onprem/data/params/update_data_slice.py +14 -2
  9. spb_onprem/data/queries.py +12 -1
  10. spb_onprem/data/service.py +9 -0
  11. spb_onprem/entities.py +24 -6
  12. spb_onprem/models/__init__.py +8 -3
  13. spb_onprem/models/entities/__init__.py +9 -0
  14. spb_onprem/models/entities/model.py +32 -0
  15. spb_onprem/models/entities/model_page_info.py +14 -0
  16. spb_onprem/models/entities/model_train_class.py +15 -0
  17. spb_onprem/models/params/__init__.py +16 -4
  18. spb_onprem/models/params/create_model.py +70 -0
  19. spb_onprem/models/params/delete_model.py +11 -8
  20. spb_onprem/models/params/model.py +17 -0
  21. spb_onprem/models/params/models.py +60 -0
  22. spb_onprem/models/params/pin_model.py +17 -0
  23. spb_onprem/models/params/unpin_model.py +17 -0
  24. spb_onprem/models/params/update_model.py +61 -0
  25. spb_onprem/models/queries.py +224 -19
  26. spb_onprem/models/service.py +251 -30
  27. spb_onprem/reports/__init__.py +25 -0
  28. spb_onprem/reports/entities/__init__.py +10 -0
  29. spb_onprem/reports/entities/analytics_report.py +22 -0
  30. spb_onprem/reports/entities/analytics_report_item.py +30 -0
  31. spb_onprem/reports/entities/analytics_report_page_info.py +14 -0
  32. spb_onprem/reports/params/__init__.py +29 -0
  33. spb_onprem/reports/params/analytics_report.py +17 -0
  34. spb_onprem/reports/params/analytics_reports.py +87 -0
  35. spb_onprem/reports/params/create_analytics_report.py +35 -0
  36. spb_onprem/reports/params/create_analytics_report_item.py +47 -0
  37. spb_onprem/reports/params/delete_analytics_report.py +17 -0
  38. spb_onprem/reports/params/delete_analytics_report_item.py +20 -0
  39. spb_onprem/reports/params/update_analytics_report.py +38 -0
  40. spb_onprem/reports/params/update_analytics_report_item.py +46 -0
  41. spb_onprem/reports/queries.py +239 -0
  42. spb_onprem/reports/service.py +328 -0
  43. spb_onprem/searches.py +18 -0
  44. {superb_ai_onprem-0.9.0.dist-info → superb_ai_onprem-0.10.0.dist-info}/METADATA +53 -9
  45. {superb_ai_onprem-0.9.0.dist-info → superb_ai_onprem-0.10.0.dist-info}/RECORD +48 -38
  46. spb_onprem/models/entities.py +0 -9
  47. spb_onprem/models/params/get_models.py +0 -29
  48. spb_onprem/predictions/__init__.py +0 -7
  49. spb_onprem/predictions/entities.py +0 -11
  50. spb_onprem/predictions/params/__init__.py +0 -15
  51. spb_onprem/predictions/params/create_prediction_set.py +0 -44
  52. spb_onprem/predictions/params/delete_prediction_from_data.py +0 -20
  53. spb_onprem/predictions/params/delete_prediction_set.py +0 -14
  54. spb_onprem/predictions/params/get_prediction_set.py +0 -14
  55. spb_onprem/predictions/params/get_prediction_sets.py +0 -29
  56. spb_onprem/predictions/params/update_prediction_set_data_info.py +0 -28
  57. spb_onprem/predictions/queries.py +0 -110
  58. spb_onprem/predictions/service.py +0 -225
  59. tests/models/__init__.py +0 -1
  60. tests/models/test_model_service.py +0 -249
  61. tests/predictions/__init__.py +0 -1
  62. tests/predictions/test_prediction_service.py +0 -359
  63. {superb_ai_onprem-0.9.0.dist-info → superb_ai_onprem-0.10.0.dist-info}/WHEEL +0 -0
  64. {superb_ai_onprem-0.9.0.dist-info → superb_ai_onprem-0.10.0.dist-info}/licenses/LICENSE +0 -0
  65. {superb_ai_onprem-0.9.0.dist-info → superb_ai_onprem-0.10.0.dist-info}/top_level.txt +0 -0
@@ -1,68 +1,289 @@
1
- from typing import Optional, Dict, Any, List, Tuple, Union
2
-
1
+ from typing import Optional, Union, List, Any
3
2
  from spb_onprem.base_service import BaseService
4
- from spb_onprem.base_types import Undefined, UndefinedType
5
3
  from spb_onprem.exceptions import BadParameterError
4
+ from spb_onprem.base_types import Undefined, UndefinedType
6
5
  from .queries import Queries
7
- from .entities import Model
6
+ from .entities import Model, ModelPageInfo, ModelTrainClass
7
+ from .params.models import ModelsFilter
8
8
 
9
9
 
10
10
  class ModelService(BaseService):
11
- """Service class for handling model operations."""
11
+ """
12
+ Service class for handling model-related operations.
13
+ """
12
14
 
13
15
  def get_models(
14
16
  self,
15
17
  dataset_id: str,
16
- filter: Union[UndefinedType, Dict[str, Any]] = Undefined,
17
- cursor: Union[UndefinedType, str] = Undefined,
18
- length: int = 50
19
- ) -> Tuple[List[Model], Optional[str], int]:
20
- """Get paginated list of models for a dataset.
18
+ models_filter: Optional[ModelsFilter] = None,
19
+ cursor: Optional[str] = None,
20
+ length: Optional[int] = 10
21
+ ):
22
+ """
23
+ Get a list of models based on the provided filter and pagination parameters.
21
24
 
22
25
  Args:
23
- dataset_id (str): The dataset ID.
24
- filter (Union[UndefinedType, Dict[str, Any]]): Filter for models.
25
- cursor (Union[UndefinedType, str]): Cursor for pagination.
26
- length (int): Number of items to retrieve per page.
26
+ dataset_id (str): The dataset ID
27
+ models_filter (Optional[ModelsFilter]): Filter criteria for models
28
+ cursor (Optional[str]): Cursor for pagination
29
+ length (Optional[int]): Number of items per page (default: 10)
27
30
 
28
31
  Returns:
29
- Tuple[List[Model], Optional[str], int]: A tuple containing models, next cursor, and total count.
32
+ tuple: A tuple containing:
33
+ - List[Model]: A list of Model objects
34
+ - str: Next cursor for pagination
35
+ - int: Total count of models
30
36
  """
31
37
  if dataset_id is None:
32
38
  raise BadParameterError("dataset_id is required.")
33
-
39
+
40
+ if length > 50:
41
+ raise BadParameterError("The maximum length is 50.")
42
+
34
43
  response = self.request_gql(
35
- Queries.GET_MODELS,
36
- Queries.GET_MODELS["variables"](
44
+ Queries.MODELS,
45
+ Queries.MODELS["variables"](
37
46
  dataset_id=dataset_id,
38
- filter=filter,
47
+ models_filter=models_filter,
39
48
  cursor=cursor,
40
49
  length=length
41
50
  )
42
51
  )
43
- models_list = response.get("models", [])
52
+
53
+ page_info = ModelPageInfo.model_validate(response)
44
54
  return (
45
- [Model.model_validate(model) for model in models_list],
46
- response.get("next"),
47
- response.get("totalCount", 0)
55
+ page_info.models or [],
56
+ page_info.next,
57
+ page_info.total_count or 0
58
+ )
59
+
60
+ def get_model(
61
+ self,
62
+ dataset_id: str,
63
+ model_id: str,
64
+ ):
65
+ """
66
+ Retrieve a model by its ID.
67
+
68
+ Args:
69
+ dataset_id (str): The dataset ID
70
+ model_id (str): The ID of the model to retrieve
71
+
72
+ Returns:
73
+ Model: The retrieved model object
74
+ """
75
+ if dataset_id is None:
76
+ raise BadParameterError("dataset_id is required.")
77
+
78
+ if model_id is None:
79
+ raise BadParameterError("model_id is required.")
80
+
81
+ response = self.request_gql(
82
+ Queries.MODEL,
83
+ Queries.MODEL["variables"](
84
+ dataset_id=dataset_id,
85
+ model_id=model_id
86
+ ),
87
+ )
88
+ return Model.model_validate(response)
89
+
90
+ def create_model(
91
+ self,
92
+ dataset_id: str,
93
+ name: str,
94
+ baseline_model: str,
95
+ training_slice_ids: List[str],
96
+ validation_slice_ids: List[str],
97
+ description: Union[str, UndefinedType] = Undefined,
98
+ training_classes: Union[List[ModelTrainClass], UndefinedType] = Undefined,
99
+ model_content_id: Union[str, UndefinedType] = Undefined,
100
+ is_trained: Union[bool, UndefinedType] = Undefined,
101
+ trained_at: Union[str, UndefinedType] = Undefined,
102
+ is_pinned: Union[bool, UndefinedType] = Undefined,
103
+ meta: Union[Any, UndefinedType] = Undefined,
104
+ ):
105
+ """
106
+ Create a new model.
107
+
108
+ Args:
109
+ dataset_id (str): The dataset ID
110
+ name (str): The model name
111
+ baseline_model (str): The baseline model used
112
+ training_slice_ids (List[str]): The IDs of the training slices
113
+ validation_slice_ids (List[str]): The IDs of the validation slices
114
+ description (Optional[str]): The description of the model
115
+ training_classes (Optional[List[ModelTrainClass]]): The training classes
116
+ model_content_id (Optional[str]): The model content ID
117
+ is_trained (Optional[bool]): Whether the model is trained
118
+ trained_at (Optional[str]): When the model was trained
119
+ is_pinned (Optional[bool]): Whether the model is pinned
120
+ meta (Optional[Any]): The metadata of the model
121
+
122
+ Returns:
123
+ Model: The created model object
124
+ """
125
+ if dataset_id is None:
126
+ raise BadParameterError("dataset_id is required.")
127
+
128
+ if name is None:
129
+ raise BadParameterError("name is required.")
130
+
131
+ if baseline_model is None:
132
+ raise BadParameterError("baseline_model is required.")
133
+
134
+ if training_slice_ids is None:
135
+ raise BadParameterError("training_slice_ids is required.")
136
+
137
+ if validation_slice_ids is None:
138
+ raise BadParameterError("validation_slice_ids is required.")
139
+
140
+ response = self.request_gql(
141
+ Queries.CREATE_MODEL,
142
+ Queries.CREATE_MODEL["variables"](
143
+ dataset_id=dataset_id,
144
+ name=name,
145
+ baseline_model=baseline_model,
146
+ training_slice_ids=training_slice_ids,
147
+ validation_slice_ids=validation_slice_ids,
148
+ description=description,
149
+ training_classes=training_classes,
150
+ model_content_id=model_content_id,
151
+ is_trained=is_trained,
152
+ trained_at=trained_at,
153
+ is_pinned=is_pinned,
154
+ meta=meta,
155
+ ),
156
+ )
157
+ return Model.model_validate(response)
158
+
159
+ def update_model(
160
+ self,
161
+ dataset_id: str,
162
+ model_id: str,
163
+ name: Union[str, UndefinedType] = Undefined,
164
+ description: Union[str, UndefinedType] = Undefined,
165
+ training_classes: Union[List[ModelTrainClass], UndefinedType] = Undefined,
166
+ model_content_id: Union[str, UndefinedType] = Undefined,
167
+ is_trained: Union[bool, UndefinedType] = Undefined,
168
+ trained_at: Union[str, UndefinedType] = Undefined,
169
+ meta: Union[Any, UndefinedType] = Undefined,
170
+ ):
171
+ """
172
+ Update a model.
173
+
174
+ Args:
175
+ dataset_id (str): The dataset ID
176
+ model_id (str): The ID of the model to update
177
+ name (Optional[str]): The new name
178
+ description (Optional[str]): The new description
179
+ training_classes (Optional[List[ModelTrainClass]]): The new training classes
180
+ model_content_id (Optional[str]): The new model content ID
181
+ is_trained (Optional[bool]): The new trained status
182
+ trained_at (Optional[str]): The new trained timestamp
183
+ meta (Optional[Any]): The new metadata
184
+
185
+ Returns:
186
+ Model: The updated model object
187
+ """
188
+ if dataset_id is None:
189
+ raise BadParameterError("dataset_id is required.")
190
+
191
+ if model_id is None:
192
+ raise BadParameterError("model_id is required.")
193
+
194
+ response = self.request_gql(
195
+ Queries.UPDATE_MODEL,
196
+ Queries.UPDATE_MODEL["variables"](
197
+ dataset_id=dataset_id,
198
+ model_id=model_id,
199
+ name=name,
200
+ description=description,
201
+ training_classes=training_classes,
202
+ model_content_id=model_content_id,
203
+ is_trained=is_trained,
204
+ trained_at=trained_at,
205
+ meta=meta,
206
+ ),
48
207
  )
208
+ return Model.model_validate(response)
209
+
210
+ def pin_model(
211
+ self,
212
+ dataset_id: str,
213
+ model_id: str,
214
+ ):
215
+ """
216
+ Pin a model.
217
+
218
+ Args:
219
+ dataset_id (str): The dataset ID
220
+ model_id (str): The ID of the model to pin
221
+
222
+ Returns:
223
+ Model: The pinned model object
224
+ """
225
+ if dataset_id is None:
226
+ raise BadParameterError("dataset_id is required.")
227
+
228
+ if model_id is None:
229
+ raise BadParameterError("model_id is required.")
230
+
231
+ response = self.request_gql(
232
+ Queries.PIN_MODEL,
233
+ Queries.PIN_MODEL["variables"](
234
+ dataset_id=dataset_id,
235
+ model_id=model_id,
236
+ ),
237
+ )
238
+ return Model.model_validate(response)
239
+
240
+ def unpin_model(
241
+ self,
242
+ dataset_id: str,
243
+ model_id: str,
244
+ ):
245
+ """
246
+ Unpin a model.
247
+
248
+ Args:
249
+ dataset_id (str): The dataset ID
250
+ model_id (str): The ID of the model to unpin
251
+
252
+ Returns:
253
+ Model: The unpinned model object
254
+ """
255
+ if dataset_id is None:
256
+ raise BadParameterError("dataset_id is required.")
257
+
258
+ if model_id is None:
259
+ raise BadParameterError("model_id is required.")
260
+
261
+ response = self.request_gql(
262
+ Queries.UNPIN_MODEL,
263
+ Queries.UNPIN_MODEL["variables"](
264
+ dataset_id=dataset_id,
265
+ model_id=model_id,
266
+ ),
267
+ )
268
+ return Model.model_validate(response)
49
269
 
50
270
  def delete_model(
51
271
  self,
52
272
  dataset_id: str,
53
- model_id: str
273
+ model_id: str,
54
274
  ) -> bool:
55
- """Delete a model from the dataset.
275
+ """Delete a model.
56
276
 
57
277
  Args:
58
- dataset_id (str): The dataset ID.
59
- model_id (str): The model ID to delete.
278
+ dataset_id (str): The dataset ID
279
+ model_id (str): The ID of the model to delete
60
280
 
61
281
  Returns:
62
- bool: True if deletion was successful.
282
+ bool: True if deletion was successful
63
283
  """
64
284
  if dataset_id is None:
65
285
  raise BadParameterError("dataset_id is required.")
286
+
66
287
  if model_id is None:
67
288
  raise BadParameterError("model_id is required.")
68
289
 
@@ -70,7 +291,7 @@ class ModelService(BaseService):
70
291
  Queries.DELETE_MODEL,
71
292
  Queries.DELETE_MODEL["variables"](
72
293
  dataset_id=dataset_id,
73
- model_id=model_id
294
+ model_id=model_id,
74
295
  )
75
296
  )
76
- return response
297
+ return response
@@ -0,0 +1,25 @@
1
+ from .service import ReportService
2
+ from .entities import (
3
+ AnalyticsReport,
4
+ AnalyticsReportItem,
5
+ AnalyticsReportItemType,
6
+ AnalyticsReportPageInfo,
7
+ )
8
+ from .params import (
9
+ AnalyticsReportsFilter,
10
+ AnalyticsReportsFilterOptions,
11
+ AnalyticsReportsOrderBy,
12
+ AnalyticsReportListOrderFields,
13
+ )
14
+
15
+ __all__ = (
16
+ "ReportService",
17
+ "AnalyticsReport",
18
+ "AnalyticsReportItem",
19
+ "AnalyticsReportItemType",
20
+ "AnalyticsReportPageInfo",
21
+ "AnalyticsReportsFilter",
22
+ "AnalyticsReportsFilterOptions",
23
+ "AnalyticsReportsOrderBy",
24
+ "AnalyticsReportListOrderFields",
25
+ )
@@ -0,0 +1,10 @@
1
+ from .analytics_report import AnalyticsReport
2
+ from .analytics_report_item import AnalyticsReportItem, AnalyticsReportItemType
3
+ from .analytics_report_page_info import AnalyticsReportPageInfo
4
+
5
+ __all__ = (
6
+ "AnalyticsReport",
7
+ "AnalyticsReportItem",
8
+ "AnalyticsReportItemType",
9
+ "AnalyticsReportPageInfo",
10
+ )
@@ -0,0 +1,22 @@
1
+ from typing import Optional, List, Any
2
+ from spb_onprem.base_model import CustomBaseModel, Field
3
+ from .analytics_report_item import AnalyticsReportItem
4
+
5
+
6
+ class AnalyticsReport(CustomBaseModel):
7
+ """
8
+ 분석 리포트 엔터티
9
+
10
+ 데이터셋의 분석 리포트를 나타냅니다.
11
+ 여러 개의 리포트 아이템(차트, 그래프 등)으로 구성됩니다.
12
+ """
13
+ id: Optional[str] = Field(None, description="리포트 고유 식별자")
14
+ dataset_id: Optional[str] = Field(None, alias="datasetId", description="이 리포트가 속한 데이터셋 ID")
15
+ title: Optional[str] = Field(None, description="리포트 제목")
16
+ description: Optional[str] = Field(None, description="리포트 설명")
17
+ meta: Optional[dict] = Field(None, description="추가 메타데이터 (JSONObject)")
18
+ created_at: Optional[str] = Field(None, alias="createdAt", description="생성일시 (ISO 8601)")
19
+ created_by: Optional[str] = Field(None, alias="createdBy", description="생성자")
20
+ updated_at: Optional[str] = Field(None, alias="updatedAt", description="수정일시 (ISO 8601)")
21
+ updated_by: Optional[str] = Field(None, alias="updatedBy", description="수정자")
22
+ items: Optional[List[AnalyticsReportItem]] = Field(None, description="리포트 아이템 목록")
@@ -0,0 +1,30 @@
1
+ from typing import Optional, Any
2
+ from enum import Enum
3
+ from spb_onprem.base_model import CustomBaseModel, Field
4
+ from spb_onprem.contents.entities.base_content import BaseContent
5
+
6
+
7
+ class AnalyticsReportItemType(str, Enum):
8
+ """분석 리포트 아이템 타입"""
9
+ PIE = "PIE"
10
+ HORIZONTAL_BAR = "HORIZONTAL_BAR"
11
+ VERTICAL_BAR = "VERTICAL_BAR"
12
+ HEATMAP = "HEATMAP"
13
+
14
+
15
+ class AnalyticsReportItem(CustomBaseModel):
16
+ """
17
+ 분석 리포트 아이템 엔터티
18
+
19
+ 리포트 내의 개별 차트나 시각화 아이템을 나타냅니다.
20
+ """
21
+ id: Optional[str] = Field(None, description="리포트 아이템 고유 식별자")
22
+ type: Optional[AnalyticsReportItemType] = Field(None, description="리포트 아이템 타입 (PIE, BAR, HEATMAP 등)")
23
+ title: Optional[str] = Field(None, description="리포트 아이템 제목")
24
+ description: Optional[str] = Field(None, description="리포트 아이템 설명")
25
+ content: Optional[BaseContent] = Field(None, description="리포트 아이템 컨텐츠")
26
+ meta: Optional[Any] = Field(None, description="추가 메타데이터 (JSONObject)")
27
+ created_at: Optional[str] = Field(None, alias="createdAt", description="생성일시 (ISO 8601)")
28
+ created_by: Optional[str] = Field(None, alias="createdBy", description="생성자")
29
+ updated_at: Optional[str] = Field(None, alias="updatedAt", description="수정일시 (ISO 8601)")
30
+ updated_by: Optional[str] = Field(None, alias="updatedBy", description="수정자")
@@ -0,0 +1,14 @@
1
+ from typing import Optional, List
2
+ from spb_onprem.base_model import CustomBaseModel, Field
3
+ from .analytics_report import AnalyticsReport
4
+
5
+
6
+ class AnalyticsReportPageInfo(CustomBaseModel):
7
+ """
8
+ 분석 리포트 페이지 정보 엔터티
9
+
10
+ 분석 리포트 목록 조회 시 페이지네이션 정보를 포함합니다.
11
+ """
12
+ analytics_reports: Optional[List[AnalyticsReport]] = Field(None, alias="analyticsReports", description="쿼리와 일치하는 리포트 목록")
13
+ next: Optional[str] = Field(None, description="페이지네이션에 사용할 커서")
14
+ total_count: Optional[int] = Field(None, alias="totalCount", description="쿼리와 일치하는 리포트의 총 개수")
@@ -0,0 +1,29 @@
1
+ from .analytics_report import analytics_report_params
2
+ from .analytics_reports import (
3
+ analytics_reports_params,
4
+ AnalyticsReportsFilter,
5
+ AnalyticsReportsFilterOptions,
6
+ AnalyticsReportsOrderBy,
7
+ AnalyticsReportListOrderFields,
8
+ )
9
+ from .create_analytics_report import create_analytics_report_params
10
+ from .update_analytics_report import update_analytics_report_params
11
+ from .delete_analytics_report import delete_analytics_report_params
12
+ from .create_analytics_report_item import create_analytics_report_item_params
13
+ from .update_analytics_report_item import update_analytics_report_item_params
14
+ from .delete_analytics_report_item import delete_analytics_report_item_params
15
+
16
+ __all__ = (
17
+ "analytics_report_params",
18
+ "analytics_reports_params",
19
+ "create_analytics_report_params",
20
+ "update_analytics_report_params",
21
+ "delete_analytics_report_params",
22
+ "create_analytics_report_item_params",
23
+ "update_analytics_report_item_params",
24
+ "delete_analytics_report_item_params",
25
+ "AnalyticsReportsFilter",
26
+ "AnalyticsReportsFilterOptions",
27
+ "AnalyticsReportsOrderBy",
28
+ "AnalyticsReportListOrderFields",
29
+ )
@@ -0,0 +1,17 @@
1
+ def analytics_report_params(
2
+ report_id: str,
3
+ dataset_id: str,
4
+ ):
5
+ """Get parameters for retrieving a single analytics report.
6
+
7
+ Args:
8
+ report_id: The report ID
9
+ dataset_id: The dataset ID
10
+
11
+ Returns:
12
+ dict: Parameters for retrieving an analytics report
13
+ """
14
+ return {
15
+ "reportId": report_id,
16
+ "datasetId": dataset_id,
17
+ }
@@ -0,0 +1,87 @@
1
+ from typing import Optional, Union
2
+ from enum import Enum
3
+
4
+ from spb_onprem.base_model import CustomBaseModel, Field
5
+ from spb_onprem.base_types import Undefined, UndefinedType
6
+
7
+
8
+ class AnalyticsReportListOrderFields(str, Enum):
9
+ """분석 리포트 정렬 필드"""
10
+ UPDATED_AT = "updatedAt"
11
+ CREATED_AT = "createdAt"
12
+ TITLE = "title"
13
+
14
+
15
+ class AnalyticsReportsFilterOptions(CustomBaseModel):
16
+ """Options for filtering analytics reports.
17
+
18
+ Attributes:
19
+ title_contains: Filter reports by title containing this string
20
+ """
21
+ title_contains: Optional[str] = Field(None, alias="titleContains")
22
+
23
+
24
+ class AnalyticsReportsFilter(CustomBaseModel):
25
+ """Filter criteria for analytics report queries.
26
+
27
+ Attributes:
28
+ must_filter: Conditions that must be met
29
+ not_filter: Conditions that must not be met
30
+ """
31
+ must_filter: Optional[AnalyticsReportsFilterOptions] = Field(None, alias="must")
32
+ not_filter: Optional[AnalyticsReportsFilterOptions] = Field(None, alias="not")
33
+
34
+
35
+ class AnalyticsReportsOrderBy(CustomBaseModel):
36
+ """Order by options for analytics reports.
37
+
38
+ Attributes:
39
+ field: The field to order by
40
+ direction: The direction to order (ASC or DESC)
41
+ """
42
+ field: Optional[AnalyticsReportListOrderFields] = Field(None, description="정렬 필드")
43
+ direction: Optional[str] = Field(None, description="정렬 방향 (ASC or DESC)")
44
+
45
+
46
+ def analytics_reports_params(
47
+ dataset_id: str,
48
+ analytics_reports_filter: Union[
49
+ AnalyticsReportsFilter,
50
+ UndefinedType
51
+ ] = Undefined,
52
+ cursor: Optional[str] = None,
53
+ length: Optional[int] = 10,
54
+ order_by: Union[
55
+ AnalyticsReportsOrderBy,
56
+ UndefinedType
57
+ ] = Undefined,
58
+ ):
59
+ """Get parameters for listing analytics reports.
60
+
61
+ Args:
62
+ dataset_id: Required dataset ID
63
+ analytics_reports_filter: Optional filter criteria for reports
64
+ cursor: Optional cursor for pagination
65
+ length: Optional number of items per page (default: 10)
66
+ order_by: Optional order by options
67
+
68
+ Returns:
69
+ dict: Parameters for listing analytics reports
70
+ """
71
+ params = {
72
+ "datasetId": dataset_id,
73
+ "cursor": cursor,
74
+ "length": length,
75
+ }
76
+
77
+ if analytics_reports_filter and not isinstance(analytics_reports_filter, UndefinedType):
78
+ params["filter"] = analytics_reports_filter.model_dump(
79
+ by_alias=True, exclude_unset=True
80
+ )
81
+
82
+ if order_by and not isinstance(order_by, UndefinedType):
83
+ params["orderBy"] = order_by.model_dump(
84
+ by_alias=True, exclude_unset=True
85
+ )
86
+
87
+ return params
@@ -0,0 +1,35 @@
1
+ from typing import Union, Any
2
+ from spb_onprem.base_types import Undefined, UndefinedType
3
+
4
+
5
+ def create_analytics_report_params(
6
+ dataset_id: str,
7
+ title: Union[str, UndefinedType] = Undefined,
8
+ description: Union[str, UndefinedType] = Undefined,
9
+ meta: Union[Any, UndefinedType] = Undefined,
10
+ ):
11
+ """Get parameters for creating an analytics report.
12
+
13
+ Args:
14
+ dataset_id: The dataset ID
15
+ title: Optional report title
16
+ description: Optional report description
17
+ meta: Optional metadata
18
+
19
+ Returns:
20
+ dict: Parameters for creating an analytics report
21
+ """
22
+ params = {
23
+ "datasetId": dataset_id,
24
+ }
25
+
26
+ if not isinstance(title, UndefinedType):
27
+ params["title"] = title
28
+
29
+ if not isinstance(description, UndefinedType):
30
+ params["description"] = description
31
+
32
+ if not isinstance(meta, UndefinedType):
33
+ params["meta"] = meta
34
+
35
+ return params
@@ -0,0 +1,47 @@
1
+ from typing import Union, Any
2
+ from spb_onprem.base_types import Undefined, UndefinedType
3
+ from spb_onprem.reports.entities.analytics_report_item import AnalyticsReportItemType
4
+
5
+
6
+ def create_analytics_report_item_params(
7
+ dataset_id: str,
8
+ report_id: str,
9
+ type: AnalyticsReportItemType,
10
+ title: Union[str, UndefinedType] = Undefined,
11
+ description: Union[str, UndefinedType] = Undefined,
12
+ content_id: Union[str, UndefinedType] = Undefined,
13
+ meta: Union[Any, UndefinedType] = Undefined,
14
+ ):
15
+ """Get parameters for creating an analytics report item.
16
+
17
+ Args:
18
+ dataset_id: The dataset ID
19
+ report_id: The report ID
20
+ type: The type of report item (PIE, HORIZONTAL_BAR, etc.)
21
+ title: Optional item title
22
+ description: Optional item description
23
+ content_id: Optional content ID
24
+ meta: Optional metadata
25
+
26
+ Returns:
27
+ dict: Parameters for creating an analytics report item
28
+ """
29
+ params = {
30
+ "datasetId": dataset_id,
31
+ "reportId": report_id,
32
+ "type": type.value if isinstance(type, AnalyticsReportItemType) else type,
33
+ }
34
+
35
+ if not isinstance(title, UndefinedType):
36
+ params["title"] = title
37
+
38
+ if not isinstance(description, UndefinedType):
39
+ params["description"] = description
40
+
41
+ if not isinstance(content_id, UndefinedType):
42
+ params["contentId"] = content_id
43
+
44
+ if not isinstance(meta, UndefinedType):
45
+ params["meta"] = meta
46
+
47
+ return params
@@ -0,0 +1,17 @@
1
+ def delete_analytics_report_params(
2
+ report_id: str,
3
+ dataset_id: str,
4
+ ):
5
+ """Get parameters for deleting an analytics report.
6
+
7
+ Args:
8
+ report_id: The report ID
9
+ dataset_id: The dataset ID
10
+
11
+ Returns:
12
+ dict: Parameters for deleting an analytics report
13
+ """
14
+ return {
15
+ "reportId": report_id,
16
+ "datasetId": dataset_id,
17
+ }