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.
- 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.3.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.3.dist-info/RECORD +0 -381
- {mlrun-1.3.3.dist-info → mlrun-1.4.0.dist-info}/LICENSE +0 -0
- {mlrun-1.3.3.dist-info → mlrun-1.4.0.dist-info}/WHEEL +0 -0
- {mlrun-1.3.3.dist-info → mlrun-1.4.0.dist-info}/entry_points.txt +0 -0
- {mlrun-1.3.3.dist-info → mlrun-1.4.0.dist-info}/top_level.txt +0 -0
mlrun/api/api/endpoints/runs.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.
|
|
@@ -16,14 +16,14 @@ import datetime
|
|
|
16
16
|
from http import HTTPStatus
|
|
17
17
|
from typing import List
|
|
18
18
|
|
|
19
|
-
from fastapi import APIRouter, Depends, Query, Request
|
|
19
|
+
from fastapi import APIRouter, Body, Depends, Query, Request, Response
|
|
20
20
|
from fastapi.concurrency import run_in_threadpool
|
|
21
21
|
from sqlalchemy.orm import Session
|
|
22
22
|
|
|
23
23
|
import mlrun.api.crud
|
|
24
|
-
import mlrun.api.schemas
|
|
25
24
|
import mlrun.api.utils.auth.verifier
|
|
26
25
|
import mlrun.api.utils.singletons.project_member
|
|
26
|
+
import mlrun.common.schemas
|
|
27
27
|
from mlrun.api.api import deps
|
|
28
28
|
from mlrun.api.api.utils import log_and_raise
|
|
29
29
|
from mlrun.utils.helpers import datetime_from_iso
|
|
@@ -37,7 +37,7 @@ async def store_run(
|
|
|
37
37
|
project: str,
|
|
38
38
|
uid: str,
|
|
39
39
|
iter: int = 0,
|
|
40
|
-
auth_info: mlrun.
|
|
40
|
+
auth_info: mlrun.common.schemas.AuthInfo = Depends(deps.authenticate_request),
|
|
41
41
|
db_session: Session = Depends(deps.get_db_session),
|
|
42
42
|
):
|
|
43
43
|
await run_in_threadpool(
|
|
@@ -47,10 +47,10 @@ async def store_run(
|
|
|
47
47
|
auth_info=auth_info,
|
|
48
48
|
)
|
|
49
49
|
await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
|
|
50
|
-
mlrun.
|
|
50
|
+
mlrun.common.schemas.AuthorizationResourceTypes.run,
|
|
51
51
|
project,
|
|
52
52
|
uid,
|
|
53
|
-
mlrun.
|
|
53
|
+
mlrun.common.schemas.AuthorizationAction.store,
|
|
54
54
|
auth_info,
|
|
55
55
|
)
|
|
56
56
|
data = None
|
|
@@ -76,14 +76,14 @@ async def update_run(
|
|
|
76
76
|
project: str,
|
|
77
77
|
uid: str,
|
|
78
78
|
iter: int = 0,
|
|
79
|
-
auth_info: mlrun.
|
|
79
|
+
auth_info: mlrun.common.schemas.AuthInfo = Depends(deps.authenticate_request),
|
|
80
80
|
db_session: Session = Depends(deps.get_db_session),
|
|
81
81
|
):
|
|
82
82
|
await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
|
|
83
|
-
mlrun.
|
|
83
|
+
mlrun.common.schemas.AuthorizationResourceTypes.run,
|
|
84
84
|
project,
|
|
85
85
|
uid,
|
|
86
|
-
mlrun.
|
|
86
|
+
mlrun.common.schemas.AuthorizationAction.update,
|
|
87
87
|
auth_info,
|
|
88
88
|
)
|
|
89
89
|
data = None
|
|
@@ -108,17 +108,17 @@ async def get_run(
|
|
|
108
108
|
project: str,
|
|
109
109
|
uid: str,
|
|
110
110
|
iter: int = 0,
|
|
111
|
-
auth_info: mlrun.
|
|
111
|
+
auth_info: mlrun.common.schemas.AuthInfo = Depends(deps.authenticate_request),
|
|
112
112
|
db_session: Session = Depends(deps.get_db_session),
|
|
113
113
|
):
|
|
114
114
|
data = await run_in_threadpool(
|
|
115
115
|
mlrun.api.crud.Runs().get_run, db_session, uid, iter, project
|
|
116
116
|
)
|
|
117
117
|
await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
|
|
118
|
-
mlrun.
|
|
118
|
+
mlrun.common.schemas.AuthorizationResourceTypes.run,
|
|
119
119
|
project,
|
|
120
120
|
uid,
|
|
121
|
-
mlrun.
|
|
121
|
+
mlrun.common.schemas.AuthorizationAction.read,
|
|
122
122
|
auth_info,
|
|
123
123
|
)
|
|
124
124
|
return {
|
|
@@ -131,14 +131,14 @@ async def delete_run(
|
|
|
131
131
|
project: str,
|
|
132
132
|
uid: str,
|
|
133
133
|
iter: int = 0,
|
|
134
|
-
auth_info: mlrun.
|
|
134
|
+
auth_info: mlrun.common.schemas.AuthInfo = Depends(deps.authenticate_request),
|
|
135
135
|
db_session: Session = Depends(deps.get_db_session),
|
|
136
136
|
):
|
|
137
137
|
await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
|
|
138
|
-
mlrun.
|
|
138
|
+
mlrun.common.schemas.AuthorizationResourceTypes.run,
|
|
139
139
|
project,
|
|
140
140
|
uid,
|
|
141
|
-
mlrun.
|
|
141
|
+
mlrun.common.schemas.AuthorizationAction.delete,
|
|
142
142
|
auth_info,
|
|
143
143
|
)
|
|
144
144
|
await run_in_threadpool(
|
|
@@ -165,24 +165,25 @@ async def list_runs(
|
|
|
165
165
|
start_time_to: str = None,
|
|
166
166
|
last_update_time_from: str = None,
|
|
167
167
|
last_update_time_to: str = None,
|
|
168
|
-
partition_by: mlrun.
|
|
168
|
+
partition_by: mlrun.common.schemas.RunPartitionByField = Query(
|
|
169
169
|
None, alias="partition-by"
|
|
170
170
|
),
|
|
171
171
|
rows_per_partition: int = Query(1, alias="rows-per-partition", gt=0),
|
|
172
|
-
partition_sort_by: mlrun.
|
|
172
|
+
partition_sort_by: mlrun.common.schemas.SortField = Query(
|
|
173
173
|
None, alias="partition-sort-by"
|
|
174
174
|
),
|
|
175
|
-
partition_order: mlrun.
|
|
176
|
-
mlrun.
|
|
175
|
+
partition_order: mlrun.common.schemas.OrderType = Query(
|
|
176
|
+
mlrun.common.schemas.OrderType.desc, alias="partition-order"
|
|
177
177
|
),
|
|
178
178
|
max_partitions: int = Query(0, alias="max-partitions", ge=0),
|
|
179
|
-
|
|
179
|
+
with_notifications: bool = Query(False, alias="with-notifications"),
|
|
180
|
+
auth_info: mlrun.common.schemas.AuthInfo = Depends(deps.authenticate_request),
|
|
180
181
|
db_session: Session = Depends(deps.get_db_session),
|
|
181
182
|
):
|
|
182
183
|
if project != "*":
|
|
183
184
|
await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_permissions(
|
|
184
185
|
project,
|
|
185
|
-
mlrun.
|
|
186
|
+
mlrun.common.schemas.AuthorizationAction.read,
|
|
186
187
|
auth_info,
|
|
187
188
|
)
|
|
188
189
|
runs = await run_in_threadpool(
|
|
@@ -205,9 +206,10 @@ async def list_runs(
|
|
|
205
206
|
partition_sort_by,
|
|
206
207
|
partition_order,
|
|
207
208
|
max_partitions,
|
|
209
|
+
with_notifications=with_notifications,
|
|
208
210
|
)
|
|
209
211
|
filtered_runs = await mlrun.api.utils.auth.verifier.AuthVerifier().filter_project_resources_by_permissions(
|
|
210
|
-
mlrun.
|
|
212
|
+
mlrun.common.schemas.AuthorizationResourceTypes.run,
|
|
211
213
|
runs,
|
|
212
214
|
lambda run: (
|
|
213
215
|
run.get("metadata", {}).get("project", mlrun.mlconf.default_project),
|
|
@@ -227,7 +229,7 @@ async def delete_runs(
|
|
|
227
229
|
labels: List[str] = Query([], alias="label"),
|
|
228
230
|
state: str = None,
|
|
229
231
|
days_ago: int = None,
|
|
230
|
-
auth_info: mlrun.
|
|
232
|
+
auth_info: mlrun.common.schemas.AuthInfo = Depends(deps.authenticate_request),
|
|
231
233
|
db_session: Session = Depends(deps.get_db_session),
|
|
232
234
|
):
|
|
233
235
|
if not project or project != "*":
|
|
@@ -235,10 +237,10 @@ async def delete_runs(
|
|
|
235
237
|
# Meaning there is no reason at the moment to query the permission for each run under the project
|
|
236
238
|
# TODO check for every run when we will manage permission per run inside a project
|
|
237
239
|
await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
|
|
238
|
-
mlrun.
|
|
240
|
+
mlrun.common.schemas.AuthorizationResourceTypes.run,
|
|
239
241
|
project or mlrun.mlconf.default_project,
|
|
240
242
|
"",
|
|
241
|
-
mlrun.
|
|
243
|
+
mlrun.common.schemas.AuthorizationAction.delete,
|
|
242
244
|
auth_info,
|
|
243
245
|
)
|
|
244
246
|
else:
|
|
@@ -264,10 +266,10 @@ async def delete_runs(
|
|
|
264
266
|
# currently we fail if the user doesn't has permissions to delete runs to one of the projects in the system
|
|
265
267
|
# TODO Delete only runs from projects that user has permissions to
|
|
266
268
|
await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
|
|
267
|
-
mlrun.
|
|
269
|
+
mlrun.common.schemas.AuthorizationResourceTypes.run,
|
|
268
270
|
run_project,
|
|
269
271
|
"",
|
|
270
|
-
mlrun.
|
|
272
|
+
mlrun.common.schemas.AuthorizationAction.delete,
|
|
271
273
|
auth_info,
|
|
272
274
|
)
|
|
273
275
|
|
|
@@ -281,3 +283,43 @@ async def delete_runs(
|
|
|
281
283
|
days_ago,
|
|
282
284
|
)
|
|
283
285
|
return {}
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
@router.put(
|
|
289
|
+
"/projects/{project}/runs/{uid}/notifications",
|
|
290
|
+
status_code=HTTPStatus.OK.value,
|
|
291
|
+
)
|
|
292
|
+
async def set_run_notifications(
|
|
293
|
+
project: str,
|
|
294
|
+
uid: str,
|
|
295
|
+
set_notifications_request: mlrun.common.schemas.SetNotificationRequest = Body(...),
|
|
296
|
+
auth_info: mlrun.common.schemas.AuthInfo = Depends(
|
|
297
|
+
mlrun.api.api.deps.authenticate_request
|
|
298
|
+
),
|
|
299
|
+
db_session: Session = Depends(mlrun.api.api.deps.get_db_session),
|
|
300
|
+
):
|
|
301
|
+
await run_in_threadpool(
|
|
302
|
+
mlrun.api.utils.singletons.project_member.get_project_member().ensure_project,
|
|
303
|
+
db_session,
|
|
304
|
+
project,
|
|
305
|
+
auth_info=auth_info,
|
|
306
|
+
)
|
|
307
|
+
|
|
308
|
+
# check permission per object type
|
|
309
|
+
await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_resource_permissions(
|
|
310
|
+
mlrun.common.schemas.AuthorizationResourceTypes.run,
|
|
311
|
+
project,
|
|
312
|
+
resource_name=uid,
|
|
313
|
+
action=mlrun.common.schemas.AuthorizationAction.update,
|
|
314
|
+
auth_info=auth_info,
|
|
315
|
+
)
|
|
316
|
+
|
|
317
|
+
await run_in_threadpool(
|
|
318
|
+
mlrun.api.crud.Notifications().set_object_notifications,
|
|
319
|
+
db_session,
|
|
320
|
+
auth_info,
|
|
321
|
+
project,
|
|
322
|
+
set_notifications_request.notifications,
|
|
323
|
+
mlrun.common.schemas.RunIdentifier(uid=uid),
|
|
324
|
+
)
|
|
325
|
+
return Response(status_code=HTTPStatus.OK.value)
|
|
@@ -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.
|
|
@@ -23,18 +23,18 @@ from fastapi.concurrency import run_in_threadpool
|
|
|
23
23
|
import mlrun
|
|
24
24
|
import mlrun.api.api.deps
|
|
25
25
|
import mlrun.api.crud
|
|
26
|
-
import mlrun.api.schemas
|
|
27
26
|
import mlrun.api.utils.auth.verifier
|
|
27
|
+
import mlrun.common.schemas
|
|
28
28
|
|
|
29
|
-
router = fastapi.APIRouter()
|
|
29
|
+
router = fastapi.APIRouter(prefix="/projects/{project}/runtime-resources")
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
@router.get(
|
|
33
|
-
"
|
|
33
|
+
"",
|
|
34
34
|
response_model=typing.Union[
|
|
35
|
-
mlrun.
|
|
36
|
-
mlrun.
|
|
37
|
-
mlrun.
|
|
35
|
+
mlrun.common.schemas.RuntimeResourcesOutput,
|
|
36
|
+
mlrun.common.schemas.GroupedByJobRuntimeResourcesOutput,
|
|
37
|
+
mlrun.common.schemas.GroupedByProjectRuntimeResourcesOutput,
|
|
38
38
|
],
|
|
39
39
|
)
|
|
40
40
|
async def list_runtime_resources(
|
|
@@ -43,9 +43,9 @@ async def list_runtime_resources(
|
|
|
43
43
|
kind: typing.Optional[str] = None,
|
|
44
44
|
object_id: typing.Optional[str] = fastapi.Query(None, alias="object-id"),
|
|
45
45
|
group_by: typing.Optional[
|
|
46
|
-
mlrun.
|
|
46
|
+
mlrun.common.schemas.ListRuntimeResourcesGroupByField
|
|
47
47
|
] = fastapi.Query(None, alias="group-by"),
|
|
48
|
-
auth_info: mlrun.
|
|
48
|
+
auth_info: mlrun.common.schemas.AuthInfo = fastapi.Depends(
|
|
49
49
|
mlrun.api.api.deps.authenticate_request
|
|
50
50
|
),
|
|
51
51
|
):
|
|
@@ -55,8 +55,8 @@ async def list_runtime_resources(
|
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
@router.delete(
|
|
58
|
-
"
|
|
59
|
-
response_model=mlrun.
|
|
58
|
+
"",
|
|
59
|
+
response_model=mlrun.common.schemas.GroupedByProjectRuntimeResourcesOutput,
|
|
60
60
|
)
|
|
61
61
|
async def delete_runtime_resources(
|
|
62
62
|
project: str,
|
|
@@ -67,7 +67,7 @@ async def delete_runtime_resources(
|
|
|
67
67
|
grace_period: int = fastapi.Query(
|
|
68
68
|
mlrun.mlconf.runtime_resources_deletion_grace_period, alias="grace-period"
|
|
69
69
|
),
|
|
70
|
-
auth_info: mlrun.
|
|
70
|
+
auth_info: mlrun.common.schemas.AuthInfo = fastapi.Depends(
|
|
71
71
|
mlrun.api.api.deps.authenticate_request
|
|
72
72
|
),
|
|
73
73
|
db_session: sqlalchemy.orm.Session = fastapi.Depends(
|
|
@@ -88,7 +88,7 @@ async def delete_runtime_resources(
|
|
|
88
88
|
|
|
89
89
|
async def _delete_runtime_resources(
|
|
90
90
|
db_session: sqlalchemy.orm.Session,
|
|
91
|
-
auth_info: mlrun.
|
|
91
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
92
92
|
project: str,
|
|
93
93
|
label_selector: typing.Optional[str] = None,
|
|
94
94
|
kind: typing.Optional[str] = None,
|
|
@@ -97,7 +97,7 @@ async def _delete_runtime_resources(
|
|
|
97
97
|
grace_period: int = mlrun.mlconf.runtime_resources_deletion_grace_period,
|
|
98
98
|
return_body: bool = True,
|
|
99
99
|
) -> typing.Union[
|
|
100
|
-
mlrun.
|
|
100
|
+
mlrun.common.schemas.GroupedByProjectRuntimeResourcesOutput, fastapi.Response
|
|
101
101
|
]:
|
|
102
102
|
(
|
|
103
103
|
allowed_projects,
|
|
@@ -110,7 +110,7 @@ async def _delete_runtime_resources(
|
|
|
110
110
|
label_selector,
|
|
111
111
|
kind,
|
|
112
112
|
object_id,
|
|
113
|
-
mlrun.
|
|
113
|
+
mlrun.common.schemas.AuthorizationAction.delete,
|
|
114
114
|
)
|
|
115
115
|
|
|
116
116
|
# TODO: once we have more granular permissions, we should check if the user is allowed to delete the specific
|
|
@@ -162,7 +162,7 @@ async def _delete_runtime_resources(
|
|
|
162
162
|
return mlrun.api.crud.RuntimeResources().filter_and_format_grouped_by_project_runtime_resources_output(
|
|
163
163
|
grouped_by_project_runtime_resources_output,
|
|
164
164
|
filtered_projects,
|
|
165
|
-
mlrun.
|
|
165
|
+
mlrun.common.schemas.ListRuntimeResourcesGroupByField.project,
|
|
166
166
|
)
|
|
167
167
|
else:
|
|
168
168
|
return fastapi.Response(status_code=http.HTTPStatus.NO_CONTENT.value)
|
|
@@ -170,17 +170,17 @@ async def _delete_runtime_resources(
|
|
|
170
170
|
|
|
171
171
|
async def _list_runtime_resources(
|
|
172
172
|
project: str,
|
|
173
|
-
auth_info: mlrun.
|
|
173
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
174
174
|
label_selector: typing.Optional[str] = None,
|
|
175
175
|
group_by: typing.Optional[
|
|
176
|
-
mlrun.
|
|
176
|
+
mlrun.common.schemas.ListRuntimeResourcesGroupByField
|
|
177
177
|
] = None,
|
|
178
178
|
kind_filter: typing.Optional[str] = None,
|
|
179
179
|
object_id: typing.Optional[str] = None,
|
|
180
180
|
) -> typing.Union[
|
|
181
|
-
mlrun.
|
|
182
|
-
mlrun.
|
|
183
|
-
mlrun.
|
|
181
|
+
mlrun.common.schemas.RuntimeResourcesOutput,
|
|
182
|
+
mlrun.common.schemas.GroupedByJobRuntimeResourcesOutput,
|
|
183
|
+
mlrun.common.schemas.GroupedByProjectRuntimeResourcesOutput,
|
|
184
184
|
]:
|
|
185
185
|
(
|
|
186
186
|
allowed_projects,
|
|
@@ -199,31 +199,31 @@ async def _list_runtime_resources(
|
|
|
199
199
|
|
|
200
200
|
async def _get_runtime_resources_allowed_projects(
|
|
201
201
|
project: str,
|
|
202
|
-
auth_info: mlrun.
|
|
202
|
+
auth_info: mlrun.common.schemas.AuthInfo,
|
|
203
203
|
label_selector: typing.Optional[str] = None,
|
|
204
204
|
kind: typing.Optional[str] = None,
|
|
205
205
|
object_id: typing.Optional[str] = None,
|
|
206
|
-
action: mlrun.
|
|
206
|
+
action: mlrun.common.schemas.AuthorizationAction = mlrun.common.schemas.AuthorizationAction.read,
|
|
207
207
|
) -> typing.Tuple[
|
|
208
208
|
typing.List[str],
|
|
209
|
-
mlrun.
|
|
209
|
+
mlrun.common.schemas.GroupedByProjectRuntimeResourcesOutput,
|
|
210
210
|
bool,
|
|
211
211
|
bool,
|
|
212
212
|
]:
|
|
213
213
|
if project != "*":
|
|
214
214
|
await mlrun.api.utils.auth.verifier.AuthVerifier().query_project_permissions(
|
|
215
215
|
project,
|
|
216
|
-
mlrun.
|
|
216
|
+
mlrun.common.schemas.AuthorizationAction.read,
|
|
217
217
|
auth_info,
|
|
218
218
|
)
|
|
219
|
-
grouped_by_project_runtime_resources_output: mlrun.
|
|
219
|
+
grouped_by_project_runtime_resources_output: mlrun.common.schemas.GroupedByProjectRuntimeResourcesOutput
|
|
220
220
|
grouped_by_project_runtime_resources_output = await run_in_threadpool(
|
|
221
221
|
mlrun.api.crud.RuntimeResources().list_runtime_resources,
|
|
222
222
|
project,
|
|
223
223
|
kind,
|
|
224
224
|
object_id,
|
|
225
225
|
label_selector,
|
|
226
|
-
mlrun.
|
|
226
|
+
mlrun.common.schemas.ListRuntimeResourcesGroupByField.project,
|
|
227
227
|
)
|
|
228
228
|
|
|
229
229
|
projects = []
|
|
@@ -237,7 +237,7 @@ async def _get_runtime_resources_allowed_projects(
|
|
|
237
237
|
continue
|
|
238
238
|
projects.append(project)
|
|
239
239
|
allowed_projects = await mlrun.api.utils.auth.verifier.AuthVerifier().filter_project_resources_by_permissions(
|
|
240
|
-
mlrun.
|
|
240
|
+
mlrun.common.schemas.AuthorizationResourceTypes.runtime_resource,
|
|
241
241
|
projects,
|
|
242
242
|
lambda project: (
|
|
243
243
|
project,
|