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
@@ -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.
@@ -23,32 +23,30 @@ from fastapi.concurrency import run_in_threadpool
23
23
  from sqlalchemy.orm import Session
24
24
 
25
25
  import mlrun.api.crud
26
- import mlrun.api.schemas
27
26
  import mlrun.api.utils.auth.verifier
27
+ import mlrun.api.utils.singletons.k8s
28
+ import mlrun.common.schemas
28
29
  import mlrun.errors
29
30
  from mlrun.api.api import deps
30
31
  from mlrun.api.api.utils import log_and_raise
31
32
  from mlrun.config import config
32
- from mlrun.k8s_utils import get_k8s_helper
33
33
  from mlrun.utils import logger
34
34
 
35
- router = APIRouter()
35
+ router = APIRouter(prefix="/projects/{project}/pipelines")
36
36
 
37
37
 
38
- @router.get(
39
- "/projects/{project}/pipelines", response_model=mlrun.api.schemas.PipelinesOutput
40
- )
38
+ @router.get("", response_model=mlrun.common.schemas.PipelinesOutput)
41
39
  async def list_pipelines(
42
40
  project: str,
43
41
  namespace: str = None,
44
42
  sort_by: str = "",
45
43
  page_token: str = "",
46
44
  filter_: str = Query("", alias="filter"),
47
- format_: mlrun.api.schemas.PipelinesFormat = Query(
48
- mlrun.api.schemas.PipelinesFormat.metadata_only, alias="format"
45
+ format_: mlrun.common.schemas.PipelinesFormat = Query(
46
+ mlrun.common.schemas.PipelinesFormat.metadata_only, alias="format"
49
47
  ),
50
48
  page_size: int = Query(None, gt=0, le=200),
51
- auth_info: mlrun.api.schemas.AuthInfo = Depends(
49
+ auth_info: mlrun.common.schemas.AuthInfo = Depends(
52
50
  mlrun.api.api.deps.authenticate_request
53
51
  ),
54
52
  db_session: Session = Depends(deps.get_db_session),
@@ -58,16 +56,18 @@ async def list_pipelines(
58
56
  if project != "*":
59
57
  await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_permissions(
60
58
  project,
61
- mlrun.api.schemas.AuthorizationAction.read,
59
+ mlrun.common.schemas.AuthorizationAction.read,
62
60
  auth_info,
63
61
  )
64
62
  total_size, next_page_token, runs = None, None, []
65
- if get_k8s_helper(silent=True).is_running_inside_kubernetes_cluster():
63
+ if mlrun.api.utils.singletons.k8s.get_k8s_helper(
64
+ silent=True
65
+ ).is_running_inside_kubernetes_cluster():
66
66
  # we need to resolve the project from the returned run for the opa enforcement (project query param might be
67
67
  # "*"), so we can't really get back only the names here
68
68
  computed_format = (
69
- mlrun.api.schemas.PipelinesFormat.metadata_only
70
- if format_ == mlrun.api.schemas.PipelinesFormat.name_only
69
+ mlrun.common.schemas.PipelinesFormat.metadata_only
70
+ if format_ == mlrun.common.schemas.PipelinesFormat.name_only
71
71
  else format_
72
72
  )
73
73
  total_size, next_page_token, runs = await run_in_threadpool(
@@ -82,7 +82,7 @@ async def list_pipelines(
82
82
  page_size,
83
83
  )
84
84
  allowed_runs = await mlrun.api.utils.auth.verifier.AuthVerifier().filter_project_resources_by_permissions(
85
- mlrun.api.schemas.AuthorizationResourceTypes.pipeline,
85
+ mlrun.common.schemas.AuthorizationResourceTypes.pipeline,
86
86
  runs,
87
87
  lambda run: (
88
88
  run["project"],
@@ -90,23 +90,23 @@ async def list_pipelines(
90
90
  ),
91
91
  auth_info,
92
92
  )
93
- if format_ == mlrun.api.schemas.PipelinesFormat.name_only:
93
+ if format_ == mlrun.common.schemas.PipelinesFormat.name_only:
94
94
  allowed_runs = [run["name"] for run in allowed_runs]
95
- return mlrun.api.schemas.PipelinesOutput(
95
+ return mlrun.common.schemas.PipelinesOutput(
96
96
  runs=allowed_runs,
97
97
  total_size=total_size or 0,
98
98
  next_page_token=next_page_token or None,
99
99
  )
100
100
 
101
101
 
102
- @router.post("/projects/{project}/pipelines")
102
+ @router.post("")
103
103
  async def create_pipeline(
104
104
  project: str,
105
105
  request: Request,
106
106
  namespace: str = None,
107
107
  experiment_name: str = Query("Default", alias="experiment"),
108
108
  run_name: str = Query("", alias="run"),
109
- auth_info: mlrun.api.schemas.AuthInfo = Depends(
109
+ auth_info: mlrun.common.schemas.AuthInfo = Depends(
110
110
  mlrun.api.api.deps.authenticate_request
111
111
  ),
112
112
  ):
@@ -118,8 +118,76 @@ async def create_pipeline(
118
118
  return response
119
119
 
120
120
 
121
+ @router.get("/{run_id}")
122
+ async def get_pipeline(
123
+ run_id: str,
124
+ project: str,
125
+ namespace: str = Query(config.namespace),
126
+ format_: mlrun.common.schemas.PipelinesFormat = Query(
127
+ mlrun.common.schemas.PipelinesFormat.summary, alias="format"
128
+ ),
129
+ auth_info: mlrun.common.schemas.AuthInfo = Depends(
130
+ mlrun.api.api.deps.authenticate_request
131
+ ),
132
+ db_session: Session = Depends(deps.get_db_session),
133
+ ):
134
+ pipeline = await run_in_threadpool(
135
+ mlrun.api.crud.Pipelines().get_pipeline,
136
+ db_session,
137
+ run_id,
138
+ project,
139
+ namespace,
140
+ format_,
141
+ )
142
+ if project == "*":
143
+ # In some flows the user may use SDK functions that won't require them to specify the pipeline's project (for
144
+ # backwards compatibility reasons), so the client will just send * in the project, in that case we use the
145
+ # legacy flow in which we first get the pipeline, resolve the project out of it, and only then query permissions
146
+ # we don't use the return value from this function since the user may have asked for a different format than
147
+ # summary which is the one used inside
148
+ await _get_pipeline_without_project(db_session, auth_info, run_id, namespace)
149
+ else:
150
+ await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
151
+ mlrun.common.schemas.AuthorizationResourceTypes.pipeline,
152
+ project,
153
+ run_id,
154
+ mlrun.common.schemas.AuthorizationAction.read,
155
+ auth_info,
156
+ )
157
+ return pipeline
158
+
159
+
160
+ async def _get_pipeline_without_project(
161
+ db_session: Session,
162
+ auth_info: mlrun.common.schemas.AuthInfo,
163
+ run_id: str,
164
+ namespace: str,
165
+ ):
166
+ """
167
+ This function is for when we receive a get pipeline request without the client specifying the project
168
+ So we first get the pipeline, resolve the project out of it, and now that we know the project, we can verify
169
+ permissions
170
+ """
171
+ run = await run_in_threadpool(
172
+ mlrun.api.crud.Pipelines().get_pipeline,
173
+ db_session,
174
+ run_id,
175
+ namespace=namespace,
176
+ # minimal format that includes the project
177
+ format_=mlrun.common.schemas.PipelinesFormat.summary,
178
+ )
179
+ await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
180
+ mlrun.common.schemas.AuthorizationResourceTypes.pipeline,
181
+ run["run"]["project"],
182
+ run["run"]["id"],
183
+ mlrun.common.schemas.AuthorizationAction.read,
184
+ auth_info,
185
+ )
186
+ return run
187
+
188
+
121
189
  async def _create_pipeline(
122
- auth_info: mlrun.api.schemas.AuthInfo,
190
+ auth_info: mlrun.common.schemas.AuthInfo,
123
191
  request: Request,
124
192
  namespace: str,
125
193
  experiment_name: str,
@@ -129,10 +197,10 @@ async def _create_pipeline(
129
197
  # If we have the project (new clients from 0.7.0 uses the new endpoint in which it's mandatory) - check auth now
130
198
  if project:
131
199
  await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
132
- mlrun.api.schemas.AuthorizationResourceTypes.pipeline,
200
+ mlrun.common.schemas.AuthorizationResourceTypes.pipeline,
133
201
  project,
134
202
  "",
135
- mlrun.api.schemas.AuthorizationAction.create,
203
+ mlrun.common.schemas.AuthorizationAction.create,
136
204
  auth_info,
137
205
  )
138
206
  run_name = run_name or experiment_name + " " + datetime.now().strftime(
@@ -153,16 +221,16 @@ async def _create_pipeline(
153
221
  )
154
222
  else:
155
223
  await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
156
- mlrun.api.schemas.AuthorizationResourceTypes.pipeline,
224
+ mlrun.common.schemas.AuthorizationResourceTypes.pipeline,
157
225
  project,
158
226
  "",
159
- mlrun.api.schemas.AuthorizationAction.create,
227
+ mlrun.common.schemas.AuthorizationAction.create,
160
228
  auth_info,
161
229
  )
162
230
 
163
231
  arguments = {}
164
232
  arguments_data = request.headers.get(
165
- mlrun.api.schemas.HeaderNames.pipeline_arguments
233
+ mlrun.common.schemas.HeaderNames.pipeline_arguments
166
234
  )
167
235
  if arguments_data:
168
236
  arguments = ast.literal_eval(arguments_data)
@@ -196,66 +264,3 @@ def _try_resolve_project_from_body(
196
264
  return mlrun.api.crud.Pipelines().resolve_project_from_workflow_manifest(
197
265
  workflow_manifest
198
266
  )
199
-
200
-
201
- @router.get("/projects/{project}/pipelines/{run_id}")
202
- async def get_pipeline(
203
- run_id: str,
204
- project: str,
205
- namespace: str = Query(config.namespace),
206
- format_: mlrun.api.schemas.PipelinesFormat = Query(
207
- mlrun.api.schemas.PipelinesFormat.summary, alias="format"
208
- ),
209
- auth_info: mlrun.api.schemas.AuthInfo = Depends(
210
- mlrun.api.api.deps.authenticate_request
211
- ),
212
- db_session: Session = Depends(deps.get_db_session),
213
- ):
214
- pipeline = mlrun.api.crud.Pipelines().get_pipeline(
215
- db_session, run_id, project, namespace, format_
216
- )
217
- if project == "*":
218
- # In some flows the user may use SDK functions that won't require them to specify the pipeline's project (for
219
- # backwards compatibility reasons), so the client will just send * in the project, in that case we use the
220
- # legacy flow in which we first get the pipeline, resolve the project out of it, and only then query permissions
221
- # we don't use the return value from this function since the user may have asked for a different format than
222
- # summary which is the one used inside
223
- await _get_pipeline_without_project(db_session, auth_info, run_id, namespace)
224
- else:
225
- await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
226
- mlrun.api.schemas.AuthorizationResourceTypes.pipeline,
227
- project,
228
- run_id,
229
- mlrun.api.schemas.AuthorizationAction.read,
230
- auth_info,
231
- )
232
- return pipeline
233
-
234
-
235
- async def _get_pipeline_without_project(
236
- db_session: Session,
237
- auth_info: mlrun.api.schemas.AuthInfo,
238
- run_id: str,
239
- namespace: str,
240
- ):
241
- """
242
- This function is for when we receive a get pipeline request without the client specifying the project
243
- So we first get the pipeline, resolve the project out of it, and now that we know the project, we can verify
244
- permissions
245
- """
246
- run = await run_in_threadpool(
247
- mlrun.api.crud.Pipelines().get_pipeline,
248
- db_session,
249
- run_id,
250
- namespace=namespace,
251
- # minimal format that includes the project
252
- format_=mlrun.api.schemas.PipelinesFormat.summary,
253
- )
254
- await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
255
- mlrun.api.schemas.AuthorizationResourceTypes.pipeline,
256
- run["run"]["project"],
257
- run["run"]["id"],
258
- mlrun.api.schemas.AuthorizationAction.read,
259
- auth_info,
260
- )
261
- return run
@@ -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.
@@ -20,9 +20,9 @@ import sqlalchemy.orm
20
20
  from fastapi.concurrency import run_in_threadpool
21
21
 
22
22
  import mlrun.api.api.deps
23
- import mlrun.api.schemas
24
23
  import mlrun.api.utils.auth.verifier
25
24
  import mlrun.api.utils.clients.chief
25
+ import mlrun.common.schemas
26
26
  from mlrun.api.utils.singletons.project_member import get_project_member
27
27
  from mlrun.utils import logger
28
28
 
@@ -32,17 +32,17 @@ router = fastapi.APIRouter()
32
32
  @router.post(
33
33
  "/projects",
34
34
  responses={
35
- http.HTTPStatus.CREATED.value: {"model": mlrun.api.schemas.Project},
35
+ http.HTTPStatus.CREATED.value: {"model": mlrun.common.schemas.Project},
36
36
  http.HTTPStatus.ACCEPTED.value: {},
37
37
  },
38
38
  )
39
39
  def create_project(
40
- project: mlrun.api.schemas.Project,
40
+ project: mlrun.common.schemas.Project,
41
41
  response: fastapi.Response,
42
42
  # TODO: we're in a http request context here, therefore it doesn't make sense that by default it will hold the
43
43
  # request until the process will be completed - after UI supports waiting - change default to False
44
44
  wait_for_completion: bool = fastapi.Query(True, alias="wait-for-completion"),
45
- auth_info: mlrun.api.schemas.AuthInfo = fastapi.Depends(
45
+ auth_info: mlrun.common.schemas.AuthInfo = fastapi.Depends(
46
46
  mlrun.api.api.deps.authenticate_request
47
47
  ),
48
48
  db_session: sqlalchemy.orm.Session = fastapi.Depends(
@@ -65,17 +65,17 @@ def create_project(
65
65
  @router.put(
66
66
  "/projects/{name}",
67
67
  responses={
68
- http.HTTPStatus.OK.value: {"model": mlrun.api.schemas.Project},
68
+ http.HTTPStatus.OK.value: {"model": mlrun.common.schemas.Project},
69
69
  http.HTTPStatus.ACCEPTED.value: {},
70
70
  },
71
71
  )
72
72
  def store_project(
73
- project: mlrun.api.schemas.Project,
73
+ project: mlrun.common.schemas.Project,
74
74
  name: str,
75
75
  # TODO: we're in a http request context here, therefore it doesn't make sense that by default it will hold the
76
76
  # request until the process will be completed - after UI supports waiting - change default to False
77
77
  wait_for_completion: bool = fastapi.Query(True, alias="wait-for-completion"),
78
- auth_info: mlrun.api.schemas.AuthInfo = fastapi.Depends(
78
+ auth_info: mlrun.common.schemas.AuthInfo = fastapi.Depends(
79
79
  mlrun.api.api.deps.authenticate_request
80
80
  ),
81
81
  db_session: sqlalchemy.orm.Session = fastapi.Depends(
@@ -98,21 +98,21 @@ def store_project(
98
98
  @router.patch(
99
99
  "/projects/{name}",
100
100
  responses={
101
- http.HTTPStatus.OK.value: {"model": mlrun.api.schemas.Project},
101
+ http.HTTPStatus.OK.value: {"model": mlrun.common.schemas.Project},
102
102
  http.HTTPStatus.ACCEPTED.value: {},
103
103
  },
104
104
  )
105
105
  def patch_project(
106
106
  project: dict,
107
107
  name: str,
108
- patch_mode: mlrun.api.schemas.PatchMode = fastapi.Header(
109
- mlrun.api.schemas.PatchMode.replace,
110
- alias=mlrun.api.schemas.HeaderNames.patch_mode,
108
+ patch_mode: mlrun.common.schemas.PatchMode = fastapi.Header(
109
+ mlrun.common.schemas.PatchMode.replace,
110
+ alias=mlrun.common.schemas.HeaderNames.patch_mode,
111
111
  ),
112
112
  # TODO: we're in a http request context here, therefore it doesn't make sense that by default it will hold the
113
113
  # request until the process will be completed - after UI supports waiting - change default to False
114
114
  wait_for_completion: bool = fastapi.Query(True, alias="wait-for-completion"),
115
- auth_info: mlrun.api.schemas.AuthInfo = fastapi.Depends(
115
+ auth_info: mlrun.common.schemas.AuthInfo = fastapi.Depends(
116
116
  mlrun.api.api.deps.authenticate_request
117
117
  ),
118
118
  db_session: sqlalchemy.orm.Session = fastapi.Depends(
@@ -133,13 +133,13 @@ def patch_project(
133
133
  return project
134
134
 
135
135
 
136
- @router.get("/projects/{name}", response_model=mlrun.api.schemas.Project)
136
+ @router.get("/projects/{name}", response_model=mlrun.common.schemas.Project)
137
137
  async def get_project(
138
138
  name: str,
139
139
  db_session: sqlalchemy.orm.Session = fastapi.Depends(
140
140
  mlrun.api.api.deps.get_db_session
141
141
  ),
142
- auth_info: mlrun.api.schemas.AuthInfo = fastapi.Depends(
142
+ auth_info: mlrun.common.schemas.AuthInfo = fastapi.Depends(
143
143
  mlrun.api.api.deps.authenticate_request
144
144
  ),
145
145
  ):
@@ -150,7 +150,7 @@ async def get_project(
150
150
  if not _is_request_from_leader(auth_info.projects_role):
151
151
  await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_permissions(
152
152
  name,
153
- mlrun.api.schemas.AuthorizationAction.read,
153
+ mlrun.common.schemas.AuthorizationAction.read,
154
154
  auth_info,
155
155
  )
156
156
  return project
@@ -166,14 +166,14 @@ async def get_project(
166
166
  async def delete_project(
167
167
  name: str,
168
168
  request: fastapi.Request,
169
- deletion_strategy: mlrun.api.schemas.DeletionStrategy = fastapi.Header(
170
- mlrun.api.schemas.DeletionStrategy.default(),
171
- alias=mlrun.api.schemas.HeaderNames.deletion_strategy,
169
+ deletion_strategy: mlrun.common.schemas.DeletionStrategy = fastapi.Header(
170
+ mlrun.common.schemas.DeletionStrategy.default(),
171
+ alias=mlrun.common.schemas.HeaderNames.deletion_strategy,
172
172
  ),
173
173
  # TODO: we're in a http request context here, therefore it doesn't make sense that by default it will hold the
174
174
  # request until the process will be completed - after UI supports waiting - change default to False
175
175
  wait_for_completion: bool = fastapi.Query(True, alias="wait-for-completion"),
176
- auth_info: mlrun.api.schemas.AuthInfo = fastapi.Depends(
176
+ auth_info: mlrun.common.schemas.AuthInfo = fastapi.Depends(
177
177
  mlrun.api.api.deps.authenticate_request
178
178
  ),
179
179
  db_session: sqlalchemy.orm.Session = fastapi.Depends(
@@ -184,7 +184,7 @@ async def delete_project(
184
184
  # that is why we re-route requests to chief
185
185
  if (
186
186
  mlrun.mlconf.httpdb.clusterization.role
187
- != mlrun.api.schemas.ClusterizationRole.chief
187
+ != mlrun.common.schemas.ClusterizationRole.chief
188
188
  ):
189
189
  logger.info(
190
190
  "Requesting to delete project, re-routing to chief",
@@ -209,15 +209,15 @@ async def delete_project(
209
209
  return fastapi.Response(status_code=http.HTTPStatus.NO_CONTENT.value)
210
210
 
211
211
 
212
- @router.get("/projects", response_model=mlrun.api.schemas.ProjectsOutput)
212
+ @router.get("/projects", response_model=mlrun.common.schemas.ProjectsOutput)
213
213
  async def list_projects(
214
- format_: mlrun.api.schemas.ProjectsFormat = fastapi.Query(
215
- mlrun.api.schemas.ProjectsFormat.full, alias="format"
214
+ format_: mlrun.common.schemas.ProjectsFormat = fastapi.Query(
215
+ mlrun.common.schemas.ProjectsFormat.full, alias="format"
216
216
  ),
217
217
  owner: str = None,
218
218
  labels: typing.List[str] = fastapi.Query(None, alias="label"),
219
- state: mlrun.api.schemas.ProjectState = None,
220
- auth_info: mlrun.api.schemas.AuthInfo = fastapi.Depends(
219
+ state: mlrun.common.schemas.ProjectState = None,
220
+ auth_info: mlrun.common.schemas.AuthInfo = fastapi.Depends(
221
221
  mlrun.api.api.deps.authenticate_request
222
222
  ),
223
223
  db_session: sqlalchemy.orm.Session = fastapi.Depends(
@@ -231,7 +231,7 @@ async def list_projects(
231
231
  get_project_member().list_projects,
232
232
  db_session,
233
233
  owner,
234
- mlrun.api.schemas.ProjectsFormat.name_only,
234
+ mlrun.common.schemas.ProjectsFormat.name_only,
235
235
  labels,
236
236
  state,
237
237
  auth_info.projects_role,
@@ -257,13 +257,13 @@ async def list_projects(
257
257
 
258
258
 
259
259
  @router.get(
260
- "/project-summaries", response_model=mlrun.api.schemas.ProjectSummariesOutput
260
+ "/project-summaries", response_model=mlrun.common.schemas.ProjectSummariesOutput
261
261
  )
262
262
  async def list_project_summaries(
263
263
  owner: str = None,
264
264
  labels: typing.List[str] = fastapi.Query(None, alias="label"),
265
- state: mlrun.api.schemas.ProjectState = None,
266
- auth_info: mlrun.api.schemas.AuthInfo = fastapi.Depends(
265
+ state: mlrun.common.schemas.ProjectState = None,
266
+ auth_info: mlrun.common.schemas.AuthInfo = fastapi.Depends(
267
267
  mlrun.api.api.deps.authenticate_request
268
268
  ),
269
269
  db_session: sqlalchemy.orm.Session = fastapi.Depends(
@@ -274,7 +274,7 @@ async def list_project_summaries(
274
274
  get_project_member().list_projects,
275
275
  db_session,
276
276
  owner,
277
- mlrun.api.schemas.ProjectsFormat.name_only,
277
+ mlrun.common.schemas.ProjectsFormat.name_only,
278
278
  labels,
279
279
  state,
280
280
  auth_info.projects_role,
@@ -299,14 +299,14 @@ async def list_project_summaries(
299
299
 
300
300
 
301
301
  @router.get(
302
- "/project-summaries/{name}", response_model=mlrun.api.schemas.ProjectSummary
302
+ "/project-summaries/{name}", response_model=mlrun.common.schemas.ProjectSummary
303
303
  )
304
304
  async def get_project_summary(
305
305
  name: str,
306
306
  db_session: sqlalchemy.orm.Session = fastapi.Depends(
307
307
  mlrun.api.api.deps.get_db_session
308
308
  ),
309
- auth_info: mlrun.api.schemas.AuthInfo = fastapi.Depends(
309
+ auth_info: mlrun.common.schemas.AuthInfo = fastapi.Depends(
310
310
  mlrun.api.api.deps.authenticate_request
311
311
  ),
312
312
  ):
@@ -317,14 +317,14 @@ async def get_project_summary(
317
317
  if not _is_request_from_leader(auth_info.projects_role):
318
318
  await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_permissions(
319
319
  name,
320
- mlrun.api.schemas.AuthorizationAction.read,
320
+ mlrun.common.schemas.AuthorizationAction.read,
321
321
  auth_info,
322
322
  )
323
323
  return project_summary
324
324
 
325
325
 
326
326
  def _is_request_from_leader(
327
- projects_role: typing.Optional[mlrun.api.schemas.ProjectsRole],
327
+ projects_role: typing.Optional[mlrun.common.schemas.ProjectsRole],
328
328
  ) -> bool:
329
329
  if projects_role and projects_role.value == mlrun.mlconf.httpdb.projects.leader:
330
330
  return True