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.
- spb_onprem/__init__.py +39 -9
- spb_onprem/_version.py +2 -2
- spb_onprem/data/entities/__init__.py +2 -0
- spb_onprem/data/entities/data.py +2 -0
- spb_onprem/data/entities/data_annotation_stats.py +8 -0
- spb_onprem/data/params/data_list.py +7 -2
- spb_onprem/data/params/update_data.py +11 -0
- spb_onprem/data/params/update_data_slice.py +14 -2
- spb_onprem/data/queries.py +12 -1
- spb_onprem/data/service.py +9 -0
- spb_onprem/entities.py +24 -6
- spb_onprem/models/__init__.py +8 -3
- spb_onprem/models/entities/__init__.py +9 -0
- spb_onprem/models/entities/model.py +32 -0
- spb_onprem/models/entities/model_page_info.py +14 -0
- spb_onprem/models/entities/model_train_class.py +15 -0
- spb_onprem/models/params/__init__.py +16 -4
- spb_onprem/models/params/create_model.py +70 -0
- spb_onprem/models/params/delete_model.py +11 -8
- spb_onprem/models/params/model.py +17 -0
- spb_onprem/models/params/models.py +60 -0
- spb_onprem/models/params/pin_model.py +17 -0
- spb_onprem/models/params/unpin_model.py +17 -0
- spb_onprem/models/params/update_model.py +61 -0
- spb_onprem/models/queries.py +224 -19
- spb_onprem/models/service.py +251 -30
- spb_onprem/reports/__init__.py +25 -0
- spb_onprem/reports/entities/__init__.py +10 -0
- spb_onprem/reports/entities/analytics_report.py +22 -0
- spb_onprem/reports/entities/analytics_report_item.py +30 -0
- spb_onprem/reports/entities/analytics_report_page_info.py +14 -0
- spb_onprem/reports/params/__init__.py +29 -0
- spb_onprem/reports/params/analytics_report.py +17 -0
- spb_onprem/reports/params/analytics_reports.py +87 -0
- spb_onprem/reports/params/create_analytics_report.py +35 -0
- spb_onprem/reports/params/create_analytics_report_item.py +47 -0
- spb_onprem/reports/params/delete_analytics_report.py +17 -0
- spb_onprem/reports/params/delete_analytics_report_item.py +20 -0
- spb_onprem/reports/params/update_analytics_report.py +38 -0
- spb_onprem/reports/params/update_analytics_report_item.py +46 -0
- spb_onprem/reports/queries.py +239 -0
- spb_onprem/reports/service.py +328 -0
- spb_onprem/searches.py +18 -0
- {superb_ai_onprem-0.9.0.dist-info → superb_ai_onprem-0.10.0.dist-info}/METADATA +53 -9
- {superb_ai_onprem-0.9.0.dist-info → superb_ai_onprem-0.10.0.dist-info}/RECORD +48 -38
- spb_onprem/models/entities.py +0 -9
- spb_onprem/models/params/get_models.py +0 -29
- spb_onprem/predictions/__init__.py +0 -7
- spb_onprem/predictions/entities.py +0 -11
- spb_onprem/predictions/params/__init__.py +0 -15
- spb_onprem/predictions/params/create_prediction_set.py +0 -44
- spb_onprem/predictions/params/delete_prediction_from_data.py +0 -20
- spb_onprem/predictions/params/delete_prediction_set.py +0 -14
- spb_onprem/predictions/params/get_prediction_set.py +0 -14
- spb_onprem/predictions/params/get_prediction_sets.py +0 -29
- spb_onprem/predictions/params/update_prediction_set_data_info.py +0 -28
- spb_onprem/predictions/queries.py +0 -110
- spb_onprem/predictions/service.py +0 -225
- tests/models/__init__.py +0 -1
- tests/models/test_model_service.py +0 -249
- tests/predictions/__init__.py +0 -1
- tests/predictions/test_prediction_service.py +0 -359
- {superb_ai_onprem-0.9.0.dist-info → superb_ai_onprem-0.10.0.dist-info}/WHEEL +0 -0
- {superb_ai_onprem-0.9.0.dist-info → superb_ai_onprem-0.10.0.dist-info}/licenses/LICENSE +0 -0
- {superb_ai_onprem-0.9.0.dist-info → superb_ai_onprem-0.10.0.dist-info}/top_level.txt +0 -0
spb_onprem/models/service.py
CHANGED
|
@@ -1,68 +1,289 @@
|
|
|
1
|
-
from typing import Optional,
|
|
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
|
-
"""
|
|
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
|
-
|
|
17
|
-
cursor:
|
|
18
|
-
length: int =
|
|
19
|
-
)
|
|
20
|
-
"""
|
|
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
|
-
|
|
25
|
-
cursor (
|
|
26
|
-
length (int): Number of items
|
|
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
|
-
|
|
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.
|
|
36
|
-
Queries.
|
|
44
|
+
Queries.MODELS,
|
|
45
|
+
Queries.MODELS["variables"](
|
|
37
46
|
dataset_id=dataset_id,
|
|
38
|
-
|
|
47
|
+
models_filter=models_filter,
|
|
39
48
|
cursor=cursor,
|
|
40
49
|
length=length
|
|
41
50
|
)
|
|
42
51
|
)
|
|
43
|
-
|
|
52
|
+
|
|
53
|
+
page_info = ModelPageInfo.model_validate(response)
|
|
44
54
|
return (
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
|
275
|
+
"""Delete a model.
|
|
56
276
|
|
|
57
277
|
Args:
|
|
58
|
-
dataset_id (str): The dataset ID
|
|
59
|
-
model_id (str): The model
|
|
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
|
+
}
|