wizata-dsapi 1.4.0.dev10__py3-none-any.whl → 1.4.0.dev15__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.
wizata_dsapi/__init__.py CHANGED
@@ -48,3 +48,5 @@ from .evaluation import Evaluation
48
48
  # Streamlit utils
49
49
  from .streamlit_utils import (get_streamlit_token, get_streamlit_domain, get_streamlit_from, get_streamlit_to,
50
50
  get_streamlit_twin_id)
51
+
52
+ from .search import FilterOperator, SearchQuery, SortOption
@@ -1,4 +1,5 @@
1
1
  from .api_dto import Dto
2
+ from .plot import Plot
2
3
  from .experiment import Experiment
3
4
  from .pipeline import Pipeline
4
5
  from .twin import Twin
@@ -49,6 +50,12 @@ class ExecutionLog(Dto):
49
50
  if isinstance(properties, str):
50
51
  properties = json.loads(properties)
51
52
 
53
+ plots = data.get("plots")
54
+ _plots = []
55
+ if isinstance(plots, list):
56
+ for plot in plots:
57
+ _plots.append(Plot.from_dict(plot))
58
+
52
59
  return cls(
53
60
  execution_id=uuid.UUID(data["id"]) if "id" in data and not isinstance(data["id"], int) else None,
54
61
  experiment=data.get("experiment"),
@@ -64,7 +71,8 @@ class ExecutionLog(Dto):
64
71
  execution_time=int(data.get("executionTime")) if "executionTime" in data and data["executionTime"] is not None else None,
65
72
  trigger_id=uuid.UUID(data["executionTriggerId"]) if "executionTriggerId" in data and data["executionTriggerId"] is not None else None,
66
73
  version=data.get("version"),
67
- properties=properties
74
+ properties=properties,
75
+ plots=_plots
68
76
  )
69
77
 
70
78
  def __init__(self,
@@ -83,7 +91,8 @@ class ExecutionLog(Dto):
83
91
  execution_time: int = None,
84
92
  trigger_id: uuid.UUID = None,
85
93
  version: str = None,
86
- properties: dict = None):
94
+ properties: dict = None,
95
+ plots: list = None):
87
96
 
88
97
  # labels
89
98
  self._experiment = None
@@ -132,7 +141,10 @@ class ExecutionLog(Dto):
132
141
  properties = {}
133
142
  self.properties = properties
134
143
  self.models = []
135
- self.plots = []
144
+ if plots is not None:
145
+ self.plots = plots
146
+ else:
147
+ self.plots = []
136
148
  self.dataframes = []
137
149
  self.messages = []
138
150
 
@@ -393,7 +405,7 @@ class ExecutionLog(Dto):
393
405
  "template": self.get_template_key(),
394
406
  "twin": self.get_twin_key(),
395
407
  "edgeDeviceId": self.edge_device_id,
396
- "status": self.status.value if self.status else None
408
+ "status": self.status.value if hasattr(self.status, 'value') else self.status
397
409
  }
398
410
  return {k: v for k, v in labels.items() if v is not None}
399
411
 
@@ -409,6 +421,10 @@ class ExecutionLog(Dto):
409
421
  "version": self.version,
410
422
  "messages": self.messages or None
411
423
  }
424
+ if self.plots is not None and len(self.plots) > 0:
425
+ data["plots"] = []
426
+ for plot in self.plots:
427
+ data["plots"].append(plot.to_json(target="logs"))
412
428
  return {k: v for k, v in data.items() if v is not None}
413
429
 
414
430
  def to_dict(self) -> dict:
@@ -29,3 +29,31 @@ class PagedQueryResult:
29
29
  if direction != 'asc' and direction != 'desc':
30
30
  raise ValueError("direction must be asc or desc")
31
31
  self.results = None
32
+
33
+ def to_json(self):
34
+ """
35
+ format the results
36
+ """
37
+
38
+ if self.direction == "asc":
39
+ sort_dir = "asc"
40
+ else:
41
+ sort_dir = "desc"
42
+
43
+ formatted_results = []
44
+ if self.results:
45
+ for obj in self.results:
46
+ if hasattr(obj, 'to_json'):
47
+ formatted_results.append(obj.to_json())
48
+ elif hasattr(obj, 'to_dict'):
49
+ formatted_results.append(obj.to_dict())
50
+ else:
51
+ formatted_results.append(obj)
52
+ return {
53
+ "page": self.page,
54
+ "size": self.size,
55
+ "sort": self.sort,
56
+ "direction": sort_dir,
57
+ "total": self.total,
58
+ "results": formatted_results
59
+ }
wizata_dsapi/plot.py CHANGED
@@ -6,7 +6,6 @@ class Plot(ApiDto):
6
6
  """
7
7
  A plot is a definition of a Plotly figure that can be stored and shared on Wizata.
8
8
  :ivar plot_id: The UUID of the plot.
9
- :ivar generatedById: The UUID of the Execution from which the plot was created.
10
9
  :ivar name: A simple name helping the user identifying the plot.
11
10
  :ivar figure: Plotly figure defining the plot itself.
12
11
  """
@@ -21,14 +20,12 @@ class Plot(ApiDto):
21
20
  obj.from_json(data)
22
21
  return obj
23
22
 
24
- def __init__(self, plot_id=None, name=None, generated_by_id=None, figure=None):
23
+ def __init__(self, plot_id=None, name=None, figure=None):
25
24
  if plot_id is None:
26
25
  self.plot_id = uuid.uuid4()
27
26
  else:
28
27
  self.plot_id = plot_id
29
28
  self.name = name
30
- self.generatedById = generated_by_id # Execution
31
- # Step Id
32
29
  self.figure = figure
33
30
 
34
31
  def api_id(self) -> str:
@@ -56,8 +53,6 @@ class Plot(ApiDto):
56
53
  self.name = obj["name"]
57
54
  if "figure" in obj.keys():
58
55
  self.figure = obj["figure"]
59
- if "generatedById" in obj.keys():
60
- self.generatedById = uuid.UUID(obj["generatedById"])
61
56
 
62
57
  def to_json(self, target: str = None):
63
58
  """
@@ -69,11 +64,7 @@ class Plot(ApiDto):
69
64
  }
70
65
  if self.name is not None:
71
66
  obj["name"] = self.name
72
- if target is None or target != 'backend-create':
67
+ if target is None or target != 'logs':
73
68
  if self.figure is not None:
74
69
  obj["figure"] = self.figure
75
- if self.generatedById is not None:
76
- #TODO: add generateById as UUID or find another way to store plots
77
- #obj["generatedById"] = str(self.generatedById)
78
- pass
79
70
  return obj
wizata_dsapi/search.py ADDED
@@ -0,0 +1,61 @@
1
+ from dataclasses import dataclass, field
2
+ from typing import Dict, List, Any, Optional
3
+
4
+
5
+ class FilterOperator:
6
+ """
7
+ Constants for standard filtering operators.
8
+ """
9
+ EQ = "eq"
10
+ NE = "ne"
11
+ GT = "gt"
12
+ GTE = "gte"
13
+ LT = "lt"
14
+ LTE = "lte"
15
+ IN = "in"
16
+ CONTAINS = "contains"
17
+ SEARCH = "_search"
18
+
19
+
20
+ class SortOption:
21
+ def __init__(self, field: str, order: str = "asc"):
22
+ self.field = field
23
+ self.order = order
24
+
25
+
26
+ class SearchQuery:
27
+ """
28
+ Generic class to represent JSON request structure.
29
+ """
30
+ @classmethod
31
+ def from_dict(cls, data: dict):
32
+ """
33
+ Helper to convert dictionary coming from endpoint to SearchQuery object.
34
+ """
35
+ raw_sort = data.get("sort", [])
36
+ sort_objs = []
37
+ for s in raw_sort:
38
+ sort_objs.append(SortOption(field=s["field"], order=s.get("order", "asc")))
39
+
40
+ svc_name = data.get("serviceName") or data.get("service_name") or "pipeline_runner"
41
+ return cls(
42
+ filters=data.get("filters", {}),
43
+ sort=sort_objs,
44
+ limit=data.get("limit", 50),
45
+ offset=data.get("offset", 0),
46
+ service_name=svc_name
47
+ )
48
+
49
+ def __init__(self,
50
+ filters: Optional[Dict[str, Any]] = None,
51
+ sort: Optional[List[SortOption]] = None,
52
+ limit: int = 50,
53
+ offset: int = 0,
54
+ service_name: str = "pipeline_runner"):
55
+
56
+ self.filters = filters if filters is not None else {}
57
+ self.sort = sort if sort is not None else []
58
+ self.limit = limit
59
+ self.offset = offset
60
+ self.service_name = service_name
61
+
wizata_dsapi/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "1.4.0.dev10"
1
+ __version__ = "1.4.0.dev15"
@@ -1053,7 +1053,7 @@ class WizataDSAPIClient(ApiInterface, ApiDtoInterface):
1053
1053
  else:
1054
1054
  raise self.__raise_error(response)
1055
1055
 
1056
- def plot(self, plot_id: str = None, plot: Plot = None, figure=None,):
1056
+ def plot(self, plot_id: str = None, plot: Plot = None, figure=None):
1057
1057
  """
1058
1058
  Fetch and show plot.
1059
1059
  :param plot: Wizata Plot Object
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wizata_dsapi
3
- Version: 1.4.0.dev10
3
+ Version: 1.4.0.dev15
4
4
  Summary: Wizata Data Science Toolkit
5
5
  Author: Wizata S.A.
6
6
  Author-email: info@wizata.com
@@ -1,4 +1,4 @@
1
- wizata_dsapi/__init__.py,sha256=Fd4XEOX8Bon-_yQd4pXtqt2WyR7HgQFugMr35F4T1UA,2128
1
+ wizata_dsapi/__init__.py,sha256=sC_WXq9qi3PRds7hg4RiUnHsxaOMABjghzbPVLBy_GU,2188
2
2
  wizata_dsapi/api_config.py,sha256=lrjUOKnGBYgjSqvXdTf4gEcf-luTSV6DPdo3AbmIExU,5404
3
3
  wizata_dsapi/api_dto.py,sha256=mguQMqsshL4uNFt_RlZTD5zeKDBpFpa2nJP91ZtqaoA,2700
4
4
  wizata_dsapi/api_interface.py,sha256=ju3Wz1e2uOS1_SrSihc0AECkWLRNNGHMhpMhV2L6tjo,13315
@@ -12,30 +12,31 @@ wizata_dsapi/ds_dataframe.py,sha256=Sk2JRUuTRJzko3HosJnbK34STpgSJUlqxLq8w_E5VM4,
12
12
  wizata_dsapi/dsapi_json_encoder.py,sha256=_NJE2IncJCS-juOxV_IQWHq8WpaanKe2aWpGNZNUzyk,2062
13
13
  wizata_dsapi/evaluation.py,sha256=kB61SD66uRBBbKqiES7XZERn77bwhacbyufneSD4s8c,2222
14
14
  wizata_dsapi/execution.py,sha256=JuU8qZDcUZxtCvQwwvM_luwHi18GQ2jbBSxAjc2cSlM,14148
15
- wizata_dsapi/execution_log.py,sha256=ervc6DeZ_9Xwlasi209Hka4F8Rhw30AqWAfOjr0uETw,14630
15
+ wizata_dsapi/execution_log.py,sha256=Rx0J47xrnmQu6pNhYloJgTKc8IWH62GnU5lxYup9W1o,15186
16
16
  wizata_dsapi/experiment.py,sha256=QYQ1CJ-MTWsXq08xYbm5sAp95dRxbPOmGDgaAOoBMDQ,4631
17
17
  wizata_dsapi/group_system.py,sha256=6rUKe0_J3YWACysyBlzuw_TEpKNXgLOMxhpWsNxOzwY,1708
18
18
  wizata_dsapi/ilogger.py,sha256=YKBTRp7pHYtBlnzroGRPT91_bMVJT93Pft3fUGcFSIM,488
19
19
  wizata_dsapi/insight.py,sha256=ABFZ04DqYxxzqAEfU1tzlTZqqrigM-zN-8Lbetko3g0,6468
20
20
  wizata_dsapi/mlmodel.py,sha256=QkWBNordOQiw6Vv4xN_pxwJWqbBm29vY1dyDZgmMS_4,26324
21
21
  wizata_dsapi/model_toolkit.py,sha256=UNyw5CFSgZeXydQFsiDIRTjoMeqIsdyIIuiwumLW5bA,1574
22
- wizata_dsapi/paged_query_result.py,sha256=0Iyt2Kd4tvrfthhT-tk9EmSERsbJTaPNON2euHcBn6k,1150
22
+ wizata_dsapi/paged_query_result.py,sha256=QU0JukkBk7wwfE43wOcj4so2aYpGj5r5_XobLfm8CnE,1939
23
23
  wizata_dsapi/pipeline.py,sha256=gqZ6R8d8f_uz9xI3Umz2uN3yTD4N3jsBPltAIg--Bjk,31646
24
24
  wizata_dsapi/pipeline_deployment.py,sha256=grekBaxUK0EhL9w7lDB8vNuW_wzLnHVm9Mq8Lkbkguk,1722
25
25
  wizata_dsapi/pipeline_image.py,sha256=4DhDo1SYftN6QcNbehNbM86VTD6EYGmtlcOmE5DP5Vc,6330
26
- wizata_dsapi/plot.py,sha256=JCpDoDa_yC_4z26rueCLqaLXksGgILzTxLqlX9oEUaI,2468
26
+ wizata_dsapi/plot.py,sha256=-gV6rZJQDhGH4CV9BgefjeJWI--X5HDBOjseEzHr3Gc,1971
27
27
  wizata_dsapi/request.py,sha256=W4E1BHacQdJiBLPI96yVeHz41rbfFuGrbuw1U60L_DM,27560
28
28
  wizata_dsapi/script.py,sha256=DeEciwVpuCYZetgJCoivw_bYe8ma52WuTaTQ_VkLEcg,12930
29
+ wizata_dsapi/search.py,sha256=eJc5Y9_FT14qFzChAlkMSWFrXD5x0WhewQQnrmBR3Yo,1676
29
30
  wizata_dsapi/solution_component.py,sha256=8gbZWx2h_xUqI_pAXa3goqAnR5Y-GDMii8MeGlaK1IE,9531
30
31
  wizata_dsapi/streamlit_utils.py,sha256=sXBdygktbixV828Zg01Nl27_a4F8zGFc4RY0C8g-1bc,1942
31
32
  wizata_dsapi/template.py,sha256=wtCRKKk3PchH4RrNgNYlEF_9C6bzZwKIeLyEvgv6Fdo,13704
32
33
  wizata_dsapi/trigger.py,sha256=w3BZYP-L3SUwvaT0oCTanh_Ewn57peZvlt7vxzHv9J8,5129
33
34
  wizata_dsapi/twin.py,sha256=S0DUzQf1smZXZTdXpXZPtkZYCfKIhw53EecCnsl9i4Q,11017
34
35
  wizata_dsapi/twinregistration.py,sha256=Mi6-YuwroiEXc0c1hgrOaphh4hNVoHupxOnXedVtJtE,13377
35
- wizata_dsapi/version.py,sha256=n_6ag5kesSN1XgWNloRr6zBAFljZTg2DxL7XIIF-W8o,28
36
+ wizata_dsapi/version.py,sha256=Ejd1lotrE0HYfaP9QMejar4USFssB__7ymeFLYAa_Bo,28
36
37
  wizata_dsapi/wizard_function.py,sha256=RbM7W7Gf-6Rhp_1dU9DBYkHaciknGAGvuAndhAS_vyo,942
37
38
  wizata_dsapi/wizard_request.py,sha256=v6BaqKLKvTWmUSo0_gda9FabAQz5x_-GOH1Av50GzFo,3762
38
- wizata_dsapi/wizata_dsapi_client.py,sha256=o-YMZzEXTglrU3dPR0FDQ3CZeiKVruVfzMM4vIFPxJk,85057
39
+ wizata_dsapi/wizata_dsapi_client.py,sha256=pClIADBb_CfgT4P4Hz9mopgsuC0Wa_XiZBuej7x5JUM,85056
39
40
  wizata_dsapi/words.py,sha256=tV8CqzCqODZCV7PgBxBF5exBxeF_ya9t5DiUy-cg6Sg,1535
40
41
  wizata_dsapi/models/__init__.py,sha256=O5PHqw8lKILw4apO-MfDxPz73wK0vADD9y3xjuzX7Tw,104
41
42
  wizata_dsapi/models/common.py,sha256=1dTqE80-mFJnUwEdNlJdhJzfZ2N5Kp8Nb3LQ8uwPtLc,3808
@@ -43,8 +44,8 @@ wizata_dsapi/plots/__init__.py,sha256=qgnSFqrjOPur-807M8uh5awIfjM1ZHXUXcAqHc-r2l
43
44
  wizata_dsapi/plots/common.py,sha256=jdPsJqLHBwSKc6dX83BSGPqSRxzIVNHSYO5yI_8sjGk,6568
44
45
  wizata_dsapi/scripts/__init__.py,sha256=hAxiETSQf0qOHde1si1tEAJU48seqEgHrchCzS2-LvQ,80
45
46
  wizata_dsapi/scripts/common.py,sha256=efwq-Rd0lvYljIs3gSFz9izogBD7asOU2cTK-IvHTkM,4244
46
- wizata_dsapi-1.4.0.dev10.dist-info/licenses/LICENSE.txt,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
47
- wizata_dsapi-1.4.0.dev10.dist-info/METADATA,sha256=JzhGBKfFLmN0Znw_yCHfDCY6DGrpp88a45HPtYfUM9g,4960
48
- wizata_dsapi-1.4.0.dev10.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
49
- wizata_dsapi-1.4.0.dev10.dist-info/top_level.txt,sha256=-OeTJbEnh5DuWyTOHtvw0Dw3LRg3G27TNS6W4ZtfwPs,13
50
- wizata_dsapi-1.4.0.dev10.dist-info/RECORD,,
47
+ wizata_dsapi-1.4.0.dev15.dist-info/licenses/LICENSE.txt,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
48
+ wizata_dsapi-1.4.0.dev15.dist-info/METADATA,sha256=EawEuidClP8B_ckAFp139-IqfxCGxwAncd-c24QF9NY,4960
49
+ wizata_dsapi-1.4.0.dev15.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
50
+ wizata_dsapi-1.4.0.dev15.dist-info/top_level.txt,sha256=-OeTJbEnh5DuWyTOHtvw0Dw3LRg3G27TNS6W4ZtfwPs,13
51
+ wizata_dsapi-1.4.0.dev15.dist-info/RECORD,,