wizata-dsapi 2.1.0.dev4__tar.gz → 2.1.0.dev6__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 (66) hide show
  1. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/PKG-INFO +1 -1
  2. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/pipeline.py +4 -4
  3. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/scripts/common.py +21 -5
  4. wizata_dsapi-2.1.0.dev6/wizata_dsapi/version.py +1 -0
  5. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi.egg-info/PKG-INFO +1 -1
  6. wizata_dsapi-2.1.0.dev4/wizata_dsapi/version.py +0 -1
  7. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/LICENSE.txt +0 -0
  8. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/README.rst +0 -0
  9. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/setup.cfg +0 -0
  10. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/setup.py +0 -0
  11. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/__init__.py +0 -0
  12. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/api_config.py +0 -0
  13. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/api_dto.py +0 -0
  14. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/api_interface.py +0 -0
  15. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/bucket.py +0 -0
  16. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/business_label.py +0 -0
  17. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/context.py +0 -0
  18. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/dashboard.py +0 -0
  19. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/dataframe_toolkit.py +0 -0
  20. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/datapoint.py +0 -0
  21. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/datastore.py +0 -0
  22. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/ds_dataframe.py +0 -0
  23. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/dsapi_json_encoder.py +0 -0
  24. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/edge_config.py +0 -0
  25. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/edge_device.py +0 -0
  26. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/edge_module.py +0 -0
  27. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/evaluation.py +0 -0
  28. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/execution.py +0 -0
  29. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/execution_log.py +0 -0
  30. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/experiment.py +0 -0
  31. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/graylog_log.py +0 -0
  32. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/group_system.py +0 -0
  33. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/ilogger.py +0 -0
  34. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/insight.py +0 -0
  35. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/mlmodel.py +0 -0
  36. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/mobile_asset.py +0 -0
  37. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/model_toolkit.py +0 -0
  38. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/models/__init__.py +0 -0
  39. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/models/common.py +0 -0
  40. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/notification.py +0 -0
  41. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/paged_query_result.py +0 -0
  42. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/pipeline_image.py +0 -0
  43. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/plot.py +0 -0
  44. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/plots/__init__.py +0 -0
  45. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/plots/common.py +0 -0
  46. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/plots/theme.py +0 -0
  47. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/request.py +0 -0
  48. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/script.py +0 -0
  49. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/scripts/__init__.py +0 -0
  50. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/search.py +0 -0
  51. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/solution_component.py +0 -0
  52. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/streamlit_utils.py +0 -0
  53. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/template.py +0 -0
  54. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/template_config.py +0 -0
  55. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/trigger.py +0 -0
  56. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/twin.py +0 -0
  57. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/twinregistration.py +0 -0
  58. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/user.py +0 -0
  59. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/wizard_function.py +0 -0
  60. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/wizard_request.py +0 -0
  61. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/wizata_dsapi_client.py +0 -0
  62. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi/words.py +0 -0
  63. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi.egg-info/SOURCES.txt +0 -0
  64. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi.egg-info/dependency_links.txt +0 -0
  65. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi.egg-info/requires.txt +0 -0
  66. {wizata_dsapi-2.1.0.dev4 → wizata_dsapi-2.1.0.dev6}/wizata_dsapi.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wizata_dsapi
3
- Version: 2.1.0.dev4
3
+ Version: 2.1.0.dev6
4
4
  Summary: Wizata Data Science Toolkit
5
5
  Author: Wizata S.A.
6
6
  Author-email: info@wizata.com
@@ -127,9 +127,9 @@ class AlertConfig:
127
127
  Two modes:
128
128
 
129
129
  **Declarative** (``mode="declarative"``):
130
- The step evaluates ``condition`` against the first row of the input
131
- dataframe. If met, ``title`` and ``message`` are resolved (``{col}``
132
- placeholders) and the notification fires.
130
+ The step evaluates ``condition`` against the last row of the input
131
+ dataframe (most recent value). If met, ``title`` and ``message`` are
132
+ resolved (``{col}`` placeholders) and the notification fires.
133
133
 
134
134
  **Script** (``mode="script"``):
135
135
  The step delegates to an existing pipeline script via ``script_name``.
@@ -144,7 +144,7 @@ class AlertConfig:
144
144
  :ivar int activation_threshold: occurrences before first push fires.
145
145
  :ivar str title: notification title (declarative only, supports ``{col}``).
146
146
  :ivar str message: notification body (declarative only, supports ``{col}``).
147
- :ivar dict condition: filter evaluated on first row (declarative only).
147
+ :ivar dict condition: filter evaluated on last row (declarative only).
148
148
  :ivar int severity: 1–7 (declarative only).
149
149
  :ivar str script_name: reference to existing script (script mode only).
150
150
  """
@@ -323,10 +323,24 @@ def formula(context: wizata_dsapi.Context):
323
323
  expression = context.properties["expression"]
324
324
  result = context.properties.get("result", "result")
325
325
 
326
- # Whitelist validation: strip everything we allow, flag any leftover token.
327
- sanitized = expression
328
- for col in sorted(df.columns, key=len, reverse=True):
329
- sanitized = sanitized.replace(f"`{col}`", "").replace(col, "")
326
+ # Replace every column name (backticked or bare) with a safe placeholder
327
+ # identifier before evaluation. Column names can contain characters that
328
+ # are illegal in a Python/pandas eval expression — e.g. tag IDs like
329
+ # 'DE_AL_Ark1_1:04800F1?Value', whose numeric segment '04800' is otherwise
330
+ # parsed as a leading-zero integer literal and raises a SyntaxError
331
+ # (DEV-5912). Substituting the whole name atomically sidesteps this.
332
+ placeholders = {} # placeholder -> real column name
333
+ substituted = expression
334
+ for i, col in enumerate(sorted(df.columns, key=len, reverse=True)):
335
+ placeholder = f"__wz_col_{i}__"
336
+ substituted = substituted.replace(f"`{col}`", placeholder).replace(col, placeholder)
337
+ placeholders[placeholder] = col
338
+
339
+ # Whitelist validation: strip placeholders + allowed functions, flag any
340
+ # leftover token as disallowed.
341
+ sanitized = substituted
342
+ for placeholder in placeholders:
343
+ sanitized = sanitized.replace(placeholder, "")
330
344
  for fn in _FORMULA_SAFE_FUNCTIONS:
331
345
  sanitized = sanitized.replace(fn, "")
332
346
  sanitized = re.sub(r"[\d\.\+\-\*/\%\(\)\s,\^]", "", sanitized)
@@ -337,7 +351,9 @@ def formula(context: wizata_dsapi.Context):
337
351
  f"{list(_FORMULA_SAFE_FUNCTIONS.keys())}"
338
352
  )
339
353
 
340
- df[result] = df.eval(expression, local_dict=_FORMULA_SAFE_FUNCTIONS, engine="python")
354
+ # Evaluate against a frame whose columns are the safe placeholder names.
355
+ safe_df = df.rename(columns={real: ph for ph, real in placeholders.items()})
356
+ df[result] = safe_df.eval(substituted, local_dict=_FORMULA_SAFE_FUNCTIONS, engine="python")
341
357
  return df
342
358
 
343
359
 
@@ -0,0 +1 @@
1
+ __version__ = "2.1.0.dev6"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wizata_dsapi
3
- Version: 2.1.0.dev4
3
+ Version: 2.1.0.dev6
4
4
  Summary: Wizata Data Science Toolkit
5
5
  Author: Wizata S.A.
6
6
  Author-email: info@wizata.com
@@ -1 +0,0 @@
1
- __version__ = "2.1.0.dev4"