mlrun 1.3.3rc1__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.
- mlrun/__init__.py +3 -3
- mlrun/__main__.py +79 -37
- mlrun/api/__init__.py +1 -1
- mlrun/api/api/__init__.py +1 -1
- mlrun/api/api/api.py +4 -4
- mlrun/api/api/deps.py +10 -21
- mlrun/api/api/endpoints/__init__.py +1 -1
- mlrun/api/api/endpoints/artifacts.py +64 -36
- mlrun/api/api/endpoints/auth.py +4 -4
- mlrun/api/api/endpoints/background_tasks.py +11 -11
- mlrun/api/api/endpoints/client_spec.py +5 -5
- mlrun/api/api/endpoints/clusterization_spec.py +6 -4
- mlrun/api/api/endpoints/feature_store.py +124 -115
- mlrun/api/api/endpoints/files.py +22 -14
- mlrun/api/api/endpoints/frontend_spec.py +28 -21
- mlrun/api/api/endpoints/functions.py +142 -87
- mlrun/api/api/endpoints/grafana_proxy.py +89 -442
- mlrun/api/api/endpoints/healthz.py +20 -7
- mlrun/api/api/endpoints/hub.py +320 -0
- mlrun/api/api/endpoints/internal/__init__.py +1 -1
- mlrun/api/api/endpoints/internal/config.py +1 -1
- mlrun/api/api/endpoints/internal/memory_reports.py +9 -9
- mlrun/api/api/endpoints/logs.py +11 -11
- mlrun/api/api/endpoints/model_endpoints.py +74 -70
- mlrun/api/api/endpoints/operations.py +13 -9
- mlrun/api/api/endpoints/pipelines.py +93 -88
- mlrun/api/api/endpoints/projects.py +35 -35
- mlrun/api/api/endpoints/runs.py +69 -27
- mlrun/api/api/endpoints/runtime_resources.py +28 -28
- mlrun/api/api/endpoints/schedules.py +98 -41
- mlrun/api/api/endpoints/secrets.py +37 -32
- mlrun/api/api/endpoints/submit.py +12 -12
- mlrun/api/api/endpoints/tags.py +20 -22
- mlrun/api/api/utils.py +251 -42
- mlrun/api/constants.py +1 -1
- mlrun/api/crud/__init__.py +18 -15
- mlrun/api/crud/artifacts.py +10 -10
- mlrun/api/crud/client_spec.py +4 -4
- mlrun/api/crud/clusterization_spec.py +3 -3
- mlrun/api/crud/feature_store.py +54 -46
- mlrun/api/crud/functions.py +3 -3
- mlrun/api/crud/hub.py +312 -0
- mlrun/api/crud/logs.py +11 -9
- mlrun/api/crud/model_monitoring/__init__.py +3 -3
- mlrun/api/crud/model_monitoring/grafana.py +435 -0
- mlrun/api/crud/model_monitoring/model_endpoints.py +352 -129
- mlrun/api/crud/notifications.py +149 -0
- mlrun/api/crud/pipelines.py +67 -52
- mlrun/api/crud/projects.py +51 -23
- mlrun/api/crud/runs.py +7 -5
- mlrun/api/crud/runtime_resources.py +13 -13
- mlrun/api/{db/filedb → crud/runtimes}/__init__.py +1 -1
- mlrun/api/crud/runtimes/nuclio/__init__.py +14 -0
- mlrun/api/crud/runtimes/nuclio/function.py +505 -0
- mlrun/api/crud/runtimes/nuclio/helpers.py +310 -0
- mlrun/api/crud/secrets.py +88 -46
- mlrun/api/crud/tags.py +5 -5
- mlrun/api/db/__init__.py +1 -1
- mlrun/api/db/base.py +102 -54
- mlrun/api/db/init_db.py +2 -3
- mlrun/api/db/session.py +4 -12
- mlrun/api/db/sqldb/__init__.py +1 -1
- mlrun/api/db/sqldb/db.py +439 -196
- mlrun/api/db/sqldb/helpers.py +1 -1
- mlrun/api/db/sqldb/models/__init__.py +3 -3
- mlrun/api/db/sqldb/models/models_mysql.py +82 -64
- mlrun/api/db/sqldb/models/models_sqlite.py +76 -64
- mlrun/api/db/sqldb/session.py +27 -20
- mlrun/api/initial_data.py +82 -24
- mlrun/api/launcher.py +196 -0
- mlrun/api/main.py +91 -22
- mlrun/api/middlewares.py +6 -5
- mlrun/api/migrations_mysql/env.py +1 -1
- mlrun/api/migrations_mysql/versions/28383af526f3_market_place_to_hub.py +40 -0
- mlrun/api/migrations_mysql/versions/32bae1b0e29c_increase_timestamp_fields_precision.py +1 -1
- mlrun/api/migrations_mysql/versions/4903aef6a91d_tag_foreign_key_and_cascades.py +1 -1
- mlrun/api/migrations_mysql/versions/5f1351c88a19_adding_background_tasks_table.py +1 -1
- mlrun/api/migrations_mysql/versions/88e656800d6a_add_requested_logs_column_and_index_to_.py +1 -1
- mlrun/api/migrations_mysql/versions/9d16de5f03a7_adding_data_versions_table.py +1 -1
- mlrun/api/migrations_mysql/versions/b86f5b53f3d7_adding_name_and_updated_to_runs_table.py +1 -1
- mlrun/api/migrations_mysql/versions/c4af40b0bf61_init.py +1 -1
- mlrun/api/migrations_mysql/versions/c905d15bd91d_notifications.py +72 -0
- mlrun/api/migrations_mysql/versions/ee041e8fdaa0_adding_next_run_time_column_to_schedule_.py +1 -1
- mlrun/api/migrations_sqlite/env.py +1 -1
- mlrun/api/migrations_sqlite/versions/11f8dd2dc9fe_init.py +1 -1
- mlrun/api/migrations_sqlite/versions/1c954f8cb32d_schedule_last_run_uri.py +1 -1
- mlrun/api/migrations_sqlite/versions/2b6d23c715aa_adding_feature_sets.py +1 -1
- mlrun/api/migrations_sqlite/versions/4acd9430b093_market_place_to_hub.py +77 -0
- mlrun/api/migrations_sqlite/versions/6401142f2d7c_adding_next_run_time_column_to_schedule_.py +1 -1
- mlrun/api/migrations_sqlite/versions/64d90a1a69bc_adding_background_tasks_table.py +1 -1
- mlrun/api/migrations_sqlite/versions/803438ecd005_add_requested_logs_column_to_runs.py +1 -1
- mlrun/api/migrations_sqlite/versions/863114f0c659_refactoring_feature_set.py +1 -1
- mlrun/api/migrations_sqlite/versions/959ae00528ad_notifications.py +63 -0
- mlrun/api/migrations_sqlite/versions/accf9fc83d38_adding_data_versions_table.py +1 -1
- mlrun/api/migrations_sqlite/versions/b68e8e897a28_schedule_labels.py +1 -1
- mlrun/api/migrations_sqlite/versions/bcd0c1f9720c_adding_project_labels.py +1 -1
- mlrun/api/migrations_sqlite/versions/cf21882f938e_schedule_id.py +1 -1
- mlrun/api/migrations_sqlite/versions/d781f58f607f_tag_object_name_string.py +1 -1
- mlrun/api/migrations_sqlite/versions/deac06871ace_adding_marketplace_sources_table.py +1 -1
- mlrun/api/migrations_sqlite/versions/e1dd5983c06b_schedule_concurrency_limit.py +1 -1
- mlrun/api/migrations_sqlite/versions/e5594ed3ab53_adding_name_and_updated_to_runs_table.py +1 -1
- mlrun/api/migrations_sqlite/versions/f4249b4ba6fa_adding_feature_vectors.py +1 -1
- mlrun/api/migrations_sqlite/versions/f7b5a1a03629_adding_feature_labels.py +1 -1
- mlrun/api/schemas/__init__.py +216 -138
- mlrun/api/utils/__init__.py +1 -1
- mlrun/api/utils/asyncio.py +1 -1
- mlrun/api/utils/auth/__init__.py +1 -1
- mlrun/api/utils/auth/providers/__init__.py +1 -1
- mlrun/api/utils/auth/providers/base.py +7 -7
- mlrun/api/utils/auth/providers/nop.py +6 -7
- mlrun/api/utils/auth/providers/opa.py +17 -17
- mlrun/api/utils/auth/verifier.py +36 -34
- mlrun/api/utils/background_tasks.py +24 -24
- mlrun/{builder.py → api/utils/builder.py} +216 -123
- mlrun/api/utils/clients/__init__.py +1 -1
- mlrun/api/utils/clients/chief.py +19 -4
- mlrun/api/utils/clients/iguazio.py +106 -60
- mlrun/api/utils/clients/log_collector.py +1 -1
- mlrun/api/utils/clients/nuclio.py +23 -23
- mlrun/api/utils/clients/protocols/grpc.py +2 -2
- mlrun/api/utils/db/__init__.py +1 -1
- mlrun/api/utils/db/alembic.py +1 -1
- mlrun/api/utils/db/backup.py +1 -1
- mlrun/api/utils/db/mysql.py +24 -25
- mlrun/api/utils/db/sql_collation.py +1 -1
- mlrun/api/utils/db/sqlite_migration.py +2 -2
- mlrun/api/utils/events/__init__.py +14 -0
- mlrun/api/utils/events/base.py +57 -0
- mlrun/api/utils/events/events_factory.py +41 -0
- mlrun/api/utils/events/iguazio.py +217 -0
- mlrun/api/utils/events/nop.py +55 -0
- mlrun/api/utils/helpers.py +16 -13
- mlrun/api/utils/memory_reports.py +1 -1
- mlrun/api/utils/periodic.py +6 -3
- mlrun/api/utils/projects/__init__.py +1 -1
- mlrun/api/utils/projects/follower.py +33 -33
- mlrun/api/utils/projects/leader.py +36 -34
- mlrun/api/utils/projects/member.py +27 -27
- mlrun/api/utils/projects/remotes/__init__.py +1 -1
- mlrun/api/utils/projects/remotes/follower.py +13 -13
- mlrun/api/utils/projects/remotes/leader.py +10 -10
- mlrun/api/utils/projects/remotes/nop_follower.py +27 -21
- mlrun/api/utils/projects/remotes/nop_leader.py +17 -16
- mlrun/api/utils/scheduler.py +140 -51
- mlrun/api/utils/singletons/__init__.py +1 -1
- mlrun/api/utils/singletons/db.py +9 -15
- mlrun/api/utils/singletons/k8s.py +677 -5
- mlrun/api/utils/singletons/logs_dir.py +1 -1
- mlrun/api/utils/singletons/project_member.py +1 -1
- mlrun/api/utils/singletons/scheduler.py +1 -1
- mlrun/artifacts/__init__.py +2 -2
- mlrun/artifacts/base.py +8 -2
- mlrun/artifacts/dataset.py +5 -3
- mlrun/artifacts/manager.py +7 -1
- mlrun/artifacts/model.py +15 -4
- mlrun/artifacts/plots.py +1 -1
- mlrun/common/__init__.py +1 -1
- mlrun/common/constants.py +15 -0
- mlrun/common/model_monitoring.py +209 -0
- mlrun/common/schemas/__init__.py +167 -0
- mlrun/{api → common}/schemas/artifact.py +13 -14
- mlrun/{api → common}/schemas/auth.py +10 -8
- mlrun/{api → common}/schemas/background_task.py +3 -3
- mlrun/{api → common}/schemas/client_spec.py +1 -1
- mlrun/{api → common}/schemas/clusterization_spec.py +3 -3
- mlrun/{api → common}/schemas/constants.py +21 -8
- mlrun/common/schemas/events.py +36 -0
- mlrun/{api → common}/schemas/feature_store.py +2 -1
- mlrun/{api → common}/schemas/frontend_spec.py +7 -6
- mlrun/{api → common}/schemas/function.py +5 -5
- mlrun/{api → common}/schemas/http.py +3 -3
- mlrun/common/schemas/hub.py +134 -0
- mlrun/{api → common}/schemas/k8s.py +3 -3
- mlrun/{api → common}/schemas/memory_reports.py +1 -1
- mlrun/common/schemas/model_endpoints.py +342 -0
- mlrun/common/schemas/notification.py +57 -0
- mlrun/{api → common}/schemas/object.py +6 -6
- mlrun/{api → common}/schemas/pipeline.py +3 -3
- mlrun/{api → common}/schemas/project.py +6 -5
- mlrun/common/schemas/regex.py +24 -0
- mlrun/common/schemas/runs.py +30 -0
- mlrun/{api → common}/schemas/runtime_resource.py +3 -3
- mlrun/{api → common}/schemas/schedule.py +19 -7
- mlrun/{api → common}/schemas/secret.py +3 -3
- mlrun/{api → common}/schemas/tag.py +2 -2
- mlrun/common/types.py +25 -0
- mlrun/config.py +152 -20
- mlrun/data_types/__init__.py +7 -2
- mlrun/data_types/data_types.py +4 -2
- mlrun/data_types/infer.py +1 -1
- mlrun/data_types/spark.py +10 -3
- mlrun/datastore/__init__.py +10 -3
- mlrun/datastore/azure_blob.py +1 -1
- mlrun/datastore/base.py +185 -53
- mlrun/datastore/datastore.py +1 -1
- mlrun/datastore/filestore.py +1 -1
- mlrun/datastore/google_cloud_storage.py +1 -1
- mlrun/datastore/inmem.py +4 -1
- mlrun/datastore/redis.py +1 -1
- mlrun/datastore/s3.py +1 -1
- mlrun/datastore/sources.py +192 -70
- mlrun/datastore/spark_udf.py +44 -0
- mlrun/datastore/store_resources.py +4 -4
- mlrun/datastore/targets.py +115 -45
- mlrun/datastore/utils.py +127 -5
- mlrun/datastore/v3io.py +1 -1
- mlrun/datastore/wasbfs/__init__.py +1 -1
- mlrun/datastore/wasbfs/fs.py +1 -1
- mlrun/db/__init__.py +7 -5
- mlrun/db/base.py +112 -68
- mlrun/db/httpdb.py +445 -277
- mlrun/db/nopdb.py +491 -0
- mlrun/db/sqldb.py +112 -65
- mlrun/errors.py +6 -1
- mlrun/execution.py +44 -22
- mlrun/feature_store/__init__.py +1 -1
- mlrun/feature_store/api.py +143 -95
- mlrun/feature_store/common.py +16 -20
- mlrun/feature_store/feature_set.py +42 -12
- mlrun/feature_store/feature_vector.py +32 -21
- mlrun/feature_store/ingestion.py +9 -12
- mlrun/feature_store/retrieval/__init__.py +3 -2
- mlrun/feature_store/retrieval/base.py +388 -66
- mlrun/feature_store/retrieval/dask_merger.py +63 -151
- mlrun/feature_store/retrieval/job.py +30 -12
- mlrun/feature_store/retrieval/local_merger.py +40 -133
- mlrun/feature_store/retrieval/spark_merger.py +129 -127
- mlrun/feature_store/retrieval/storey_merger.py +173 -0
- mlrun/feature_store/steps.py +132 -15
- mlrun/features.py +8 -3
- mlrun/frameworks/__init__.py +1 -1
- mlrun/frameworks/_common/__init__.py +1 -1
- mlrun/frameworks/_common/artifacts_library.py +1 -1
- mlrun/frameworks/_common/mlrun_interface.py +1 -1
- mlrun/frameworks/_common/model_handler.py +1 -1
- mlrun/frameworks/_common/plan.py +1 -1
- mlrun/frameworks/_common/producer.py +1 -1
- mlrun/frameworks/_common/utils.py +1 -1
- mlrun/frameworks/_dl_common/__init__.py +1 -1
- mlrun/frameworks/_dl_common/loggers/__init__.py +1 -1
- mlrun/frameworks/_dl_common/loggers/logger.py +1 -1
- mlrun/frameworks/_dl_common/loggers/mlrun_logger.py +1 -1
- mlrun/frameworks/_dl_common/loggers/tensorboard_logger.py +1 -1
- mlrun/frameworks/_dl_common/model_handler.py +1 -1
- mlrun/frameworks/_dl_common/utils.py +1 -1
- mlrun/frameworks/_ml_common/__init__.py +1 -1
- mlrun/frameworks/_ml_common/artifacts_library.py +1 -1
- mlrun/frameworks/_ml_common/loggers/__init__.py +1 -1
- mlrun/frameworks/_ml_common/loggers/logger.py +1 -1
- mlrun/frameworks/_ml_common/loggers/mlrun_logger.py +1 -1
- mlrun/frameworks/_ml_common/model_handler.py +1 -1
- mlrun/frameworks/_ml_common/pkl_model_server.py +13 -1
- mlrun/frameworks/_ml_common/plan.py +1 -1
- mlrun/frameworks/_ml_common/plans/__init__.py +1 -1
- mlrun/frameworks/_ml_common/plans/calibration_curve_plan.py +1 -6
- mlrun/frameworks/_ml_common/plans/confusion_matrix_plan.py +1 -1
- mlrun/frameworks/_ml_common/plans/dataset_plan.py +1 -1
- mlrun/frameworks/_ml_common/plans/feature_importance_plan.py +1 -1
- mlrun/frameworks/_ml_common/plans/roc_curve_plan.py +1 -1
- mlrun/frameworks/_ml_common/producer.py +1 -1
- mlrun/frameworks/_ml_common/utils.py +1 -1
- mlrun/frameworks/auto_mlrun/__init__.py +1 -1
- mlrun/frameworks/auto_mlrun/auto_mlrun.py +1 -1
- mlrun/frameworks/huggingface/__init__.py +1 -1
- mlrun/frameworks/huggingface/model_server.py +1 -1
- mlrun/frameworks/lgbm/__init__.py +1 -1
- mlrun/frameworks/lgbm/callbacks/__init__.py +1 -1
- mlrun/frameworks/lgbm/callbacks/callback.py +1 -1
- mlrun/frameworks/lgbm/callbacks/logging_callback.py +1 -1
- mlrun/frameworks/lgbm/callbacks/mlrun_logging_callback.py +1 -1
- mlrun/frameworks/lgbm/mlrun_interfaces/__init__.py +1 -1
- mlrun/frameworks/lgbm/mlrun_interfaces/booster_mlrun_interface.py +1 -1
- mlrun/frameworks/lgbm/mlrun_interfaces/mlrun_interface.py +1 -1
- mlrun/frameworks/lgbm/mlrun_interfaces/model_mlrun_interface.py +1 -1
- mlrun/frameworks/lgbm/model_handler.py +1 -1
- mlrun/frameworks/lgbm/model_server.py +1 -1
- mlrun/frameworks/lgbm/utils.py +1 -1
- mlrun/frameworks/onnx/__init__.py +1 -1
- mlrun/frameworks/onnx/dataset.py +1 -1
- mlrun/frameworks/onnx/mlrun_interface.py +1 -1
- mlrun/frameworks/onnx/model_handler.py +1 -1
- mlrun/frameworks/onnx/model_server.py +1 -1
- mlrun/frameworks/parallel_coordinates.py +1 -1
- mlrun/frameworks/pytorch/__init__.py +1 -1
- mlrun/frameworks/pytorch/callbacks/__init__.py +1 -1
- mlrun/frameworks/pytorch/callbacks/callback.py +1 -1
- mlrun/frameworks/pytorch/callbacks/logging_callback.py +1 -1
- mlrun/frameworks/pytorch/callbacks/mlrun_logging_callback.py +1 -1
- mlrun/frameworks/pytorch/callbacks/tensorboard_logging_callback.py +1 -1
- mlrun/frameworks/pytorch/callbacks_handler.py +1 -1
- mlrun/frameworks/pytorch/mlrun_interface.py +1 -1
- mlrun/frameworks/pytorch/model_handler.py +1 -1
- mlrun/frameworks/pytorch/model_server.py +1 -1
- mlrun/frameworks/pytorch/utils.py +1 -1
- mlrun/frameworks/sklearn/__init__.py +1 -1
- mlrun/frameworks/sklearn/estimator.py +1 -1
- mlrun/frameworks/sklearn/metric.py +1 -1
- mlrun/frameworks/sklearn/metrics_library.py +1 -1
- mlrun/frameworks/sklearn/mlrun_interface.py +1 -1
- mlrun/frameworks/sklearn/model_handler.py +1 -1
- mlrun/frameworks/sklearn/utils.py +1 -1
- mlrun/frameworks/tf_keras/__init__.py +1 -1
- mlrun/frameworks/tf_keras/callbacks/__init__.py +1 -1
- mlrun/frameworks/tf_keras/callbacks/logging_callback.py +1 -1
- mlrun/frameworks/tf_keras/callbacks/mlrun_logging_callback.py +1 -1
- mlrun/frameworks/tf_keras/callbacks/tensorboard_logging_callback.py +1 -1
- mlrun/frameworks/tf_keras/mlrun_interface.py +1 -1
- mlrun/frameworks/tf_keras/model_handler.py +1 -1
- mlrun/frameworks/tf_keras/model_server.py +1 -1
- mlrun/frameworks/tf_keras/utils.py +1 -1
- mlrun/frameworks/xgboost/__init__.py +1 -1
- mlrun/frameworks/xgboost/mlrun_interface.py +1 -1
- mlrun/frameworks/xgboost/model_handler.py +1 -1
- mlrun/frameworks/xgboost/utils.py +1 -1
- mlrun/k8s_utils.py +14 -765
- mlrun/kfpops.py +14 -17
- mlrun/launcher/__init__.py +13 -0
- mlrun/launcher/base.py +406 -0
- mlrun/launcher/client.py +159 -0
- mlrun/launcher/factory.py +50 -0
- mlrun/launcher/local.py +276 -0
- mlrun/launcher/remote.py +178 -0
- mlrun/lists.py +10 -2
- mlrun/mlutils/__init__.py +1 -1
- mlrun/mlutils/data.py +1 -1
- mlrun/mlutils/models.py +1 -1
- mlrun/mlutils/plots.py +1 -1
- mlrun/model.py +252 -14
- mlrun/model_monitoring/__init__.py +41 -0
- mlrun/model_monitoring/features_drift_table.py +1 -1
- mlrun/model_monitoring/helpers.py +123 -38
- mlrun/model_monitoring/model_endpoint.py +144 -0
- mlrun/model_monitoring/model_monitoring_batch.py +310 -259
- mlrun/model_monitoring/stores/__init__.py +106 -0
- mlrun/model_monitoring/stores/kv_model_endpoint_store.py +448 -0
- mlrun/model_monitoring/stores/model_endpoint_store.py +147 -0
- mlrun/model_monitoring/stores/models/__init__.py +23 -0
- mlrun/model_monitoring/stores/models/base.py +18 -0
- mlrun/model_monitoring/stores/models/mysql.py +100 -0
- mlrun/model_monitoring/stores/models/sqlite.py +98 -0
- mlrun/model_monitoring/stores/sql_model_endpoint_store.py +370 -0
- mlrun/model_monitoring/stream_processing_fs.py +239 -271
- mlrun/package/__init__.py +163 -0
- mlrun/package/context_handler.py +325 -0
- mlrun/package/errors.py +47 -0
- mlrun/package/packager.py +298 -0
- mlrun/{runtimes/package → package/packagers}/__init__.py +3 -1
- mlrun/package/packagers/default_packager.py +422 -0
- mlrun/package/packagers/numpy_packagers.py +612 -0
- mlrun/package/packagers/pandas_packagers.py +968 -0
- mlrun/package/packagers/python_standard_library_packagers.py +616 -0
- mlrun/package/packagers_manager.py +786 -0
- mlrun/package/utils/__init__.py +53 -0
- mlrun/package/utils/_archiver.py +226 -0
- mlrun/package/utils/_formatter.py +211 -0
- mlrun/package/utils/_pickler.py +234 -0
- mlrun/package/utils/_supported_format.py +71 -0
- mlrun/package/utils/log_hint_utils.py +93 -0
- mlrun/package/utils/type_hint_utils.py +298 -0
- mlrun/platforms/__init__.py +1 -1
- mlrun/platforms/iguazio.py +34 -2
- mlrun/platforms/other.py +1 -1
- mlrun/projects/__init__.py +1 -1
- mlrun/projects/operations.py +14 -9
- mlrun/projects/pipelines.py +31 -13
- mlrun/projects/project.py +762 -238
- mlrun/render.py +49 -19
- mlrun/run.py +57 -326
- mlrun/runtimes/__init__.py +3 -9
- mlrun/runtimes/base.py +247 -784
- mlrun/runtimes/constants.py +1 -1
- mlrun/runtimes/daskjob.py +45 -41
- mlrun/runtimes/funcdoc.py +43 -7
- mlrun/runtimes/function.py +66 -656
- mlrun/runtimes/function_reference.py +1 -1
- mlrun/runtimes/generators.py +1 -1
- mlrun/runtimes/kubejob.py +99 -116
- mlrun/runtimes/local.py +59 -66
- mlrun/runtimes/mpijob/__init__.py +1 -1
- mlrun/runtimes/mpijob/abstract.py +13 -15
- mlrun/runtimes/mpijob/v1.py +3 -1
- mlrun/runtimes/mpijob/v1alpha1.py +1 -1
- mlrun/runtimes/nuclio.py +1 -1
- mlrun/runtimes/pod.py +51 -26
- mlrun/runtimes/remotesparkjob.py +3 -1
- mlrun/runtimes/serving.py +12 -4
- mlrun/runtimes/sparkjob/__init__.py +1 -2
- mlrun/runtimes/sparkjob/abstract.py +44 -31
- mlrun/runtimes/sparkjob/spark3job.py +11 -9
- mlrun/runtimes/utils.py +61 -42
- mlrun/secrets.py +16 -18
- mlrun/serving/__init__.py +3 -2
- mlrun/serving/merger.py +1 -1
- mlrun/serving/remote.py +1 -1
- mlrun/serving/routers.py +39 -42
- mlrun/serving/server.py +23 -13
- mlrun/serving/serving_wrapper.py +1 -1
- mlrun/serving/states.py +172 -39
- mlrun/serving/utils.py +1 -1
- mlrun/serving/v1_serving.py +1 -1
- mlrun/serving/v2_serving.py +29 -21
- mlrun/utils/__init__.py +1 -2
- mlrun/utils/async_http.py +8 -1
- mlrun/utils/azure_vault.py +1 -1
- mlrun/utils/clones.py +2 -2
- mlrun/utils/condition_evaluator.py +65 -0
- mlrun/utils/db.py +52 -0
- mlrun/utils/helpers.py +188 -13
- mlrun/utils/http.py +89 -54
- mlrun/utils/logger.py +48 -8
- mlrun/utils/model_monitoring.py +132 -100
- mlrun/utils/notifications/__init__.py +1 -1
- mlrun/utils/notifications/notification/__init__.py +8 -6
- mlrun/utils/notifications/notification/base.py +20 -14
- mlrun/utils/notifications/notification/console.py +7 -4
- mlrun/utils/notifications/notification/git.py +36 -19
- mlrun/utils/notifications/notification/ipython.py +10 -8
- mlrun/utils/notifications/notification/slack.py +18 -13
- mlrun/utils/notifications/notification_pusher.py +377 -56
- mlrun/utils/regex.py +6 -1
- mlrun/utils/singleton.py +1 -1
- mlrun/utils/v3io_clients.py +1 -1
- mlrun/utils/vault.py +270 -269
- mlrun/utils/version/__init__.py +1 -1
- mlrun/utils/version/version.json +2 -2
- mlrun/utils/version/version.py +1 -1
- {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/METADATA +16 -10
- mlrun-1.4.0.dist-info/RECORD +434 -0
- mlrun/api/api/endpoints/marketplace.py +0 -257
- mlrun/api/crud/marketplace.py +0 -221
- mlrun/api/crud/model_monitoring/model_endpoint_store.py +0 -847
- mlrun/api/db/filedb/db.py +0 -518
- mlrun/api/schemas/marketplace.py +0 -128
- mlrun/api/schemas/model_endpoints.py +0 -185
- mlrun/db/filedb.py +0 -891
- mlrun/feature_store/retrieval/online.py +0 -92
- mlrun/model_monitoring/constants.py +0 -67
- mlrun/runtimes/package/context_handler.py +0 -711
- mlrun/runtimes/sparkjob/spark2job.py +0 -59
- mlrun-1.3.3rc1.dist-info/RECORD +0 -381
- {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/LICENSE +0 -0
- {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/WHEEL +0 -0
- {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/entry_points.txt +0 -0
- {mlrun-1.3.3rc1.dist-info → mlrun-1.4.0.dist-info}/top_level.txt +0 -0
mlrun/api/utils/asyncio.py
CHANGED
mlrun/api/utils/auth/__init__.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright
|
|
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,7 +15,7 @@
|
|
|
15
15
|
import abc
|
|
16
16
|
import typing
|
|
17
17
|
|
|
18
|
-
import mlrun.
|
|
18
|
+
import mlrun.common.schemas
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
class Provider(abc.ABC):
|
|
@@ -23,8 +23,8 @@ class Provider(abc.ABC):
|
|
|
23
23
|
async def query_permissions(
|
|
24
24
|
self,
|
|
25
25
|
resource: str,
|
|
26
|
-
action: mlrun.
|
|
27
|
-
auth_info: mlrun.
|
|
26
|
+
action: mlrun.common.schemas.AuthorizationAction,
|
|
27
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
28
28
|
raise_on_forbidden: bool = True,
|
|
29
29
|
) -> bool:
|
|
30
30
|
pass
|
|
@@ -34,13 +34,13 @@ class Provider(abc.ABC):
|
|
|
34
34
|
self,
|
|
35
35
|
resources: typing.List,
|
|
36
36
|
opa_resource_extractor: typing.Callable,
|
|
37
|
-
action: mlrun.
|
|
38
|
-
auth_info: mlrun.
|
|
37
|
+
action: mlrun.common.schemas.AuthorizationAction,
|
|
38
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
39
39
|
) -> typing.List:
|
|
40
40
|
pass
|
|
41
41
|
|
|
42
42
|
@abc.abstractmethod
|
|
43
43
|
def add_allowed_project_for_owner(
|
|
44
|
-
self, project_name: str, auth_info: mlrun.
|
|
44
|
+
self, project_name: str, auth_info: mlrun.common.schemas.AuthInfo
|
|
45
45
|
):
|
|
46
46
|
pass
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright
|
|
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.
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
#
|
|
15
15
|
import typing
|
|
16
16
|
|
|
17
|
-
import mlrun.api.schemas
|
|
18
17
|
import mlrun.api.utils.auth.providers.base
|
|
19
18
|
import mlrun.utils.singleton
|
|
20
19
|
|
|
@@ -26,8 +25,8 @@ class Provider(
|
|
|
26
25
|
async def query_permissions(
|
|
27
26
|
self,
|
|
28
27
|
resource: str,
|
|
29
|
-
action: mlrun.
|
|
30
|
-
auth_info: mlrun.
|
|
28
|
+
action: mlrun.common.schemas.AuthorizationAction,
|
|
29
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
31
30
|
raise_on_forbidden: bool = True,
|
|
32
31
|
) -> bool:
|
|
33
32
|
return True
|
|
@@ -36,12 +35,12 @@ class Provider(
|
|
|
36
35
|
self,
|
|
37
36
|
resources: typing.List,
|
|
38
37
|
opa_resource_extractor: typing.Callable,
|
|
39
|
-
action: mlrun.
|
|
40
|
-
auth_info: mlrun.
|
|
38
|
+
action: mlrun.common.schemas.AuthorizationAction,
|
|
39
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
41
40
|
) -> typing.List:
|
|
42
41
|
return resources
|
|
43
42
|
|
|
44
43
|
def add_allowed_project_for_owner(
|
|
45
|
-
self, project_name: str, auth_info: mlrun.
|
|
44
|
+
self, project_name: str, auth_info: mlrun.common.schemas.AuthInfo
|
|
46
45
|
):
|
|
47
46
|
pass
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright
|
|
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.
|
|
@@ -21,9 +21,9 @@ import typing
|
|
|
21
21
|
|
|
22
22
|
import humanfriendly
|
|
23
23
|
|
|
24
|
-
import mlrun.api.schemas
|
|
25
24
|
import mlrun.api.utils.auth.providers.base
|
|
26
25
|
import mlrun.api.utils.projects.remotes.leader
|
|
26
|
+
import mlrun.common.schemas
|
|
27
27
|
import mlrun.errors
|
|
28
28
|
import mlrun.utils.helpers
|
|
29
29
|
import mlrun.utils.singleton
|
|
@@ -66,23 +66,23 @@ class Provider(
|
|
|
66
66
|
async def query_permissions(
|
|
67
67
|
self,
|
|
68
68
|
resource: str,
|
|
69
|
-
action: mlrun.
|
|
70
|
-
auth_info: mlrun.
|
|
69
|
+
action: mlrun.common.schemas.AuthorizationAction,
|
|
70
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
71
71
|
raise_on_forbidden: bool = True,
|
|
72
72
|
) -> bool:
|
|
73
73
|
|
|
74
74
|
# store is not really a verb in our OPA manifest, we map it to 2 query permissions requests (create & update)
|
|
75
|
-
if action == mlrun.
|
|
75
|
+
if action == mlrun.common.schemas.AuthorizationAction.store:
|
|
76
76
|
results = await asyncio.gather(
|
|
77
77
|
self.query_permissions(
|
|
78
78
|
resource,
|
|
79
|
-
mlrun.
|
|
79
|
+
mlrun.common.schemas.AuthorizationAction.create,
|
|
80
80
|
auth_info,
|
|
81
81
|
raise_on_forbidden,
|
|
82
82
|
),
|
|
83
83
|
self.query_permissions(
|
|
84
84
|
resource,
|
|
85
|
-
mlrun.
|
|
85
|
+
mlrun.common.schemas.AuthorizationAction.update,
|
|
86
86
|
auth_info,
|
|
87
87
|
raise_on_forbidden,
|
|
88
88
|
),
|
|
@@ -113,11 +113,11 @@ class Provider(
|
|
|
113
113
|
self,
|
|
114
114
|
resources: typing.List,
|
|
115
115
|
opa_resource_extractor: typing.Callable,
|
|
116
|
-
action: mlrun.
|
|
117
|
-
auth_info: mlrun.
|
|
116
|
+
action: mlrun.common.schemas.AuthorizationAction,
|
|
117
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
118
118
|
) -> typing.List:
|
|
119
119
|
# store is not really a verb in our OPA manifest, we map it to 2 query permissions requests (create & update)
|
|
120
|
-
if action == mlrun.
|
|
120
|
+
if action == mlrun.common.schemas.AuthorizationAction.store:
|
|
121
121
|
raise NotImplementedError("Store action is not supported in filtering")
|
|
122
122
|
if self._is_request_from_leader(auth_info.projects_role):
|
|
123
123
|
return resources
|
|
@@ -149,7 +149,7 @@ class Provider(
|
|
|
149
149
|
return allowed_resources
|
|
150
150
|
|
|
151
151
|
def add_allowed_project_for_owner(
|
|
152
|
-
self, project_name: str, auth_info: mlrun.
|
|
152
|
+
self, project_name: str, auth_info: mlrun.common.schemas.AuthInfo
|
|
153
153
|
):
|
|
154
154
|
if (
|
|
155
155
|
not auth_info.user_id
|
|
@@ -168,7 +168,7 @@ class Provider(
|
|
|
168
168
|
self._allowed_project_owners_cache[auth_info.user_id] = allowed_projects
|
|
169
169
|
|
|
170
170
|
def _check_allowed_project_owners_cache(
|
|
171
|
-
self, resource: str, auth_info: mlrun.
|
|
171
|
+
self, resource: str, auth_info: mlrun.common.schemas.AuthInfo
|
|
172
172
|
):
|
|
173
173
|
# Cache shouldn't be big, simply clean it on get instead of scheduling it
|
|
174
174
|
self._clean_expired_records_from_cache()
|
|
@@ -199,7 +199,7 @@ class Provider(
|
|
|
199
199
|
del self._allowed_project_owners_cache[user_id]
|
|
200
200
|
|
|
201
201
|
def _is_request_from_leader(
|
|
202
|
-
self, projects_role: typing.Optional[mlrun.
|
|
202
|
+
self, projects_role: typing.Optional[mlrun.common.schemas.ProjectsRole]
|
|
203
203
|
):
|
|
204
204
|
if projects_role and projects_role.value == self._leader_name:
|
|
205
205
|
return True
|
|
@@ -241,8 +241,8 @@ class Provider(
|
|
|
241
241
|
@staticmethod
|
|
242
242
|
def _generate_permission_request_body(
|
|
243
243
|
resource: str,
|
|
244
|
-
action: mlrun.
|
|
245
|
-
auth_info: mlrun.
|
|
244
|
+
action: mlrun.common.schemas.AuthorizationAction,
|
|
245
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
246
246
|
) -> dict:
|
|
247
247
|
body = {
|
|
248
248
|
"input": {
|
|
@@ -256,8 +256,8 @@ class Provider(
|
|
|
256
256
|
@staticmethod
|
|
257
257
|
def _generate_filter_request_body(
|
|
258
258
|
resources: typing.List[str],
|
|
259
|
-
action: mlrun.
|
|
260
|
-
auth_info: mlrun.
|
|
259
|
+
action: mlrun.common.schemas.AuthorizationAction,
|
|
260
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
261
261
|
) -> dict:
|
|
262
262
|
body = {
|
|
263
263
|
"input": {
|
mlrun/api/utils/auth/verifier.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright
|
|
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.
|
|
@@ -19,10 +19,10 @@ import typing
|
|
|
19
19
|
import fastapi
|
|
20
20
|
|
|
21
21
|
import mlrun
|
|
22
|
-
import mlrun.api.schemas
|
|
23
22
|
import mlrun.api.utils.auth.providers.nop
|
|
24
23
|
import mlrun.api.utils.auth.providers.opa
|
|
25
24
|
import mlrun.api.utils.clients.iguazio
|
|
25
|
+
import mlrun.common.schemas
|
|
26
26
|
import mlrun.utils.singleton
|
|
27
27
|
|
|
28
28
|
|
|
@@ -41,11 +41,11 @@ class AuthVerifier(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
41
41
|
|
|
42
42
|
async def filter_project_resources_by_permissions(
|
|
43
43
|
self,
|
|
44
|
-
resource_type: mlrun.
|
|
44
|
+
resource_type: mlrun.common.schemas.AuthorizationResourceTypes,
|
|
45
45
|
resources: typing.List,
|
|
46
46
|
project_and_resource_name_extractor: typing.Callable,
|
|
47
|
-
auth_info: mlrun.
|
|
48
|
-
action: mlrun.
|
|
47
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
48
|
+
action: mlrun.common.schemas.AuthorizationAction = mlrun.common.schemas.AuthorizationAction.read,
|
|
49
49
|
) -> typing.List:
|
|
50
50
|
def _generate_opa_resource(resource):
|
|
51
51
|
project_name, resource_name = project_and_resource_name_extractor(resource)
|
|
@@ -60,8 +60,8 @@ class AuthVerifier(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
60
60
|
async def filter_projects_by_permissions(
|
|
61
61
|
self,
|
|
62
62
|
project_names: typing.List[str],
|
|
63
|
-
auth_info: mlrun.
|
|
64
|
-
action: mlrun.
|
|
63
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
64
|
+
action: mlrun.common.schemas.AuthorizationAction = mlrun.common.schemas.AuthorizationAction.read,
|
|
65
65
|
) -> typing.List:
|
|
66
66
|
return await self.filter_by_permissions(
|
|
67
67
|
project_names,
|
|
@@ -72,11 +72,11 @@ class AuthVerifier(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
72
72
|
|
|
73
73
|
async def query_project_resources_permissions(
|
|
74
74
|
self,
|
|
75
|
-
resource_type: mlrun.
|
|
75
|
+
resource_type: mlrun.common.schemas.AuthorizationResourceTypes,
|
|
76
76
|
resources: typing.List,
|
|
77
77
|
project_and_resource_name_extractor: typing.Callable,
|
|
78
|
-
action: mlrun.
|
|
79
|
-
auth_info: mlrun.
|
|
78
|
+
action: mlrun.common.schemas.AuthorizationAction,
|
|
79
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
80
80
|
raise_on_forbidden: bool = True,
|
|
81
81
|
) -> bool:
|
|
82
82
|
project_resources = [
|
|
@@ -102,11 +102,11 @@ class AuthVerifier(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
102
102
|
|
|
103
103
|
async def query_project_resource_permissions(
|
|
104
104
|
self,
|
|
105
|
-
resource_type: mlrun.
|
|
105
|
+
resource_type: mlrun.common.schemas.AuthorizationResourceTypes,
|
|
106
106
|
project_name: str,
|
|
107
107
|
resource_name: str,
|
|
108
|
-
action: mlrun.
|
|
109
|
-
auth_info: mlrun.
|
|
108
|
+
action: mlrun.common.schemas.AuthorizationAction,
|
|
109
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
110
110
|
raise_on_forbidden: bool = True,
|
|
111
111
|
) -> bool:
|
|
112
112
|
return await self.query_permissions(
|
|
@@ -121,8 +121,8 @@ class AuthVerifier(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
121
121
|
async def query_project_permissions(
|
|
122
122
|
self,
|
|
123
123
|
project_name: str,
|
|
124
|
-
action: mlrun.
|
|
125
|
-
auth_info: mlrun.
|
|
124
|
+
action: mlrun.common.schemas.AuthorizationAction,
|
|
125
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
126
126
|
raise_on_forbidden: bool = True,
|
|
127
127
|
) -> bool:
|
|
128
128
|
return await self.query_permissions(
|
|
@@ -134,9 +134,9 @@ class AuthVerifier(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
134
134
|
|
|
135
135
|
async def query_global_resource_permissions(
|
|
136
136
|
self,
|
|
137
|
-
resource_type: mlrun.
|
|
138
|
-
action: mlrun.
|
|
139
|
-
auth_info: mlrun.
|
|
137
|
+
resource_type: mlrun.common.schemas.AuthorizationResourceTypes,
|
|
138
|
+
action: mlrun.common.schemas.AuthorizationAction,
|
|
139
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
140
140
|
raise_on_forbidden: bool = True,
|
|
141
141
|
) -> bool:
|
|
142
142
|
return await self.query_resource_permissions(
|
|
@@ -149,10 +149,10 @@ class AuthVerifier(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
149
149
|
|
|
150
150
|
async def query_resource_permissions(
|
|
151
151
|
self,
|
|
152
|
-
resource_type: mlrun.
|
|
152
|
+
resource_type: mlrun.common.schemas.AuthorizationResourceTypes,
|
|
153
153
|
resource_name: str,
|
|
154
|
-
action: mlrun.
|
|
155
|
-
auth_info: mlrun.
|
|
154
|
+
action: mlrun.common.schemas.AuthorizationAction,
|
|
155
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
156
156
|
raise_on_forbidden: bool = True,
|
|
157
157
|
) -> bool:
|
|
158
158
|
return await self.query_permissions(
|
|
@@ -165,8 +165,8 @@ class AuthVerifier(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
165
165
|
async def query_permissions(
|
|
166
166
|
self,
|
|
167
167
|
resource: str,
|
|
168
|
-
action: mlrun.
|
|
169
|
-
auth_info: mlrun.
|
|
168
|
+
action: mlrun.common.schemas.AuthorizationAction,
|
|
169
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
170
170
|
raise_on_forbidden: bool = True,
|
|
171
171
|
) -> bool:
|
|
172
172
|
return await self._auth_provider.query_permissions(
|
|
@@ -177,8 +177,8 @@ class AuthVerifier(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
177
177
|
self,
|
|
178
178
|
resources: typing.List,
|
|
179
179
|
opa_resource_extractor: typing.Callable,
|
|
180
|
-
action: mlrun.
|
|
181
|
-
auth_info: mlrun.
|
|
180
|
+
action: mlrun.common.schemas.AuthorizationAction,
|
|
181
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
182
182
|
) -> typing.List:
|
|
183
183
|
return await self._auth_provider.filter_by_permissions(
|
|
184
184
|
resources,
|
|
@@ -188,14 +188,14 @@ class AuthVerifier(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
188
188
|
)
|
|
189
189
|
|
|
190
190
|
def add_allowed_project_for_owner(
|
|
191
|
-
self, project_name: str, auth_info: mlrun.
|
|
191
|
+
self, project_name: str, auth_info: mlrun.common.schemas.AuthInfo
|
|
192
192
|
):
|
|
193
193
|
self._auth_provider.add_allowed_project_for_owner(project_name, auth_info)
|
|
194
194
|
|
|
195
195
|
async def authenticate_request(
|
|
196
196
|
self, request: fastapi.Request
|
|
197
|
-
) -> mlrun.
|
|
198
|
-
auth_info = mlrun.
|
|
197
|
+
) -> mlrun.common.schemas.AuthInfo:
|
|
198
|
+
auth_info = mlrun.common.schemas.AuthInfo()
|
|
199
199
|
header = request.headers.get("Authorization", "")
|
|
200
200
|
if self._basic_auth_configured():
|
|
201
201
|
if not header.startswith(self._basic_prefix):
|
|
@@ -228,10 +228,10 @@ class AuthVerifier(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
228
228
|
auth_info.username = request.headers["x-remote-user"]
|
|
229
229
|
|
|
230
230
|
projects_role_header = request.headers.get(
|
|
231
|
-
mlrun.
|
|
231
|
+
mlrun.common.schemas.HeaderNames.projects_role
|
|
232
232
|
)
|
|
233
233
|
auth_info.projects_role = (
|
|
234
|
-
mlrun.
|
|
234
|
+
mlrun.common.schemas.ProjectsRole(projects_role_header)
|
|
235
235
|
if projects_role_header
|
|
236
236
|
else None
|
|
237
237
|
)
|
|
@@ -248,7 +248,7 @@ class AuthVerifier(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
248
248
|
|
|
249
249
|
async def generate_auth_info_from_session(
|
|
250
250
|
self, session: str
|
|
251
|
-
) -> mlrun.
|
|
251
|
+
) -> mlrun.common.schemas.AuthInfo:
|
|
252
252
|
if not self._iguazio_auth_configured():
|
|
253
253
|
raise NotImplementedError(
|
|
254
254
|
"Session is currently supported only for iguazio authentication mode"
|
|
@@ -273,13 +273,15 @@ class AuthVerifier(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
273
273
|
|
|
274
274
|
@staticmethod
|
|
275
275
|
def _generate_resource_string_from_project_name(project_name: str):
|
|
276
|
-
return
|
|
277
|
-
|
|
276
|
+
return (
|
|
277
|
+
mlrun.common.schemas.AuthorizationResourceTypes.project.to_resource_string(
|
|
278
|
+
project_name, ""
|
|
279
|
+
)
|
|
278
280
|
)
|
|
279
281
|
|
|
280
282
|
@staticmethod
|
|
281
283
|
def _generate_resource_string_from_project_resource(
|
|
282
|
-
resource_type: mlrun.
|
|
284
|
+
resource_type: mlrun.common.schemas.AuthorizationResourceTypes,
|
|
283
285
|
project_name: str,
|
|
284
286
|
resource_name: str,
|
|
285
287
|
):
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright
|
|
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.
|
|
@@ -22,10 +22,10 @@ import fastapi
|
|
|
22
22
|
import fastapi.concurrency
|
|
23
23
|
import sqlalchemy.orm
|
|
24
24
|
|
|
25
|
-
import mlrun.api.schemas
|
|
26
25
|
import mlrun.api.utils.helpers
|
|
27
26
|
import mlrun.api.utils.singletons.db
|
|
28
27
|
import mlrun.api.utils.singletons.project_member
|
|
28
|
+
import mlrun.common.schemas
|
|
29
29
|
import mlrun.errors
|
|
30
30
|
import mlrun.utils.singleton
|
|
31
31
|
from mlrun.utils import logger
|
|
@@ -41,13 +41,13 @@ class ProjectBackgroundTasksHandler(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
41
41
|
timeout: int = None, # in seconds
|
|
42
42
|
*args,
|
|
43
43
|
**kwargs,
|
|
44
|
-
) -> mlrun.
|
|
44
|
+
) -> mlrun.common.schemas.BackgroundTask:
|
|
45
45
|
name = str(uuid.uuid4())
|
|
46
46
|
mlrun.api.utils.singletons.db.get_db().store_background_task(
|
|
47
47
|
db_session,
|
|
48
48
|
name,
|
|
49
49
|
project,
|
|
50
|
-
mlrun.
|
|
50
|
+
mlrun.common.schemas.BackgroundTaskState.running,
|
|
51
51
|
timeout,
|
|
52
52
|
)
|
|
53
53
|
background_tasks.add_task(
|
|
@@ -66,7 +66,7 @@ class ProjectBackgroundTasksHandler(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
66
66
|
db_session: sqlalchemy.orm.Session,
|
|
67
67
|
name: str,
|
|
68
68
|
project: str,
|
|
69
|
-
) -> mlrun.
|
|
69
|
+
) -> mlrun.common.schemas.BackgroundTask:
|
|
70
70
|
return mlrun.api.utils.singletons.db.get_db().get_background_task(
|
|
71
71
|
db_session, name, project
|
|
72
72
|
)
|
|
@@ -93,21 +93,21 @@ class ProjectBackgroundTasksHandler(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
93
93
|
db_session,
|
|
94
94
|
name,
|
|
95
95
|
project=project,
|
|
96
|
-
state=mlrun.
|
|
96
|
+
state=mlrun.common.schemas.BackgroundTaskState.failed,
|
|
97
97
|
)
|
|
98
98
|
else:
|
|
99
99
|
mlrun.api.utils.singletons.db.get_db().store_background_task(
|
|
100
100
|
db_session,
|
|
101
101
|
name,
|
|
102
102
|
project=project,
|
|
103
|
-
state=mlrun.
|
|
103
|
+
state=mlrun.common.schemas.BackgroundTaskState.succeeded,
|
|
104
104
|
)
|
|
105
105
|
|
|
106
106
|
|
|
107
107
|
class InternalBackgroundTasksHandler(metaclass=mlrun.utils.singleton.Singleton):
|
|
108
108
|
def __init__(self):
|
|
109
109
|
self._internal_background_tasks: typing.Dict[
|
|
110
|
-
str, mlrun.
|
|
110
|
+
str, mlrun.common.schemas.BackgroundTask
|
|
111
111
|
] = {}
|
|
112
112
|
|
|
113
113
|
@mlrun.api.utils.helpers.ensure_running_on_chief
|
|
@@ -117,7 +117,7 @@ class InternalBackgroundTasksHandler(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
117
117
|
function,
|
|
118
118
|
*args,
|
|
119
119
|
**kwargs,
|
|
120
|
-
) -> mlrun.
|
|
120
|
+
) -> mlrun.common.schemas.BackgroundTask:
|
|
121
121
|
name = str(uuid.uuid4())
|
|
122
122
|
# sanity
|
|
123
123
|
if name in self._internal_background_tasks:
|
|
@@ -138,7 +138,7 @@ class InternalBackgroundTasksHandler(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
138
138
|
def get_background_task(
|
|
139
139
|
self,
|
|
140
140
|
name: str,
|
|
141
|
-
) -> mlrun.
|
|
141
|
+
) -> mlrun.common.schemas.BackgroundTask:
|
|
142
142
|
"""
|
|
143
143
|
:return: returns the background task object and bool whether exists
|
|
144
144
|
"""
|
|
@@ -160,17 +160,17 @@ class InternalBackgroundTasksHandler(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
160
160
|
f"Failed during background task execution: {function.__name__}, exc: {traceback.format_exc()}"
|
|
161
161
|
)
|
|
162
162
|
self._update_background_task(
|
|
163
|
-
name, mlrun.
|
|
163
|
+
name, mlrun.common.schemas.BackgroundTaskState.failed
|
|
164
164
|
)
|
|
165
165
|
else:
|
|
166
166
|
self._update_background_task(
|
|
167
|
-
name, mlrun.
|
|
167
|
+
name, mlrun.common.schemas.BackgroundTaskState.succeeded
|
|
168
168
|
)
|
|
169
169
|
|
|
170
170
|
def _update_background_task(
|
|
171
171
|
self,
|
|
172
172
|
name: str,
|
|
173
|
-
state: mlrun.
|
|
173
|
+
state: mlrun.common.schemas.BackgroundTaskState,
|
|
174
174
|
):
|
|
175
175
|
background_task = self._internal_background_tasks[name]
|
|
176
176
|
background_task.status.state = state
|
|
@@ -183,31 +183,31 @@ class InternalBackgroundTasksHandler(metaclass=mlrun.utils.singleton.Singleton):
|
|
|
183
183
|
# in order to keep things simple we don't persist the internal background tasks to the DB
|
|
184
184
|
# If for some reason get is called and the background task doesn't exist, it means that probably we got
|
|
185
185
|
# restarted, therefore we want to return a failed background task so the client will retry (if needed)
|
|
186
|
-
return mlrun.
|
|
187
|
-
metadata=mlrun.
|
|
186
|
+
return mlrun.common.schemas.BackgroundTask(
|
|
187
|
+
metadata=mlrun.common.schemas.BackgroundTaskMetadata(
|
|
188
188
|
name=name, project=project
|
|
189
189
|
),
|
|
190
|
-
spec=mlrun.
|
|
191
|
-
status=mlrun.
|
|
192
|
-
state=mlrun.
|
|
190
|
+
spec=mlrun.common.schemas.BackgroundTaskSpec(),
|
|
191
|
+
status=mlrun.common.schemas.BackgroundTaskStatus(
|
|
192
|
+
state=mlrun.common.schemas.BackgroundTaskState.failed
|
|
193
193
|
),
|
|
194
194
|
)
|
|
195
195
|
|
|
196
196
|
@staticmethod
|
|
197
197
|
def _generate_background_task(
|
|
198
198
|
name: str, project: typing.Optional[str] = None
|
|
199
|
-
) -> mlrun.
|
|
199
|
+
) -> mlrun.common.schemas.BackgroundTask:
|
|
200
200
|
now = datetime.datetime.utcnow()
|
|
201
|
-
metadata = mlrun.
|
|
201
|
+
metadata = mlrun.common.schemas.BackgroundTaskMetadata(
|
|
202
202
|
name=name,
|
|
203
203
|
project=project,
|
|
204
204
|
created=now,
|
|
205
205
|
updated=now,
|
|
206
206
|
)
|
|
207
|
-
spec = mlrun.
|
|
208
|
-
status = mlrun.
|
|
209
|
-
state=mlrun.
|
|
207
|
+
spec = mlrun.common.schemas.BackgroundTaskSpec()
|
|
208
|
+
status = mlrun.common.schemas.BackgroundTaskStatus(
|
|
209
|
+
state=mlrun.common.schemas.BackgroundTaskState.running
|
|
210
210
|
)
|
|
211
|
-
return mlrun.
|
|
211
|
+
return mlrun.common.schemas.BackgroundTask(
|
|
212
212
|
metadata=metadata, spec=spec, status=status
|
|
213
213
|
)
|