mlrun 1.3.3__py3-none-any.whl → 1.4.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 mlrun might be problematic. Click here for more details.

Files changed (444) hide show
  1. mlrun/__init__.py +3 -3
  2. mlrun/__main__.py +79 -37
  3. mlrun/api/__init__.py +1 -1
  4. mlrun/api/api/__init__.py +1 -1
  5. mlrun/api/api/api.py +4 -4
  6. mlrun/api/api/deps.py +10 -21
  7. mlrun/api/api/endpoints/__init__.py +1 -1
  8. mlrun/api/api/endpoints/artifacts.py +64 -36
  9. mlrun/api/api/endpoints/auth.py +4 -4
  10. mlrun/api/api/endpoints/background_tasks.py +11 -11
  11. mlrun/api/api/endpoints/client_spec.py +5 -5
  12. mlrun/api/api/endpoints/clusterization_spec.py +6 -4
  13. mlrun/api/api/endpoints/feature_store.py +124 -115
  14. mlrun/api/api/endpoints/files.py +22 -14
  15. mlrun/api/api/endpoints/frontend_spec.py +28 -21
  16. mlrun/api/api/endpoints/functions.py +142 -87
  17. mlrun/api/api/endpoints/grafana_proxy.py +89 -442
  18. mlrun/api/api/endpoints/healthz.py +20 -7
  19. mlrun/api/api/endpoints/hub.py +320 -0
  20. mlrun/api/api/endpoints/internal/__init__.py +1 -1
  21. mlrun/api/api/endpoints/internal/config.py +1 -1
  22. mlrun/api/api/endpoints/internal/memory_reports.py +9 -9
  23. mlrun/api/api/endpoints/logs.py +11 -11
  24. mlrun/api/api/endpoints/model_endpoints.py +74 -70
  25. mlrun/api/api/endpoints/operations.py +13 -9
  26. mlrun/api/api/endpoints/pipelines.py +93 -88
  27. mlrun/api/api/endpoints/projects.py +35 -35
  28. mlrun/api/api/endpoints/runs.py +69 -27
  29. mlrun/api/api/endpoints/runtime_resources.py +28 -28
  30. mlrun/api/api/endpoints/schedules.py +98 -41
  31. mlrun/api/api/endpoints/secrets.py +37 -32
  32. mlrun/api/api/endpoints/submit.py +12 -12
  33. mlrun/api/api/endpoints/tags.py +20 -22
  34. mlrun/api/api/utils.py +251 -42
  35. mlrun/api/constants.py +1 -1
  36. mlrun/api/crud/__init__.py +18 -15
  37. mlrun/api/crud/artifacts.py +10 -10
  38. mlrun/api/crud/client_spec.py +4 -4
  39. mlrun/api/crud/clusterization_spec.py +3 -3
  40. mlrun/api/crud/feature_store.py +54 -46
  41. mlrun/api/crud/functions.py +3 -3
  42. mlrun/api/crud/hub.py +312 -0
  43. mlrun/api/crud/logs.py +11 -9
  44. mlrun/api/crud/model_monitoring/__init__.py +3 -3
  45. mlrun/api/crud/model_monitoring/grafana.py +435 -0
  46. mlrun/api/crud/model_monitoring/model_endpoints.py +352 -129
  47. mlrun/api/crud/notifications.py +149 -0
  48. mlrun/api/crud/pipelines.py +67 -52
  49. mlrun/api/crud/projects.py +51 -23
  50. mlrun/api/crud/runs.py +7 -5
  51. mlrun/api/crud/runtime_resources.py +13 -13
  52. mlrun/api/{db/filedb → crud/runtimes}/__init__.py +1 -1
  53. mlrun/api/crud/runtimes/nuclio/__init__.py +14 -0
  54. mlrun/api/crud/runtimes/nuclio/function.py +505 -0
  55. mlrun/api/crud/runtimes/nuclio/helpers.py +310 -0
  56. mlrun/api/crud/secrets.py +88 -46
  57. mlrun/api/crud/tags.py +5 -5
  58. mlrun/api/db/__init__.py +1 -1
  59. mlrun/api/db/base.py +102 -54
  60. mlrun/api/db/init_db.py +2 -3
  61. mlrun/api/db/session.py +4 -12
  62. mlrun/api/db/sqldb/__init__.py +1 -1
  63. mlrun/api/db/sqldb/db.py +439 -196
  64. mlrun/api/db/sqldb/helpers.py +1 -1
  65. mlrun/api/db/sqldb/models/__init__.py +3 -3
  66. mlrun/api/db/sqldb/models/models_mysql.py +82 -64
  67. mlrun/api/db/sqldb/models/models_sqlite.py +76 -64
  68. mlrun/api/db/sqldb/session.py +27 -20
  69. mlrun/api/initial_data.py +82 -24
  70. mlrun/api/launcher.py +196 -0
  71. mlrun/api/main.py +91 -22
  72. mlrun/api/middlewares.py +6 -5
  73. mlrun/api/migrations_mysql/env.py +1 -1
  74. mlrun/api/migrations_mysql/versions/28383af526f3_market_place_to_hub.py +40 -0
  75. mlrun/api/migrations_mysql/versions/32bae1b0e29c_increase_timestamp_fields_precision.py +1 -1
  76. mlrun/api/migrations_mysql/versions/4903aef6a91d_tag_foreign_key_and_cascades.py +1 -1
  77. mlrun/api/migrations_mysql/versions/5f1351c88a19_adding_background_tasks_table.py +1 -1
  78. mlrun/api/migrations_mysql/versions/88e656800d6a_add_requested_logs_column_and_index_to_.py +1 -1
  79. mlrun/api/migrations_mysql/versions/9d16de5f03a7_adding_data_versions_table.py +1 -1
  80. mlrun/api/migrations_mysql/versions/b86f5b53f3d7_adding_name_and_updated_to_runs_table.py +1 -1
  81. mlrun/api/migrations_mysql/versions/c4af40b0bf61_init.py +1 -1
  82. mlrun/api/migrations_mysql/versions/c905d15bd91d_notifications.py +72 -0
  83. mlrun/api/migrations_mysql/versions/ee041e8fdaa0_adding_next_run_time_column_to_schedule_.py +1 -1
  84. mlrun/api/migrations_sqlite/env.py +1 -1
  85. mlrun/api/migrations_sqlite/versions/11f8dd2dc9fe_init.py +1 -1
  86. mlrun/api/migrations_sqlite/versions/1c954f8cb32d_schedule_last_run_uri.py +1 -1
  87. mlrun/api/migrations_sqlite/versions/2b6d23c715aa_adding_feature_sets.py +1 -1
  88. mlrun/api/migrations_sqlite/versions/4acd9430b093_market_place_to_hub.py +77 -0
  89. mlrun/api/migrations_sqlite/versions/6401142f2d7c_adding_next_run_time_column_to_schedule_.py +1 -1
  90. mlrun/api/migrations_sqlite/versions/64d90a1a69bc_adding_background_tasks_table.py +1 -1
  91. mlrun/api/migrations_sqlite/versions/803438ecd005_add_requested_logs_column_to_runs.py +1 -1
  92. mlrun/api/migrations_sqlite/versions/863114f0c659_refactoring_feature_set.py +1 -1
  93. mlrun/api/migrations_sqlite/versions/959ae00528ad_notifications.py +63 -0
  94. mlrun/api/migrations_sqlite/versions/accf9fc83d38_adding_data_versions_table.py +1 -1
  95. mlrun/api/migrations_sqlite/versions/b68e8e897a28_schedule_labels.py +1 -1
  96. mlrun/api/migrations_sqlite/versions/bcd0c1f9720c_adding_project_labels.py +1 -1
  97. mlrun/api/migrations_sqlite/versions/cf21882f938e_schedule_id.py +1 -1
  98. mlrun/api/migrations_sqlite/versions/d781f58f607f_tag_object_name_string.py +1 -1
  99. mlrun/api/migrations_sqlite/versions/deac06871ace_adding_marketplace_sources_table.py +1 -1
  100. mlrun/api/migrations_sqlite/versions/e1dd5983c06b_schedule_concurrency_limit.py +1 -1
  101. mlrun/api/migrations_sqlite/versions/e5594ed3ab53_adding_name_and_updated_to_runs_table.py +1 -1
  102. mlrun/api/migrations_sqlite/versions/f4249b4ba6fa_adding_feature_vectors.py +1 -1
  103. mlrun/api/migrations_sqlite/versions/f7b5a1a03629_adding_feature_labels.py +1 -1
  104. mlrun/api/schemas/__init__.py +216 -138
  105. mlrun/api/utils/__init__.py +1 -1
  106. mlrun/api/utils/asyncio.py +1 -1
  107. mlrun/api/utils/auth/__init__.py +1 -1
  108. mlrun/api/utils/auth/providers/__init__.py +1 -1
  109. mlrun/api/utils/auth/providers/base.py +7 -7
  110. mlrun/api/utils/auth/providers/nop.py +6 -7
  111. mlrun/api/utils/auth/providers/opa.py +17 -17
  112. mlrun/api/utils/auth/verifier.py +36 -34
  113. mlrun/api/utils/background_tasks.py +24 -24
  114. mlrun/{builder.py → api/utils/builder.py} +216 -123
  115. mlrun/api/utils/clients/__init__.py +1 -1
  116. mlrun/api/utils/clients/chief.py +19 -4
  117. mlrun/api/utils/clients/iguazio.py +106 -60
  118. mlrun/api/utils/clients/log_collector.py +1 -1
  119. mlrun/api/utils/clients/nuclio.py +23 -23
  120. mlrun/api/utils/clients/protocols/grpc.py +2 -2
  121. mlrun/api/utils/db/__init__.py +1 -1
  122. mlrun/api/utils/db/alembic.py +1 -1
  123. mlrun/api/utils/db/backup.py +1 -1
  124. mlrun/api/utils/db/mysql.py +24 -25
  125. mlrun/api/utils/db/sql_collation.py +1 -1
  126. mlrun/api/utils/db/sqlite_migration.py +2 -2
  127. mlrun/api/utils/events/__init__.py +14 -0
  128. mlrun/api/utils/events/base.py +57 -0
  129. mlrun/api/utils/events/events_factory.py +41 -0
  130. mlrun/api/utils/events/iguazio.py +217 -0
  131. mlrun/api/utils/events/nop.py +55 -0
  132. mlrun/api/utils/helpers.py +16 -13
  133. mlrun/api/utils/memory_reports.py +1 -1
  134. mlrun/api/utils/periodic.py +6 -3
  135. mlrun/api/utils/projects/__init__.py +1 -1
  136. mlrun/api/utils/projects/follower.py +33 -33
  137. mlrun/api/utils/projects/leader.py +36 -34
  138. mlrun/api/utils/projects/member.py +27 -27
  139. mlrun/api/utils/projects/remotes/__init__.py +1 -1
  140. mlrun/api/utils/projects/remotes/follower.py +13 -13
  141. mlrun/api/utils/projects/remotes/leader.py +10 -10
  142. mlrun/api/utils/projects/remotes/nop_follower.py +27 -21
  143. mlrun/api/utils/projects/remotes/nop_leader.py +17 -16
  144. mlrun/api/utils/scheduler.py +140 -51
  145. mlrun/api/utils/singletons/__init__.py +1 -1
  146. mlrun/api/utils/singletons/db.py +9 -15
  147. mlrun/api/utils/singletons/k8s.py +677 -5
  148. mlrun/api/utils/singletons/logs_dir.py +1 -1
  149. mlrun/api/utils/singletons/project_member.py +1 -1
  150. mlrun/api/utils/singletons/scheduler.py +1 -1
  151. mlrun/artifacts/__init__.py +2 -2
  152. mlrun/artifacts/base.py +8 -2
  153. mlrun/artifacts/dataset.py +5 -3
  154. mlrun/artifacts/manager.py +7 -1
  155. mlrun/artifacts/model.py +15 -4
  156. mlrun/artifacts/plots.py +1 -1
  157. mlrun/common/__init__.py +1 -1
  158. mlrun/common/constants.py +15 -0
  159. mlrun/common/model_monitoring.py +209 -0
  160. mlrun/common/schemas/__init__.py +167 -0
  161. mlrun/{api → common}/schemas/artifact.py +13 -14
  162. mlrun/{api → common}/schemas/auth.py +10 -8
  163. mlrun/{api → common}/schemas/background_task.py +3 -3
  164. mlrun/{api → common}/schemas/client_spec.py +1 -1
  165. mlrun/{api → common}/schemas/clusterization_spec.py +3 -3
  166. mlrun/{api → common}/schemas/constants.py +21 -8
  167. mlrun/common/schemas/events.py +36 -0
  168. mlrun/{api → common}/schemas/feature_store.py +2 -1
  169. mlrun/{api → common}/schemas/frontend_spec.py +7 -6
  170. mlrun/{api → common}/schemas/function.py +5 -5
  171. mlrun/{api → common}/schemas/http.py +3 -3
  172. mlrun/common/schemas/hub.py +134 -0
  173. mlrun/{api → common}/schemas/k8s.py +3 -3
  174. mlrun/{api → common}/schemas/memory_reports.py +1 -1
  175. mlrun/common/schemas/model_endpoints.py +342 -0
  176. mlrun/common/schemas/notification.py +57 -0
  177. mlrun/{api → common}/schemas/object.py +6 -6
  178. mlrun/{api → common}/schemas/pipeline.py +3 -3
  179. mlrun/{api → common}/schemas/project.py +6 -5
  180. mlrun/common/schemas/regex.py +24 -0
  181. mlrun/common/schemas/runs.py +30 -0
  182. mlrun/{api → common}/schemas/runtime_resource.py +3 -3
  183. mlrun/{api → common}/schemas/schedule.py +19 -7
  184. mlrun/{api → common}/schemas/secret.py +3 -3
  185. mlrun/{api → common}/schemas/tag.py +2 -2
  186. mlrun/common/types.py +25 -0
  187. mlrun/config.py +152 -20
  188. mlrun/data_types/__init__.py +7 -2
  189. mlrun/data_types/data_types.py +4 -2
  190. mlrun/data_types/infer.py +1 -1
  191. mlrun/data_types/spark.py +10 -3
  192. mlrun/datastore/__init__.py +10 -3
  193. mlrun/datastore/azure_blob.py +1 -1
  194. mlrun/datastore/base.py +185 -53
  195. mlrun/datastore/datastore.py +1 -1
  196. mlrun/datastore/filestore.py +1 -1
  197. mlrun/datastore/google_cloud_storage.py +1 -1
  198. mlrun/datastore/inmem.py +4 -1
  199. mlrun/datastore/redis.py +1 -1
  200. mlrun/datastore/s3.py +1 -1
  201. mlrun/datastore/sources.py +192 -70
  202. mlrun/datastore/spark_udf.py +44 -0
  203. mlrun/datastore/store_resources.py +4 -4
  204. mlrun/datastore/targets.py +115 -45
  205. mlrun/datastore/utils.py +127 -5
  206. mlrun/datastore/v3io.py +1 -1
  207. mlrun/datastore/wasbfs/__init__.py +1 -1
  208. mlrun/datastore/wasbfs/fs.py +1 -1
  209. mlrun/db/__init__.py +7 -5
  210. mlrun/db/base.py +112 -68
  211. mlrun/db/httpdb.py +445 -277
  212. mlrun/db/nopdb.py +491 -0
  213. mlrun/db/sqldb.py +112 -65
  214. mlrun/errors.py +6 -1
  215. mlrun/execution.py +44 -22
  216. mlrun/feature_store/__init__.py +1 -1
  217. mlrun/feature_store/api.py +143 -95
  218. mlrun/feature_store/common.py +16 -20
  219. mlrun/feature_store/feature_set.py +42 -12
  220. mlrun/feature_store/feature_vector.py +32 -21
  221. mlrun/feature_store/ingestion.py +9 -12
  222. mlrun/feature_store/retrieval/__init__.py +3 -2
  223. mlrun/feature_store/retrieval/base.py +388 -66
  224. mlrun/feature_store/retrieval/dask_merger.py +63 -151
  225. mlrun/feature_store/retrieval/job.py +30 -12
  226. mlrun/feature_store/retrieval/local_merger.py +40 -133
  227. mlrun/feature_store/retrieval/spark_merger.py +129 -127
  228. mlrun/feature_store/retrieval/storey_merger.py +173 -0
  229. mlrun/feature_store/steps.py +132 -15
  230. mlrun/features.py +8 -3
  231. mlrun/frameworks/__init__.py +1 -1
  232. mlrun/frameworks/_common/__init__.py +1 -1
  233. mlrun/frameworks/_common/artifacts_library.py +1 -1
  234. mlrun/frameworks/_common/mlrun_interface.py +1 -1
  235. mlrun/frameworks/_common/model_handler.py +1 -1
  236. mlrun/frameworks/_common/plan.py +1 -1
  237. mlrun/frameworks/_common/producer.py +1 -1
  238. mlrun/frameworks/_common/utils.py +1 -1
  239. mlrun/frameworks/_dl_common/__init__.py +1 -1
  240. mlrun/frameworks/_dl_common/loggers/__init__.py +1 -1
  241. mlrun/frameworks/_dl_common/loggers/logger.py +1 -1
  242. mlrun/frameworks/_dl_common/loggers/mlrun_logger.py +1 -1
  243. mlrun/frameworks/_dl_common/loggers/tensorboard_logger.py +1 -1
  244. mlrun/frameworks/_dl_common/model_handler.py +1 -1
  245. mlrun/frameworks/_dl_common/utils.py +1 -1
  246. mlrun/frameworks/_ml_common/__init__.py +1 -1
  247. mlrun/frameworks/_ml_common/artifacts_library.py +1 -1
  248. mlrun/frameworks/_ml_common/loggers/__init__.py +1 -1
  249. mlrun/frameworks/_ml_common/loggers/logger.py +1 -1
  250. mlrun/frameworks/_ml_common/loggers/mlrun_logger.py +1 -1
  251. mlrun/frameworks/_ml_common/model_handler.py +1 -1
  252. mlrun/frameworks/_ml_common/pkl_model_server.py +13 -1
  253. mlrun/frameworks/_ml_common/plan.py +1 -1
  254. mlrun/frameworks/_ml_common/plans/__init__.py +1 -1
  255. mlrun/frameworks/_ml_common/plans/calibration_curve_plan.py +1 -6
  256. mlrun/frameworks/_ml_common/plans/confusion_matrix_plan.py +1 -1
  257. mlrun/frameworks/_ml_common/plans/dataset_plan.py +1 -1
  258. mlrun/frameworks/_ml_common/plans/feature_importance_plan.py +1 -1
  259. mlrun/frameworks/_ml_common/plans/roc_curve_plan.py +1 -1
  260. mlrun/frameworks/_ml_common/producer.py +1 -1
  261. mlrun/frameworks/_ml_common/utils.py +1 -1
  262. mlrun/frameworks/auto_mlrun/__init__.py +1 -1
  263. mlrun/frameworks/auto_mlrun/auto_mlrun.py +1 -1
  264. mlrun/frameworks/huggingface/__init__.py +1 -1
  265. mlrun/frameworks/huggingface/model_server.py +1 -1
  266. mlrun/frameworks/lgbm/__init__.py +1 -1
  267. mlrun/frameworks/lgbm/callbacks/__init__.py +1 -1
  268. mlrun/frameworks/lgbm/callbacks/callback.py +1 -1
  269. mlrun/frameworks/lgbm/callbacks/logging_callback.py +1 -1
  270. mlrun/frameworks/lgbm/callbacks/mlrun_logging_callback.py +1 -1
  271. mlrun/frameworks/lgbm/mlrun_interfaces/__init__.py +1 -1
  272. mlrun/frameworks/lgbm/mlrun_interfaces/booster_mlrun_interface.py +1 -1
  273. mlrun/frameworks/lgbm/mlrun_interfaces/mlrun_interface.py +1 -1
  274. mlrun/frameworks/lgbm/mlrun_interfaces/model_mlrun_interface.py +1 -1
  275. mlrun/frameworks/lgbm/model_handler.py +1 -1
  276. mlrun/frameworks/lgbm/model_server.py +1 -1
  277. mlrun/frameworks/lgbm/utils.py +1 -1
  278. mlrun/frameworks/onnx/__init__.py +1 -1
  279. mlrun/frameworks/onnx/dataset.py +1 -1
  280. mlrun/frameworks/onnx/mlrun_interface.py +1 -1
  281. mlrun/frameworks/onnx/model_handler.py +1 -1
  282. mlrun/frameworks/onnx/model_server.py +1 -1
  283. mlrun/frameworks/parallel_coordinates.py +1 -1
  284. mlrun/frameworks/pytorch/__init__.py +1 -1
  285. mlrun/frameworks/pytorch/callbacks/__init__.py +1 -1
  286. mlrun/frameworks/pytorch/callbacks/callback.py +1 -1
  287. mlrun/frameworks/pytorch/callbacks/logging_callback.py +1 -1
  288. mlrun/frameworks/pytorch/callbacks/mlrun_logging_callback.py +1 -1
  289. mlrun/frameworks/pytorch/callbacks/tensorboard_logging_callback.py +1 -1
  290. mlrun/frameworks/pytorch/callbacks_handler.py +1 -1
  291. mlrun/frameworks/pytorch/mlrun_interface.py +1 -1
  292. mlrun/frameworks/pytorch/model_handler.py +1 -1
  293. mlrun/frameworks/pytorch/model_server.py +1 -1
  294. mlrun/frameworks/pytorch/utils.py +1 -1
  295. mlrun/frameworks/sklearn/__init__.py +1 -1
  296. mlrun/frameworks/sklearn/estimator.py +1 -1
  297. mlrun/frameworks/sklearn/metric.py +1 -1
  298. mlrun/frameworks/sklearn/metrics_library.py +1 -1
  299. mlrun/frameworks/sklearn/mlrun_interface.py +1 -1
  300. mlrun/frameworks/sklearn/model_handler.py +1 -1
  301. mlrun/frameworks/sklearn/utils.py +1 -1
  302. mlrun/frameworks/tf_keras/__init__.py +1 -1
  303. mlrun/frameworks/tf_keras/callbacks/__init__.py +1 -1
  304. mlrun/frameworks/tf_keras/callbacks/logging_callback.py +1 -1
  305. mlrun/frameworks/tf_keras/callbacks/mlrun_logging_callback.py +1 -1
  306. mlrun/frameworks/tf_keras/callbacks/tensorboard_logging_callback.py +1 -1
  307. mlrun/frameworks/tf_keras/mlrun_interface.py +1 -1
  308. mlrun/frameworks/tf_keras/model_handler.py +1 -1
  309. mlrun/frameworks/tf_keras/model_server.py +1 -1
  310. mlrun/frameworks/tf_keras/utils.py +1 -1
  311. mlrun/frameworks/xgboost/__init__.py +1 -1
  312. mlrun/frameworks/xgboost/mlrun_interface.py +1 -1
  313. mlrun/frameworks/xgboost/model_handler.py +1 -1
  314. mlrun/frameworks/xgboost/utils.py +1 -1
  315. mlrun/k8s_utils.py +14 -765
  316. mlrun/kfpops.py +14 -17
  317. mlrun/launcher/__init__.py +13 -0
  318. mlrun/launcher/base.py +406 -0
  319. mlrun/launcher/client.py +159 -0
  320. mlrun/launcher/factory.py +50 -0
  321. mlrun/launcher/local.py +276 -0
  322. mlrun/launcher/remote.py +178 -0
  323. mlrun/lists.py +10 -2
  324. mlrun/mlutils/__init__.py +1 -1
  325. mlrun/mlutils/data.py +1 -1
  326. mlrun/mlutils/models.py +1 -1
  327. mlrun/mlutils/plots.py +1 -1
  328. mlrun/model.py +252 -14
  329. mlrun/model_monitoring/__init__.py +41 -0
  330. mlrun/model_monitoring/features_drift_table.py +1 -1
  331. mlrun/model_monitoring/helpers.py +123 -38
  332. mlrun/model_monitoring/model_endpoint.py +144 -0
  333. mlrun/model_monitoring/model_monitoring_batch.py +310 -259
  334. mlrun/model_monitoring/stores/__init__.py +106 -0
  335. mlrun/model_monitoring/stores/kv_model_endpoint_store.py +448 -0
  336. mlrun/model_monitoring/stores/model_endpoint_store.py +147 -0
  337. mlrun/model_monitoring/stores/models/__init__.py +23 -0
  338. mlrun/model_monitoring/stores/models/base.py +18 -0
  339. mlrun/model_monitoring/stores/models/mysql.py +100 -0
  340. mlrun/model_monitoring/stores/models/sqlite.py +98 -0
  341. mlrun/model_monitoring/stores/sql_model_endpoint_store.py +370 -0
  342. mlrun/model_monitoring/stream_processing_fs.py +239 -271
  343. mlrun/package/__init__.py +163 -0
  344. mlrun/package/context_handler.py +325 -0
  345. mlrun/package/errors.py +47 -0
  346. mlrun/package/packager.py +298 -0
  347. mlrun/{runtimes/package → package/packagers}/__init__.py +3 -1
  348. mlrun/package/packagers/default_packager.py +422 -0
  349. mlrun/package/packagers/numpy_packagers.py +612 -0
  350. mlrun/package/packagers/pandas_packagers.py +968 -0
  351. mlrun/package/packagers/python_standard_library_packagers.py +616 -0
  352. mlrun/package/packagers_manager.py +786 -0
  353. mlrun/package/utils/__init__.py +53 -0
  354. mlrun/package/utils/_archiver.py +226 -0
  355. mlrun/package/utils/_formatter.py +211 -0
  356. mlrun/package/utils/_pickler.py +234 -0
  357. mlrun/package/utils/_supported_format.py +71 -0
  358. mlrun/package/utils/log_hint_utils.py +93 -0
  359. mlrun/package/utils/type_hint_utils.py +298 -0
  360. mlrun/platforms/__init__.py +1 -1
  361. mlrun/platforms/iguazio.py +34 -2
  362. mlrun/platforms/other.py +1 -1
  363. mlrun/projects/__init__.py +1 -1
  364. mlrun/projects/operations.py +14 -9
  365. mlrun/projects/pipelines.py +31 -13
  366. mlrun/projects/project.py +762 -238
  367. mlrun/render.py +49 -19
  368. mlrun/run.py +57 -326
  369. mlrun/runtimes/__init__.py +3 -9
  370. mlrun/runtimes/base.py +247 -784
  371. mlrun/runtimes/constants.py +1 -1
  372. mlrun/runtimes/daskjob.py +45 -41
  373. mlrun/runtimes/funcdoc.py +43 -7
  374. mlrun/runtimes/function.py +66 -656
  375. mlrun/runtimes/function_reference.py +1 -1
  376. mlrun/runtimes/generators.py +1 -1
  377. mlrun/runtimes/kubejob.py +99 -116
  378. mlrun/runtimes/local.py +59 -66
  379. mlrun/runtimes/mpijob/__init__.py +1 -1
  380. mlrun/runtimes/mpijob/abstract.py +13 -15
  381. mlrun/runtimes/mpijob/v1.py +3 -1
  382. mlrun/runtimes/mpijob/v1alpha1.py +1 -1
  383. mlrun/runtimes/nuclio.py +1 -1
  384. mlrun/runtimes/pod.py +51 -26
  385. mlrun/runtimes/remotesparkjob.py +3 -1
  386. mlrun/runtimes/serving.py +12 -4
  387. mlrun/runtimes/sparkjob/__init__.py +1 -2
  388. mlrun/runtimes/sparkjob/abstract.py +44 -31
  389. mlrun/runtimes/sparkjob/spark3job.py +11 -9
  390. mlrun/runtimes/utils.py +61 -42
  391. mlrun/secrets.py +16 -18
  392. mlrun/serving/__init__.py +3 -2
  393. mlrun/serving/merger.py +1 -1
  394. mlrun/serving/remote.py +1 -1
  395. mlrun/serving/routers.py +39 -42
  396. mlrun/serving/server.py +23 -13
  397. mlrun/serving/serving_wrapper.py +1 -1
  398. mlrun/serving/states.py +172 -39
  399. mlrun/serving/utils.py +1 -1
  400. mlrun/serving/v1_serving.py +1 -1
  401. mlrun/serving/v2_serving.py +29 -21
  402. mlrun/utils/__init__.py +1 -2
  403. mlrun/utils/async_http.py +8 -1
  404. mlrun/utils/azure_vault.py +1 -1
  405. mlrun/utils/clones.py +2 -2
  406. mlrun/utils/condition_evaluator.py +65 -0
  407. mlrun/utils/db.py +52 -0
  408. mlrun/utils/helpers.py +188 -13
  409. mlrun/utils/http.py +89 -54
  410. mlrun/utils/logger.py +48 -8
  411. mlrun/utils/model_monitoring.py +132 -100
  412. mlrun/utils/notifications/__init__.py +1 -1
  413. mlrun/utils/notifications/notification/__init__.py +8 -6
  414. mlrun/utils/notifications/notification/base.py +20 -14
  415. mlrun/utils/notifications/notification/console.py +7 -4
  416. mlrun/utils/notifications/notification/git.py +36 -19
  417. mlrun/utils/notifications/notification/ipython.py +10 -8
  418. mlrun/utils/notifications/notification/slack.py +18 -13
  419. mlrun/utils/notifications/notification_pusher.py +377 -56
  420. mlrun/utils/regex.py +6 -1
  421. mlrun/utils/singleton.py +1 -1
  422. mlrun/utils/v3io_clients.py +1 -1
  423. mlrun/utils/vault.py +270 -269
  424. mlrun/utils/version/__init__.py +1 -1
  425. mlrun/utils/version/version.json +2 -2
  426. mlrun/utils/version/version.py +1 -1
  427. {mlrun-1.3.3.dist-info → mlrun-1.4.0.dist-info}/METADATA +16 -10
  428. mlrun-1.4.0.dist-info/RECORD +434 -0
  429. mlrun/api/api/endpoints/marketplace.py +0 -257
  430. mlrun/api/crud/marketplace.py +0 -221
  431. mlrun/api/crud/model_monitoring/model_endpoint_store.py +0 -847
  432. mlrun/api/db/filedb/db.py +0 -518
  433. mlrun/api/schemas/marketplace.py +0 -128
  434. mlrun/api/schemas/model_endpoints.py +0 -185
  435. mlrun/db/filedb.py +0 -891
  436. mlrun/feature_store/retrieval/online.py +0 -92
  437. mlrun/model_monitoring/constants.py +0 -67
  438. mlrun/runtimes/package/context_handler.py +0 -711
  439. mlrun/runtimes/sparkjob/spark2job.py +0 -59
  440. mlrun-1.3.3.dist-info/RECORD +0 -381
  441. {mlrun-1.3.3.dist-info → mlrun-1.4.0.dist-info}/LICENSE +0 -0
  442. {mlrun-1.3.3.dist-info → mlrun-1.4.0.dist-info}/WHEEL +0 -0
  443. {mlrun-1.3.3.dist-info → mlrun-1.4.0.dist-info}/entry_points.txt +0 -0
  444. {mlrun-1.3.3.dist-info → mlrun-1.4.0.dist-info}/top_level.txt +0 -0
mlrun/api/db/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Iguazio
1
+ # Copyright 2023 Iguazio
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
mlrun/api/db/base.py CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Iguazio
1
+ # Copyright 2023 Iguazio
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -12,11 +12,13 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  import datetime
15
+ import typing
15
16
  import warnings
16
17
  from abc import ABC, abstractmethod
17
18
  from typing import Any, Dict, List, Optional, Tuple, Union
18
19
 
19
- from mlrun.api import schemas
20
+ import mlrun.common.schemas
21
+ import mlrun.model
20
22
 
21
23
 
22
24
  class DBError(Exception):
@@ -96,13 +98,14 @@ class DBInterface(ABC):
96
98
  start_time_to=None,
97
99
  last_update_time_from=None,
98
100
  last_update_time_to=None,
99
- partition_by: schemas.RunPartitionByField = None,
101
+ partition_by: mlrun.common.schemas.RunPartitionByField = None,
100
102
  rows_per_partition: int = 1,
101
- partition_sort_by: schemas.SortField = None,
102
- partition_order: schemas.OrderType = schemas.OrderType.desc,
103
+ partition_sort_by: mlrun.common.schemas.SortField = None,
104
+ partition_order: mlrun.common.schemas.OrderType = mlrun.common.schemas.OrderType.desc,
103
105
  max_partitions: int = 0,
104
106
  requested_logs: bool = None,
105
107
  return_as_run_structs: bool = True,
108
+ with_notifications: bool = False,
106
109
  ):
107
110
  pass
108
111
 
@@ -119,7 +122,7 @@ class DBInterface(ABC):
119
122
  session,
120
123
  project: str,
121
124
  tag: str,
122
- identifiers: List[schemas.ArtifactIdentifier],
125
+ identifiers: List[mlrun.common.schemas.ArtifactIdentifier],
123
126
  ):
124
127
  pass
125
128
 
@@ -128,7 +131,7 @@ class DBInterface(ABC):
128
131
  session,
129
132
  project: str,
130
133
  tag: str,
131
- identifiers: List[schemas.ArtifactIdentifier],
134
+ identifiers: List[mlrun.common.schemas.ArtifactIdentifier],
132
135
  ):
133
136
  pass
134
137
 
@@ -137,7 +140,7 @@ class DBInterface(ABC):
137
140
  session,
138
141
  project: str,
139
142
  tag: str,
140
- identifiers: List[schemas.ArtifactIdentifier],
143
+ identifiers: List[mlrun.common.schemas.ArtifactIdentifier],
141
144
  ):
142
145
  pass
143
146
 
@@ -169,7 +172,7 @@ class DBInterface(ABC):
169
172
  since=None,
170
173
  until=None,
171
174
  kind=None,
172
- category: schemas.ArtifactCategories = None,
175
+ category: mlrun.common.schemas.ArtifactCategories = None,
173
176
  iter: int = None,
174
177
  best_iteration: bool = False,
175
178
  as_records: bool = False,
@@ -232,9 +235,9 @@ class DBInterface(ABC):
232
235
  session,
233
236
  project: str,
234
237
  name: str,
235
- kind: schemas.ScheduleKinds,
238
+ kind: mlrun.common.schemas.ScheduleKinds,
236
239
  scheduled_object: Any,
237
- cron_trigger: schemas.ScheduleCronTrigger,
240
+ cron_trigger: mlrun.common.schemas.ScheduleCronTrigger,
238
241
  concurrency_limit: int,
239
242
  labels: Dict = None,
240
243
  next_run_time: datetime.datetime = None,
@@ -248,7 +251,7 @@ class DBInterface(ABC):
248
251
  project: str,
249
252
  name: str,
250
253
  scheduled_object: Any = None,
251
- cron_trigger: schemas.ScheduleCronTrigger = None,
254
+ cron_trigger: mlrun.common.schemas.ScheduleCronTrigger = None,
252
255
  labels: Dict = None,
253
256
  last_run_uri: str = None,
254
257
  concurrency_limit: int = None,
@@ -263,12 +266,14 @@ class DBInterface(ABC):
263
266
  project: str = None,
264
267
  name: str = None,
265
268
  labels: str = None,
266
- kind: schemas.ScheduleKinds = None,
267
- ) -> List[schemas.ScheduleRecord]:
269
+ kind: mlrun.common.schemas.ScheduleKinds = None,
270
+ ) -> List[mlrun.common.schemas.ScheduleRecord]:
268
271
  pass
269
272
 
270
273
  @abstractmethod
271
- def get_schedule(self, session, project: str, name: str) -> schemas.ScheduleRecord:
274
+ def get_schedule(
275
+ self, session, project: str, name: str
276
+ ) -> mlrun.common.schemas.ScheduleRecord:
272
277
  pass
273
278
 
274
279
  @abstractmethod
@@ -282,7 +287,7 @@ class DBInterface(ABC):
282
287
  @abstractmethod
283
288
  def generate_projects_summaries(
284
289
  self, session, projects: List[str]
285
- ) -> List[schemas.ProjectSummary]:
290
+ ) -> List[mlrun.common.schemas.ProjectSummary]:
286
291
  pass
287
292
 
288
293
  @abstractmethod
@@ -302,17 +307,17 @@ class DBInterface(ABC):
302
307
  self,
303
308
  session,
304
309
  owner: str = None,
305
- format_: schemas.ProjectsFormat = schemas.ProjectsFormat.full,
310
+ format_: mlrun.common.schemas.ProjectsFormat = mlrun.common.schemas.ProjectsFormat.full,
306
311
  labels: List[str] = None,
307
- state: schemas.ProjectState = None,
312
+ state: mlrun.common.schemas.ProjectState = None,
308
313
  names: Optional[List[str]] = None,
309
- ) -> schemas.ProjectsOutput:
314
+ ) -> mlrun.common.schemas.ProjectsOutput:
310
315
  pass
311
316
 
312
317
  @abstractmethod
313
318
  def get_project(
314
319
  self, session, name: str = None, project_id: int = None
315
- ) -> schemas.Project:
320
+ ) -> mlrun.common.schemas.Project:
316
321
  pass
317
322
 
318
323
  @abstractmethod
@@ -329,11 +334,11 @@ class DBInterface(ABC):
329
334
  pass
330
335
 
331
336
  @abstractmethod
332
- def create_project(self, session, project: schemas.Project):
337
+ def create_project(self, session, project: mlrun.common.schemas.Project):
333
338
  pass
334
339
 
335
340
  @abstractmethod
336
- def store_project(self, session, name: str, project: schemas.Project):
341
+ def store_project(self, session, name: str, project: mlrun.common.schemas.Project):
337
342
  pass
338
343
 
339
344
  @abstractmethod
@@ -342,7 +347,7 @@ class DBInterface(ABC):
342
347
  session,
343
348
  name: str,
344
349
  project: dict,
345
- patch_mode: schemas.PatchMode = schemas.PatchMode.replace,
350
+ patch_mode: mlrun.common.schemas.PatchMode = mlrun.common.schemas.PatchMode.replace,
346
351
  ):
347
352
  pass
348
353
 
@@ -351,7 +356,7 @@ class DBInterface(ABC):
351
356
  self,
352
357
  session,
353
358
  name: str,
354
- deletion_strategy: schemas.DeletionStrategy = schemas.DeletionStrategy.default(),
359
+ deletion_strategy: mlrun.common.schemas.DeletionStrategy = mlrun.common.schemas.DeletionStrategy.default(),
355
360
  ):
356
361
  pass
357
362
 
@@ -360,7 +365,7 @@ class DBInterface(ABC):
360
365
  self,
361
366
  session,
362
367
  project,
363
- feature_set: schemas.FeatureSet,
368
+ feature_set: mlrun.common.schemas.FeatureSet,
364
369
  versioned=True,
365
370
  ) -> str:
366
371
  pass
@@ -371,7 +376,7 @@ class DBInterface(ABC):
371
376
  session,
372
377
  project,
373
378
  name,
374
- feature_set: schemas.FeatureSet,
379
+ feature_set: mlrun.common.schemas.FeatureSet,
375
380
  tag=None,
376
381
  uid=None,
377
382
  versioned=True,
@@ -382,7 +387,7 @@ class DBInterface(ABC):
382
387
  @abstractmethod
383
388
  def get_feature_set(
384
389
  self, session, project: str, name: str, tag: str = None, uid: str = None
385
- ) -> schemas.FeatureSet:
390
+ ) -> mlrun.common.schemas.FeatureSet:
386
391
  pass
387
392
 
388
393
  @abstractmethod
@@ -394,7 +399,7 @@ class DBInterface(ABC):
394
399
  tag: str = None,
395
400
  entities: List[str] = None,
396
401
  labels: List[str] = None,
397
- ) -> schemas.FeaturesOutput:
402
+ ) -> mlrun.common.schemas.FeaturesOutput:
398
403
  pass
399
404
 
400
405
  @abstractmethod
@@ -405,7 +410,7 @@ class DBInterface(ABC):
405
410
  name: str = None,
406
411
  tag: str = None,
407
412
  labels: List[str] = None,
408
- ) -> schemas.EntitiesOutput:
413
+ ) -> mlrun.common.schemas.EntitiesOutput:
409
414
  pass
410
415
 
411
416
  @abstractmethod
@@ -419,11 +424,11 @@ class DBInterface(ABC):
419
424
  entities: List[str] = None,
420
425
  features: List[str] = None,
421
426
  labels: List[str] = None,
422
- partition_by: schemas.FeatureStorePartitionByField = None,
427
+ partition_by: mlrun.common.schemas.FeatureStorePartitionByField = None,
423
428
  rows_per_partition: int = 1,
424
- partition_sort_by: schemas.SortField = None,
425
- partition_order: schemas.OrderType = schemas.OrderType.desc,
426
- ) -> schemas.FeatureSetsOutput:
429
+ partition_sort_by: mlrun.common.schemas.SortField = None,
430
+ partition_order: mlrun.common.schemas.OrderType = mlrun.common.schemas.OrderType.desc,
431
+ ) -> mlrun.common.schemas.FeatureSetsOutput:
427
432
  pass
428
433
 
429
434
  @abstractmethod
@@ -446,7 +451,7 @@ class DBInterface(ABC):
446
451
  feature_set_patch: dict,
447
452
  tag=None,
448
453
  uid=None,
449
- patch_mode: schemas.PatchMode = schemas.PatchMode.replace,
454
+ patch_mode: mlrun.common.schemas.PatchMode = mlrun.common.schemas.PatchMode.replace,
450
455
  ) -> str:
451
456
  pass
452
457
 
@@ -459,7 +464,7 @@ class DBInterface(ABC):
459
464
  self,
460
465
  session,
461
466
  project,
462
- feature_vector: schemas.FeatureVector,
467
+ feature_vector: mlrun.common.schemas.FeatureVector,
463
468
  versioned=True,
464
469
  ) -> str:
465
470
  pass
@@ -467,7 +472,7 @@ class DBInterface(ABC):
467
472
  @abstractmethod
468
473
  def get_feature_vector(
469
474
  self, session, project: str, name: str, tag: str = None, uid: str = None
470
- ) -> schemas.FeatureVector:
475
+ ) -> mlrun.common.schemas.FeatureVector:
471
476
  pass
472
477
 
473
478
  @abstractmethod
@@ -479,11 +484,11 @@ class DBInterface(ABC):
479
484
  tag: str = None,
480
485
  state: str = None,
481
486
  labels: List[str] = None,
482
- partition_by: schemas.FeatureStorePartitionByField = None,
487
+ partition_by: mlrun.common.schemas.FeatureStorePartitionByField = None,
483
488
  rows_per_partition: int = 1,
484
- partition_sort_by: schemas.SortField = None,
485
- partition_order: schemas.OrderType = schemas.OrderType.desc,
486
- ) -> schemas.FeatureVectorsOutput:
489
+ partition_sort_by: mlrun.common.schemas.SortField = None,
490
+ partition_order: mlrun.common.schemas.OrderType = mlrun.common.schemas.OrderType.desc,
491
+ ) -> mlrun.common.schemas.FeatureVectorsOutput:
487
492
  pass
488
493
 
489
494
  @abstractmethod
@@ -503,7 +508,7 @@ class DBInterface(ABC):
503
508
  session,
504
509
  project,
505
510
  name,
506
- feature_vector: schemas.FeatureVector,
511
+ feature_vector: mlrun.common.schemas.FeatureVector,
507
512
  tag=None,
508
513
  uid=None,
509
514
  versioned=True,
@@ -520,7 +525,7 @@ class DBInterface(ABC):
520
525
  feature_vector_update: dict,
521
526
  tag=None,
522
527
  uid=None,
523
- patch_mode: schemas.PatchMode = schemas.PatchMode.replace,
528
+ patch_mode: mlrun.common.schemas.PatchMode = mlrun.common.schemas.PatchMode.replace,
524
529
  ) -> str:
525
530
  pass
526
531
 
@@ -536,29 +541,33 @@ class DBInterface(ABC):
536
541
  pass
537
542
 
538
543
  def list_artifact_tags(
539
- self, session, project, category: Union[str, schemas.ArtifactCategories] = None
544
+ self,
545
+ session,
546
+ project,
547
+ category: Union[str, mlrun.common.schemas.ArtifactCategories] = None,
540
548
  ):
541
549
  return []
542
550
 
543
- def create_marketplace_source(
544
- self, session, ordered_source: schemas.IndexedMarketplaceSource
551
+ def create_hub_source(
552
+ self, session, ordered_source: mlrun.common.schemas.IndexedHubSource
545
553
  ):
546
554
  pass
547
555
 
548
- def store_marketplace_source(
549
- self, session, name, ordered_source: schemas.IndexedMarketplaceSource
556
+ def store_hub_source(
557
+ self,
558
+ session,
559
+ name,
560
+ ordered_source: mlrun.common.schemas.IndexedHubSource,
550
561
  ):
551
562
  pass
552
563
 
553
- def list_marketplace_sources(
554
- self, session
555
- ) -> List[schemas.IndexedMarketplaceSource]:
564
+ def list_hub_sources(self, session) -> List[mlrun.common.schemas.IndexedHubSource]:
556
565
  pass
557
566
 
558
- def delete_marketplace_source(self, session, name):
567
+ def delete_hub_source(self, session, name):
559
568
  pass
560
569
 
561
- def get_marketplace_source(self, session, name) -> schemas.IndexedMarketplaceSource:
570
+ def get_hub_source(self, session, name) -> mlrun.common.schemas.IndexedHubSource:
562
571
  pass
563
572
 
564
573
  def store_background_task(
@@ -566,12 +575,51 @@ class DBInterface(ABC):
566
575
  session,
567
576
  name: str,
568
577
  project: str,
569
- state: str = schemas.BackgroundTaskState.running,
578
+ state: str = mlrun.common.schemas.BackgroundTaskState.running,
570
579
  timeout: int = None,
571
580
  ):
572
581
  pass
573
582
 
574
583
  def get_background_task(
575
584
  self, session, name: str, project: str
576
- ) -> schemas.BackgroundTask:
585
+ ) -> mlrun.common.schemas.BackgroundTask:
586
+ pass
587
+
588
+ @abstractmethod
589
+ def store_run_notifications(
590
+ self,
591
+ session,
592
+ notification_objects: typing.List[mlrun.model.Notification],
593
+ run_uid: str,
594
+ project: str,
595
+ ):
596
+ pass
597
+
598
+ @abstractmethod
599
+ def list_run_notifications(
600
+ self,
601
+ session,
602
+ run_uid: str,
603
+ project: str,
604
+ ) -> typing.List[mlrun.model.Notification]:
605
+ pass
606
+
607
+ def delete_run_notifications(
608
+ self,
609
+ session,
610
+ name: str = None,
611
+ run_uid: str = None,
612
+ project: str = None,
613
+ commit: bool = True,
614
+ ):
615
+ pass
616
+
617
+ def set_run_notifications(
618
+ self,
619
+ session,
620
+ project: str,
621
+ notifications: typing.List[mlrun.model.Notification],
622
+ identifiers: typing.List[mlrun.common.schemas.RunIdentifier],
623
+ **kwargs,
624
+ ):
577
625
  pass
mlrun/api/db/init_db.py CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Iguazio
1
+ # Copyright 2023 Iguazio
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -12,13 +12,12 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
  #
15
- from sqlalchemy.orm import Session
16
15
 
17
16
  from mlrun.api.db.sqldb.models import Base
18
17
  from mlrun.api.db.sqldb.session import get_engine
19
18
  from mlrun.config import config
20
19
 
21
20
 
22
- def init_db(db_session: Session) -> None:
21
+ def init_db() -> None:
23
22
  if config.httpdb.db_type != "filedb":
24
23
  Base.metadata.create_all(bind=get_engine())
mlrun/api/db/session.py CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Iguazio
1
+ # Copyright 2023 Iguazio
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -15,22 +15,14 @@
15
15
  from sqlalchemy.orm import Session
16
16
 
17
17
  from mlrun.api.db.sqldb.session import create_session as sqldb_create_session
18
- from mlrun.config import config
19
18
 
20
19
 
21
- def create_session(db_type=None) -> Session:
22
- db_type = db_type or config.httpdb.db_type
23
- if db_type == "filedb":
24
- return None
25
- else:
26
- return sqldb_create_session()
20
+ def create_session() -> Session:
21
+ return sqldb_create_session()
27
22
 
28
23
 
29
24
  def close_session(db_session):
30
-
31
- # will be None when it's filedb session
32
- if db_session is not None:
33
- db_session.close()
25
+ db_session.close()
34
26
 
35
27
 
36
28
  def run_function_with_new_db_session(func):
@@ -1,4 +1,4 @@
1
- # Copyright 2018 Iguazio
1
+ # Copyright 2023 Iguazio
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.