mlrun 1.7.0rc50__py3-none-any.whl → 1.7.0rc52__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 mlrun might be problematic. Click here for more details.

mlrun/execution.py CHANGED
@@ -927,17 +927,42 @@ class MLClientCtx:
927
927
  updates, self._uid, self.project, iter=self._iteration
928
928
  )
929
929
 
930
- def get_notifications(self):
931
- """Get the list of notifications"""
930
+ def get_notifications(self, unmask_secret_params=False):
931
+ """
932
+ Get the list of notifications
933
+
934
+ :param unmask_secret_params: Used as a workaround for sending notification from workflow-runner.
935
+ When used, if the notification will be saved again a new secret will be created.
936
+ """
932
937
 
933
938
  # Get the full notifications from the DB since the run context does not contain the params due to bloating
934
939
  run = self._rundb.read_run(
935
940
  self.uid, format_=mlrun.common.formatters.RunFormat.notifications
936
941
  )
937
- return [
938
- mlrun.model.Notification.from_dict(notification)
939
- for notification in run["spec"]["notifications"]
940
- ]
942
+
943
+ notifications = []
944
+ for notification in run["spec"]["notifications"]:
945
+ notification: mlrun.model.Notification = mlrun.model.Notification.from_dict(
946
+ notification
947
+ )
948
+ # Fill the secret params from the project secret. We cannot use the server side internal secret mechanism
949
+ # here as it is the client side.
950
+ # TODO: This is a workaround to allow the notification to get the secret params from project secret
951
+ # instead of getting them from the internal project secret that should be mounted.
952
+ # We should mount the internal project secret that was created to the workflow-runner
953
+ # and get the secret from there.
954
+ if unmask_secret_params:
955
+ try:
956
+ notification.enrich_unmasked_secret_params_from_project_secret()
957
+ notifications.append(notification)
958
+ except mlrun.errors.MLRunValueError:
959
+ logger.warning(
960
+ "Failed to fill secret params from project secret for notification."
961
+ "Skip this notification.",
962
+ notification=notification.name,
963
+ )
964
+
965
+ return notifications
941
966
 
942
967
  def to_dict(self):
943
968
  """Convert the run context to a dictionary"""
mlrun/model.py CHANGED
@@ -774,6 +774,23 @@ class Notification(ModelObj):
774
774
 
775
775
  notification_class.validate_params(secret_params | params)
776
776
 
777
+ def enrich_unmasked_secret_params_from_project_secret(self):
778
+ """
779
+ Fill the notification secret params from the project secret.
780
+ We are using this function instead of unmask_secret_params_from_project_secret when we run inside the
781
+ workflow runner pod that doesn't have access to the k8s secrets (but have access to the project secret)
782
+ """
783
+ secret = self.secret_params.get("secret")
784
+ if secret:
785
+ secret_value = mlrun.get_secret_or_env(secret)
786
+ if secret_value:
787
+ try:
788
+ self.secret_params = json.loads(secret_value)
789
+ except ValueError as exc:
790
+ raise mlrun.errors.MLRunValueError(
791
+ "Failed to parse secret value"
792
+ ) from exc
793
+
777
794
  @staticmethod
778
795
  def validate_notification_uniqueness(notifications: list["Notification"]):
779
796
  """Validate that all notifications in the list are unique by name"""
@@ -107,25 +107,26 @@ class TDEngineSchema:
107
107
  )
108
108
  return f"CREATE TABLE if NOT EXISTS {self.database}.{subtable} USING {self.super_table} TAGS ({tags});"
109
109
 
110
+ @staticmethod
110
111
  def _insert_subtable_stmt(
111
- self,
112
- connection: taosws.Connection,
112
+ statement: taosws.TaosStmt,
113
+ columns: dict[str, _TDEngineColumn],
113
114
  subtable: str,
114
115
  values: dict[str, Union[str, int, float, datetime.datetime]],
115
116
  ) -> taosws.TaosStmt:
116
- stmt = connection.statement()
117
- question_marks = ", ".join("?" * len(self.columns))
118
- stmt.prepare(f"INSERT INTO ? VALUES ({question_marks});")
119
- stmt.set_tbname(subtable)
117
+ question_marks = ", ".join("?" * len(columns))
118
+ statement.prepare(f"INSERT INTO ? VALUES ({question_marks});")
119
+ statement.set_tbname(subtable)
120
120
 
121
121
  bind_params = []
122
122
 
123
- for col_name, col_type in self.columns.items():
123
+ for col_name, col_type in columns.items():
124
124
  val = values[col_name]
125
125
  bind_params.append(values_to_column([val], col_type))
126
126
 
127
- stmt.bind_param(bind_params)
128
- return stmt
127
+ statement.bind_param(bind_params)
128
+ statement.add_batch()
129
+ return statement
129
130
 
130
131
  def _delete_subtable_query(
131
132
  self,
@@ -18,11 +18,16 @@ from typing import Union
18
18
 
19
19
  import pandas as pd
20
20
  import taosws
21
+ from taoswswrap.tdengine_connection import (
22
+ Statement,
23
+ TDEngineConnection,
24
+ )
21
25
 
22
26
  import mlrun.common.schemas.model_monitoring as mm_schemas
23
27
  import mlrun.model_monitoring.db.tsdb.tdengine.schemas as tdengine_schemas
24
28
  import mlrun.model_monitoring.db.tsdb.tdengine.stream_graph_steps
25
29
  from mlrun.model_monitoring.db import TSDBConnector
30
+ from mlrun.model_monitoring.db.tsdb.tdengine.schemas import TDEngineSchema
26
31
  from mlrun.model_monitoring.helpers import get_invocations_fqn
27
32
  from mlrun.utils import logger
28
33
 
@@ -52,25 +57,18 @@ class TDEngineConnector(TSDBConnector):
52
57
  self._init_super_tables()
53
58
 
54
59
  @property
55
- def connection(self) -> taosws.Connection:
60
+ def connection(self) -> TDEngineConnection:
56
61
  if not self._connection:
57
62
  self._connection = self._create_connection()
58
63
  return self._connection
59
64
 
60
- def _create_connection(self) -> taosws.Connection:
65
+ def _create_connection(self) -> TDEngineConnection:
61
66
  """Establish a connection to the TSDB server."""
62
- conn = taosws.connect(self._tdengine_connection_string)
63
- try:
64
- conn.execute(f"CREATE DATABASE {self.database}")
65
- except taosws.QueryError:
66
- # Database already exists
67
- pass
68
- try:
69
- conn.execute(f"USE {self.database}")
70
- except taosws.QueryError as e:
71
- raise mlrun.errors.MLRunTSDBConnectionFailureError(
72
- f"Failed to use TDEngine database {self.database}, {mlrun.errors.err_to_str(e)}"
73
- )
67
+ logger.debug("Creating a new connection to TDEngine", project=self.project)
68
+ conn = TDEngineConnection(self._tdengine_connection_string)
69
+ conn.run(statements=f"CREATE DATABASE IF NOT EXISTS {self.database}")
70
+ conn.prefix_statements = [f"USE {self.database}"]
71
+ logger.debug("Connected to TDEngine", project=self.project)
74
72
  return conn
75
73
 
76
74
  def _init_super_tables(self):
@@ -91,7 +89,7 @@ class TDEngineConnector(TSDBConnector):
91
89
  """Create TDEngine supertables."""
92
90
  for table in self.tables:
93
91
  create_table_query = self.tables[table]._create_super_table_query()
94
- self.connection.execute(create_table_query)
92
+ self.connection.run(statements=create_table_query)
95
93
 
96
94
  def write_application_event(
97
95
  self,
@@ -137,13 +135,18 @@ class TDEngineConnector(TSDBConnector):
137
135
  )
138
136
 
139
137
  create_table_sql = table._create_subtable_sql(subtable=table_name, values=event)
140
- self.connection.execute(create_table_sql)
141
138
 
142
- insert_statement = table._insert_subtable_stmt(
143
- self.connection, subtable=table_name, values=event
139
+ insert_statement = Statement(
140
+ TDEngineSchema._insert_subtable_stmt,
141
+ dict(columns=table.columns, subtable=table_name, values=event),
142
+ )
143
+
144
+ self.connection.run(
145
+ statements=[
146
+ create_table_sql,
147
+ insert_statement,
148
+ ]
144
149
  )
145
- insert_statement.add_batch()
146
- insert_statement.execute()
147
150
 
148
151
  @staticmethod
149
152
  def _convert_to_datetime(val: typing.Union[str, datetime]) -> datetime:
@@ -200,18 +203,24 @@ class TDEngineConnector(TSDBConnector):
200
203
  """
201
204
  Delete all project resources in the TSDB connector, such as model endpoints data and drift results.
202
205
  """
206
+ logger.debug(
207
+ "Deleting all project resources using the TDEngine connector",
208
+ project=self.project,
209
+ )
203
210
  for table in self.tables:
204
211
  get_subtable_names_query = self.tables[table]._get_subtables_query(
205
212
  values={mm_schemas.EventFieldType.PROJECT: self.project}
206
213
  )
207
- subtables = self.connection.query(get_subtable_names_query)
214
+ subtables = self.connection.run(query=get_subtable_names_query).data
215
+ drop_statements = []
208
216
  for subtable in subtables:
209
- drop_query = self.tables[table]._drop_subtable_query(
210
- subtable=subtable[0]
217
+ drop_statements.append(
218
+ self.tables[table]._drop_subtable_query(subtable=subtable[0])
211
219
  )
212
- self.connection.execute(drop_query)
213
- logger.info(
214
- f"Deleted all project resources in the TSDB connector for project {self.project}"
220
+ self.connection.run(statements=[drop_statements])
221
+ logger.debug(
222
+ "Deleted all project resources using the TDEngine connector",
223
+ project=self.project,
215
224
  )
216
225
 
217
226
  def get_model_endpoint_real_time_metrics(
@@ -282,14 +291,14 @@ class TDEngineConnector(TSDBConnector):
282
291
  )
283
292
  logger.debug("Querying TDEngine", query=full_query)
284
293
  try:
285
- query_result = self.connection.query(full_query)
294
+ query_result = self.connection.run(query=full_query)
286
295
  except taosws.QueryError as e:
287
296
  raise mlrun.errors.MLRunInvalidArgumentError(
288
297
  f"Failed to query table {table} in database {self.database}, {str(e)}"
289
298
  )
290
299
 
291
- df_columns = [field.name() for field in query_result.fields]
292
- return pd.DataFrame(query_result, columns=df_columns)
300
+ df_columns = [field.name for field in query_result.fields]
301
+ return pd.DataFrame(query_result.data, columns=df_columns)
293
302
 
294
303
  def read_metrics_data(
295
304
  self,
@@ -597,9 +597,9 @@ class _KFPRunner(_PipelineRunner):
597
597
  )
598
598
  # for start message, fallback to old notification behavior
599
599
  for notification in notifications or []:
600
- project.notifiers.add_notification(
601
- notification.kind, notification.params
602
- )
600
+ params = notification.params
601
+ params.update(notification.secret_params)
602
+ project.notifiers.add_notification(notification.kind, params)
603
603
 
604
604
  run_id = _run_pipeline(
605
605
  workflow_handler,
@@ -1081,7 +1081,7 @@ def load_and_run(
1081
1081
  # extract "start" notification if exists
1082
1082
  start_notifications = [
1083
1083
  notification
1084
- for notification in context.get_notifications()
1084
+ for notification in context.get_notifications(unmask_secret_params=True)
1085
1085
  if "running" in notification.when
1086
1086
  ]
1087
1087
 
mlrun/utils/helpers.py CHANGED
@@ -1782,3 +1782,43 @@ def _reload(module, max_recursion_depth):
1782
1782
  attribute = getattr(module, attribute_name)
1783
1783
  if type(attribute) is ModuleType:
1784
1784
  _reload(attribute, max_recursion_depth - 1)
1785
+
1786
+
1787
+ def run_with_retry(
1788
+ retry_count: int,
1789
+ func: typing.Callable,
1790
+ retry_on_exceptions: typing.Union[
1791
+ type[Exception],
1792
+ tuple[type[Exception]],
1793
+ ] = None,
1794
+ *args,
1795
+ **kwargs,
1796
+ ):
1797
+ """
1798
+ Executes a function with retry logic upon encountering specified exceptions.
1799
+
1800
+ :param retry_count: The number of times to retry the function execution.
1801
+ :param func: The function to execute.
1802
+ :param retry_on_exceptions: Exception(s) that trigger a retry. Can be a single exception or a tuple of exceptions.
1803
+ :param args: Positional arguments to pass to the function.
1804
+ :param kwargs: Keyword arguments to pass to the function.
1805
+ :return: The result of the function execution if successful.
1806
+ :raises Exception: Re-raises the last exception encountered after all retries are exhausted.
1807
+ """
1808
+ if retry_on_exceptions is None:
1809
+ retry_on_exceptions = (Exception,)
1810
+ elif isinstance(retry_on_exceptions, list):
1811
+ retry_on_exceptions = tuple(retry_on_exceptions)
1812
+
1813
+ last_exception = None
1814
+ for attempt in range(retry_count + 1):
1815
+ try:
1816
+ return func(*args, **kwargs)
1817
+ except retry_on_exceptions as exc:
1818
+ last_exception = exc
1819
+ logger.warning(
1820
+ f"Attempt {{{attempt}/ {retry_count}}} failed with exception: {exc}",
1821
+ )
1822
+ if attempt == retry_count:
1823
+ raise
1824
+ raise last_exception
@@ -1,4 +1,4 @@
1
1
  {
2
- "git_commit": "fe89f8ec27cecdb512643519d74f5debf285aacb",
3
- "version": "1.7.0-rc50"
2
+ "git_commit": "2c302d1e0b0ca25ab0b515fe43e3df47ebe8bd62",
3
+ "version": "1.7.0-rc52"
4
4
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mlrun
3
- Version: 1.7.0rc50
3
+ Version: 1.7.0rc52
4
4
  Summary: Tracking and config of machine learning runs
5
5
  Home-page: https://github.com/mlrun/mlrun
6
6
  Author: Yaron Haviv
@@ -50,7 +50,7 @@ Requires-Dist: setuptools ~=71.0
50
50
  Requires-Dist: deprecated ~=1.2
51
51
  Requires-Dist: jinja2 >=3.1.3,~=3.1
52
52
  Requires-Dist: orjson <4,>=3.9.15
53
- Requires-Dist: mlrun-pipelines-kfp-common ~=0.1.8
53
+ Requires-Dist: mlrun-pipelines-kfp-common ~=0.1.9
54
54
  Requires-Dist: mlrun-pipelines-kfp-v1-8 ~=0.1.6
55
55
  Provides-Extra: alibaba-oss
56
56
  Requires-Dist: ossfs ==2023.12.0 ; extra == 'alibaba-oss'
@@ -84,7 +84,8 @@ Requires-Dist: redis ~=4.3 ; extra == 'all'
84
84
  Requires-Dist: s3fs <2024.7,>=2023.9.2 ; extra == 'all'
85
85
  Requires-Dist: snowflake-connector-python ~=3.7 ; extra == 'all'
86
86
  Requires-Dist: sqlalchemy ~=1.4 ; extra == 'all'
87
- Requires-Dist: taos-ws-py ~=0.3.3 ; extra == 'all'
87
+ Requires-Dist: taos-ws-py ==0.3.2 ; extra == 'all'
88
+ Requires-Dist: taoswswrap ~=0.1.0 ; extra == 'all'
88
89
  Provides-Extra: api
89
90
  Requires-Dist: uvicorn ~=0.27.1 ; extra == 'api'
90
91
  Requires-Dist: dask-kubernetes ~=0.11.0 ; extra == 'api'
@@ -137,7 +138,8 @@ Requires-Dist: redis ~=4.3 ; extra == 'complete'
137
138
  Requires-Dist: s3fs <2024.7,>=2023.9.2 ; extra == 'complete'
138
139
  Requires-Dist: snowflake-connector-python ~=3.7 ; extra == 'complete'
139
140
  Requires-Dist: sqlalchemy ~=1.4 ; extra == 'complete'
140
- Requires-Dist: taos-ws-py ~=0.3.3 ; extra == 'complete'
141
+ Requires-Dist: taos-ws-py ==0.3.2 ; extra == 'complete'
142
+ Requires-Dist: taoswswrap ~=0.1.0 ; extra == 'complete'
141
143
  Provides-Extra: complete-api
142
144
  Requires-Dist: adlfs ==2023.9.0 ; extra == 'complete-api'
143
145
  Requires-Dist: aiobotocore <2.16,>=2.5.0 ; extra == 'complete-api'
@@ -174,7 +176,8 @@ Requires-Dist: redis ~=4.3 ; extra == 'complete-api'
174
176
  Requires-Dist: s3fs <2024.7,>=2023.9.2 ; extra == 'complete-api'
175
177
  Requires-Dist: snowflake-connector-python ~=3.7 ; extra == 'complete-api'
176
178
  Requires-Dist: sqlalchemy ~=1.4 ; extra == 'complete-api'
177
- Requires-Dist: taos-ws-py ~=0.3.3 ; extra == 'complete-api'
179
+ Requires-Dist: taos-ws-py ==0.3.2 ; extra == 'complete-api'
180
+ Requires-Dist: taoswswrap ~=0.1.0 ; extra == 'complete-api'
178
181
  Requires-Dist: timelength ~=1.1 ; extra == 'complete-api'
179
182
  Requires-Dist: uvicorn ~=0.27.1 ; extra == 'complete-api'
180
183
  Requires-Dist: memray ~=1.12 ; (sys_platform != "win32") and extra == 'complete-api'
@@ -209,7 +212,8 @@ Requires-Dist: snowflake-connector-python ~=3.7 ; extra == 'snowflake'
209
212
  Provides-Extra: sqlalchemy
210
213
  Requires-Dist: sqlalchemy ~=1.4 ; extra == 'sqlalchemy'
211
214
  Provides-Extra: tdengine
212
- Requires-Dist: taos-ws-py ~=0.3.3 ; extra == 'tdengine'
215
+ Requires-Dist: taos-ws-py ==0.3.2 ; extra == 'tdengine'
216
+ Requires-Dist: taoswswrap ~=0.1.0 ; extra == 'tdengine'
213
217
 
214
218
  <a id="top"></a>
215
219
  [![Build Status](https://github.com/mlrun/mlrun/actions/workflows/build.yaml/badge.svg?branch=development)](https://github.com/mlrun/mlrun/actions/workflows/build.yaml?query=branch%3Adevelopment)
@@ -2,11 +2,11 @@ mlrun/__init__.py,sha256=y08M1JcKXy5-9_5WaI9fn5aV5BxIQ5QkbduJK0OxWbA,7470
2
2
  mlrun/__main__.py,sha256=mC_Izs4kuHUHQi88QJFLN22n1kbygGM0wAirjNt7uj4,45938
3
3
  mlrun/config.py,sha256=NJG59Rl_5-mwgCdPDboRhjHD1ujW9ITYL7gtCbSMkM8,67308
4
4
  mlrun/errors.py,sha256=nY23dns_kTzbOrelJf0FyxLw5mglv7jo4Sx3efKS9Fs,7798
5
- mlrun/execution.py,sha256=u1nDWc7X3_B_w6-8AFuG52t11B9nd3ee5rLLGbalRDI,42843
5
+ mlrun/execution.py,sha256=nXvvN8euzjuxhJouJD8VxfK0keTTA6UoMrcD_17AL-4,44252
6
6
  mlrun/features.py,sha256=m17K_3l9Jktwb9dOwlHLTAPTlemsWrRF7dJhXUX0iJU,15429
7
7
  mlrun/k8s_utils.py,sha256=mRQMs6NzPq36vx1n5_2BfFapXysc8wv3NcrZ77_2ANA,8949
8
8
  mlrun/lists.py,sha256=3PqBdcajdwhTe1XuFsAaHTuFVM2kjwepf31qqE82apg,8384
9
- mlrun/model.py,sha256=pWE8L9SIaNu3pAgoqVTea5i-MRXcWqorOWvL0AiwM5E,81226
9
+ mlrun/model.py,sha256=S6CKiRrYfgVNALA9TLy4lsXZCox4FpD-TAnR5CU51cQ,82035
10
10
  mlrun/render.py,sha256=940H9fBBFeghH4dlifbURvtjlvw4GlWdAXezN6ky4rI,13275
11
11
  mlrun/run.py,sha256=hNxV-TnixbH8MCos2jqz8jdTDlK7dBSvJMil_QoGKQI,43616
12
12
  mlrun/secrets.py,sha256=ibtCK79u7JVBZF6F0SP1-xXXF5MyrLEUs_TCWiJAnlc,7798
@@ -243,9 +243,9 @@ mlrun/model_monitoring/db/tsdb/__init__.py,sha256=Zqh_27I2YAEHk9nl0Z6lUxP7VEfrgr
243
243
  mlrun/model_monitoring/db/tsdb/base.py,sha256=X89X763sDrShfRXE1N-p8k97E8NBs7O1QJFiO-CffLM,18583
244
244
  mlrun/model_monitoring/db/tsdb/helpers.py,sha256=0oUXc4aUkYtP2SGP6jTb3uPPKImIUsVsrb9otX9a7O4,1189
245
245
  mlrun/model_monitoring/db/tsdb/tdengine/__init__.py,sha256=vgBdsKaXUURKqIf3M0y4sRatmSVA4CQiJs7J5dcVBkQ,620
246
- mlrun/model_monitoring/db/tsdb/tdengine/schemas.py,sha256=7yZFn42sF597TBumVM-xhh1bjIQCbIo6qIvMK5WpWO0,10503
246
+ mlrun/model_monitoring/db/tsdb/tdengine/schemas.py,sha256=LqWJebDXrXo0mteKVG6LnvPYlWBYh2lMCXEcv-lWoKA,10551
247
247
  mlrun/model_monitoring/db/tsdb/tdengine/stream_graph_steps.py,sha256=Hb0vcCBP-o0ET78mU4P32fnhUL65QZv-pMuv2lnCby4,1586
248
- mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py,sha256=L4cDFfuGOVyF_bnPbUJ_xhMEt_DGwY6FWwoO4VEXSW4,18671
248
+ mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py,sha256=drNq_EpERU4lUNr_HyKBHVE4gB3CTz34Oi49XcO64EQ,18990
249
249
  mlrun/model_monitoring/db/tsdb/v3io/__init__.py,sha256=aL3bfmQsUQ-sbvKGdNihFj8gLCK3mSys0qDcXtYOwgc,616
250
250
  mlrun/model_monitoring/db/tsdb/v3io/stream_graph_steps.py,sha256=mbmhN4f_F58ptVjhwoMF6ifZSdnZWhK7x8eNsWS39IA,6217
251
251
  mlrun/model_monitoring/db/tsdb/v3io/v3io_connector.py,sha256=1H-IBXPNJPRAaxDMGWpUU25QqfR87LpZbJ03vaJkICs,32858
@@ -272,7 +272,7 @@ mlrun/platforms/__init__.py,sha256=ggSGF7inITs6S-vj9u4S9X_5psgbA0G3GVqf7zu8qYc,2
272
272
  mlrun/platforms/iguazio.py,sha256=1h5BpdAEQJBg2vIt7ySjUADU0ip5OkaMYr0_VREi9ys,13084
273
273
  mlrun/projects/__init__.py,sha256=Lv5rfxyXJrw6WGOWJKhBz66M6t3_zsNMCfUD6waPwx4,1153
274
274
  mlrun/projects/operations.py,sha256=gtqSU9OvYOV-b681uQtWgnW7YSnX6qfa1Mt1Xm4f1ZI,19752
275
- mlrun/projects/pipelines.py,sha256=RP9lTRuRRCuA4Vf0Z2-NwuPL9XRJ28S2v6tfLzmD9B0,40874
275
+ mlrun/projects/pipelines.py,sha256=9IZjfm9ccBO5xPW6FFY0em9w2ETNBP0hTvzfUf_YDjM,40951
276
276
  mlrun/projects/project.py,sha256=FjgkBBBP6geuxOGGp1Es5EFqsrs3M6PNWejBdoM08ng,190769
277
277
  mlrun/runtimes/__init__.py,sha256=egLM94cDMUyQ1GVABdFGXUQcDhU70lP3k7qSnM_UnHY,9008
278
278
  mlrun/runtimes/base.py,sha256=JXWmTIcm3b0klGUOHDlyFNa3bUgsNzQIgWhUQpSZoE0,37692
@@ -323,7 +323,7 @@ mlrun/utils/azure_vault.py,sha256=IEFizrDGDbAaoWwDr1WoA88S_EZ0T--vjYtY-i0cvYQ,34
323
323
  mlrun/utils/clones.py,sha256=mJpx4nyFiY6jlBCvFABsNuyi_mr1mvfPWn81vlafpOU,7361
324
324
  mlrun/utils/condition_evaluator.py,sha256=-nGfRmZzivn01rHTroiGY4rqEv8T1irMyhzxEei-sKc,1897
325
325
  mlrun/utils/db.py,sha256=blQgkWMfFH9lcN4sgJQcPQgEETz2Dl_zwbVA0SslpFg,2186
326
- mlrun/utils/helpers.py,sha256=112XTi14zIQwqyb0KeDcwLa4vAIm8kG1rBaypjXCffY,59716
326
+ mlrun/utils/helpers.py,sha256=F2hrR3748PTbFCzvckakACSjzL2ZypqEekTMldizxr0,61146
327
327
  mlrun/utils/http.py,sha256=t6FrXQstZm9xVVjxqIGiLzrwZNCR4CSienSOuVgNIcI,8706
328
328
  mlrun/utils/logger.py,sha256=cag2J30-jynIHmHZ2J8RYmVMNhYBGgAoimc5sbk-A1U,10016
329
329
  mlrun/utils/regex.py,sha256=b0AUa2THS-ELzJj0grl5b8Stq609F2XomTZkD9SB1fQ,4900
@@ -341,11 +341,11 @@ mlrun/utils/notifications/notification/ipython.py,sha256=ZtVL30B_Ha0VGoo4LxO-voT
341
341
  mlrun/utils/notifications/notification/slack.py,sha256=wqpFGr5BTvFO5KuUSzFfxsgmyU1Ohq7fbrGeNe9TXOk,7006
342
342
  mlrun/utils/notifications/notification/webhook.py,sha256=cb9w1Mc8ENfJBdgan7iiVHK9eVls4-R3tUxmXM-P-8I,4746
343
343
  mlrun/utils/version/__init__.py,sha256=7kkrB7hEZ3cLXoWj1kPoDwo4MaswsI2JVOBpbKgPAgc,614
344
- mlrun/utils/version/version.json,sha256=slRKoCCm9V9GXOEcyhpf1FNyOfO-3lk6SydAW7BkmVg,89
344
+ mlrun/utils/version/version.json,sha256=aebwGt4rZOROuMZJhVbQLjSTK6WxjEeI0k5kbplPv10,89
345
345
  mlrun/utils/version/version.py,sha256=eEW0tqIAkU9Xifxv8Z9_qsYnNhn3YH7NRAfM-pPLt1g,1878
346
- mlrun-1.7.0rc50.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
347
- mlrun-1.7.0rc50.dist-info/METADATA,sha256=0FpVzUdgaF0PueIufozDnrdMySc9QYVTznJOkgnEEjw,24262
348
- mlrun-1.7.0rc50.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
349
- mlrun-1.7.0rc50.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
350
- mlrun-1.7.0rc50.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
351
- mlrun-1.7.0rc50.dist-info/RECORD,,
346
+ mlrun-1.7.0rc52.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
347
+ mlrun-1.7.0rc52.dist-info/METADATA,sha256=4xKf0fr7nekI1lzBspdArputjtfZNMTiXwjBWx0dQHo,24485
348
+ mlrun-1.7.0rc52.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
349
+ mlrun-1.7.0rc52.dist-info/entry_points.txt,sha256=1Owd16eAclD5pfRCoJpYC2ZJSyGNTtUr0nCELMioMmU,46
350
+ mlrun-1.7.0rc52.dist-info/top_level.txt,sha256=NObLzw3maSF9wVrgSeYBv-fgnHkAJ1kEkh12DLdd5KM,6
351
+ mlrun-1.7.0rc52.dist-info/RECORD,,