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/db/filedb/db.py
DELETED
|
@@ -1,518 +0,0 @@
|
|
|
1
|
-
# Copyright 2018 Iguazio
|
|
2
|
-
#
|
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
# you may not use this file except in compliance with the License.
|
|
5
|
-
# You may obtain a copy of the License at
|
|
6
|
-
#
|
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
#
|
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
# See the License for the specific language governing permissions and
|
|
13
|
-
# limitations under the License.
|
|
14
|
-
#
|
|
15
|
-
import datetime
|
|
16
|
-
from typing import Any, Dict, List, Optional, Tuple, Union
|
|
17
|
-
|
|
18
|
-
from mlrun.api import schemas
|
|
19
|
-
from mlrun.api.db.base import DBError, DBInterface
|
|
20
|
-
from mlrun.db.base import RunDBError
|
|
21
|
-
from mlrun.db.filedb import FileRunDB
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
class FileDB(DBInterface):
|
|
25
|
-
def __init__(self, dirpath="", format=".yaml"):
|
|
26
|
-
self.db = FileRunDB(dirpath, format)
|
|
27
|
-
|
|
28
|
-
def initialize(self, session):
|
|
29
|
-
self.db.connect()
|
|
30
|
-
|
|
31
|
-
def store_log(
|
|
32
|
-
self,
|
|
33
|
-
session,
|
|
34
|
-
uid,
|
|
35
|
-
project="",
|
|
36
|
-
body=None,
|
|
37
|
-
append=False,
|
|
38
|
-
):
|
|
39
|
-
return self._transform_run_db_error(
|
|
40
|
-
self.db.store_log, uid, project, body, append
|
|
41
|
-
)
|
|
42
|
-
|
|
43
|
-
def get_log(self, session, uid, project="", offset=0, size=0):
|
|
44
|
-
return self._transform_run_db_error(self.db.get_log, uid, project, offset, size)
|
|
45
|
-
|
|
46
|
-
def store_run(
|
|
47
|
-
self,
|
|
48
|
-
session,
|
|
49
|
-
struct,
|
|
50
|
-
uid,
|
|
51
|
-
project="",
|
|
52
|
-
iter=0,
|
|
53
|
-
):
|
|
54
|
-
return self._transform_run_db_error(
|
|
55
|
-
self.db.store_run, struct, uid, project, iter
|
|
56
|
-
)
|
|
57
|
-
|
|
58
|
-
def update_run(self, session, updates: dict, uid, project="", iter=0):
|
|
59
|
-
return self._transform_run_db_error(
|
|
60
|
-
self.db.update_run, updates, uid, project, iter
|
|
61
|
-
)
|
|
62
|
-
|
|
63
|
-
def list_distinct_runs_uids(
|
|
64
|
-
self,
|
|
65
|
-
session,
|
|
66
|
-
project: str = None,
|
|
67
|
-
requested_logs_modes: List[bool] = None,
|
|
68
|
-
only_uids: bool = False,
|
|
69
|
-
last_update_time_from: datetime.datetime = None,
|
|
70
|
-
states: List[str] = None,
|
|
71
|
-
):
|
|
72
|
-
raise NotImplementedError()
|
|
73
|
-
|
|
74
|
-
def update_runs_requested_logs(
|
|
75
|
-
self, session, uids: List[str], requested_logs: bool = True
|
|
76
|
-
):
|
|
77
|
-
raise NotImplementedError()
|
|
78
|
-
|
|
79
|
-
def read_run(self, session, uid, project="", iter=0):
|
|
80
|
-
return self._transform_run_db_error(self.db.read_run, uid, project, iter)
|
|
81
|
-
|
|
82
|
-
def list_runs(
|
|
83
|
-
self,
|
|
84
|
-
session,
|
|
85
|
-
name="",
|
|
86
|
-
uid: Optional[Union[str, List[str]]] = None,
|
|
87
|
-
project="",
|
|
88
|
-
labels=None,
|
|
89
|
-
states=None,
|
|
90
|
-
sort=True,
|
|
91
|
-
last=0,
|
|
92
|
-
iter=False,
|
|
93
|
-
start_time_from=None,
|
|
94
|
-
start_time_to=None,
|
|
95
|
-
last_update_time_from=None,
|
|
96
|
-
last_update_time_to=None,
|
|
97
|
-
partition_by: schemas.RunPartitionByField = None,
|
|
98
|
-
rows_per_partition: int = 1,
|
|
99
|
-
partition_sort_by: schemas.SortField = None,
|
|
100
|
-
partition_order: schemas.OrderType = schemas.OrderType.desc,
|
|
101
|
-
max_partitions: int = 0,
|
|
102
|
-
requested_logs: bool = None,
|
|
103
|
-
return_as_run_structs: bool = True,
|
|
104
|
-
):
|
|
105
|
-
return self._transform_run_db_error(
|
|
106
|
-
self.db.list_runs,
|
|
107
|
-
name,
|
|
108
|
-
uid,
|
|
109
|
-
project,
|
|
110
|
-
labels,
|
|
111
|
-
states[0] if states else "",
|
|
112
|
-
sort,
|
|
113
|
-
last,
|
|
114
|
-
iter,
|
|
115
|
-
start_time_from,
|
|
116
|
-
start_time_to,
|
|
117
|
-
last_update_time_from,
|
|
118
|
-
last_update_time_to,
|
|
119
|
-
partition_by,
|
|
120
|
-
rows_per_partition,
|
|
121
|
-
partition_sort_by,
|
|
122
|
-
partition_order,
|
|
123
|
-
max_partitions,
|
|
124
|
-
requested_logs,
|
|
125
|
-
return_as_run_structs,
|
|
126
|
-
)
|
|
127
|
-
|
|
128
|
-
def del_run(self, session, uid, project="", iter=0):
|
|
129
|
-
return self._transform_run_db_error(self.db.del_run, uid, project, iter)
|
|
130
|
-
|
|
131
|
-
def del_runs(self, session, name="", project="", labels=None, state="", days_ago=0):
|
|
132
|
-
return self._transform_run_db_error(
|
|
133
|
-
self.db.del_runs, name, project, labels, state, days_ago
|
|
134
|
-
)
|
|
135
|
-
|
|
136
|
-
def overwrite_artifacts_with_tag(
|
|
137
|
-
self,
|
|
138
|
-
session,
|
|
139
|
-
project: str,
|
|
140
|
-
tag: str,
|
|
141
|
-
identifiers: List[schemas.ArtifactIdentifier],
|
|
142
|
-
):
|
|
143
|
-
raise NotImplementedError()
|
|
144
|
-
|
|
145
|
-
def append_tag_to_artifacts(
|
|
146
|
-
self,
|
|
147
|
-
session,
|
|
148
|
-
project: str,
|
|
149
|
-
tag: str,
|
|
150
|
-
identifiers: List[schemas.ArtifactIdentifier],
|
|
151
|
-
):
|
|
152
|
-
raise NotImplementedError()
|
|
153
|
-
|
|
154
|
-
def delete_tag_from_artifacts(
|
|
155
|
-
self,
|
|
156
|
-
session,
|
|
157
|
-
project: str,
|
|
158
|
-
tag: str,
|
|
159
|
-
identifiers: List[schemas.ArtifactIdentifier],
|
|
160
|
-
):
|
|
161
|
-
raise NotImplementedError()
|
|
162
|
-
|
|
163
|
-
def store_artifact(
|
|
164
|
-
self,
|
|
165
|
-
session,
|
|
166
|
-
key,
|
|
167
|
-
artifact,
|
|
168
|
-
uid,
|
|
169
|
-
iter=None,
|
|
170
|
-
tag="",
|
|
171
|
-
project="",
|
|
172
|
-
):
|
|
173
|
-
return self._transform_run_db_error(
|
|
174
|
-
self.db.store_artifact, key, artifact, uid, iter, tag, project
|
|
175
|
-
)
|
|
176
|
-
|
|
177
|
-
def read_artifact(self, session, key, tag="", iter=None, project=""):
|
|
178
|
-
return self._transform_run_db_error(
|
|
179
|
-
self.db.read_artifact, key, tag, iter, project
|
|
180
|
-
)
|
|
181
|
-
|
|
182
|
-
def list_artifacts(
|
|
183
|
-
self,
|
|
184
|
-
session,
|
|
185
|
-
name="",
|
|
186
|
-
project="",
|
|
187
|
-
tag="",
|
|
188
|
-
labels=None,
|
|
189
|
-
since=None,
|
|
190
|
-
until=None,
|
|
191
|
-
kind=None,
|
|
192
|
-
category: schemas.ArtifactCategories = None,
|
|
193
|
-
iter: int = None,
|
|
194
|
-
best_iteration: bool = False,
|
|
195
|
-
as_records: bool = False,
|
|
196
|
-
use_tag_as_uid: bool = None,
|
|
197
|
-
):
|
|
198
|
-
return self._transform_run_db_error(
|
|
199
|
-
self.db.list_artifacts, name, project, tag, labels, since, until
|
|
200
|
-
)
|
|
201
|
-
|
|
202
|
-
def del_artifact(self, session, key, tag="", project=""):
|
|
203
|
-
return self._transform_run_db_error(self.db.del_artifact, key, tag, project)
|
|
204
|
-
|
|
205
|
-
def del_artifacts(self, session, name="", project="", tag="", labels=None):
|
|
206
|
-
return self._transform_run_db_error(
|
|
207
|
-
self.db.del_artifacts, name, project, tag, labels
|
|
208
|
-
)
|
|
209
|
-
|
|
210
|
-
def store_function(
|
|
211
|
-
self,
|
|
212
|
-
session,
|
|
213
|
-
function,
|
|
214
|
-
name,
|
|
215
|
-
project="",
|
|
216
|
-
tag="",
|
|
217
|
-
versioned=False,
|
|
218
|
-
) -> str:
|
|
219
|
-
return self._transform_run_db_error(
|
|
220
|
-
self.db.store_function, function, name, project, tag, versioned
|
|
221
|
-
)
|
|
222
|
-
|
|
223
|
-
def get_function(self, session, name, project="", tag="", hash_key=""):
|
|
224
|
-
return self._transform_run_db_error(
|
|
225
|
-
self.db.get_function, name, project, tag, hash_key
|
|
226
|
-
)
|
|
227
|
-
|
|
228
|
-
def delete_function(self, session, project: str, name: str):
|
|
229
|
-
raise NotImplementedError()
|
|
230
|
-
|
|
231
|
-
def list_functions(
|
|
232
|
-
self, session, name=None, project="", tag="", labels=None, hash_key=None
|
|
233
|
-
):
|
|
234
|
-
return self._transform_run_db_error(
|
|
235
|
-
self.db.list_functions, name, project, tag, labels
|
|
236
|
-
)
|
|
237
|
-
|
|
238
|
-
def store_schedule(self, session, data):
|
|
239
|
-
return self._transform_run_db_error(self.db.store_schedule, data)
|
|
240
|
-
|
|
241
|
-
def generate_projects_summaries(
|
|
242
|
-
self, session, projects: List[str]
|
|
243
|
-
) -> List[schemas.ProjectSummary]:
|
|
244
|
-
raise NotImplementedError()
|
|
245
|
-
|
|
246
|
-
def delete_project_related_resources(self, session, name: str):
|
|
247
|
-
raise NotImplementedError()
|
|
248
|
-
|
|
249
|
-
def verify_project_has_no_related_resources(self, session, name: str):
|
|
250
|
-
raise NotImplementedError()
|
|
251
|
-
|
|
252
|
-
def is_project_exists(self, session, name: str):
|
|
253
|
-
raise NotImplementedError()
|
|
254
|
-
|
|
255
|
-
def list_projects(
|
|
256
|
-
self,
|
|
257
|
-
session,
|
|
258
|
-
owner: str = None,
|
|
259
|
-
format_: schemas.ProjectsFormat = schemas.ProjectsFormat.full,
|
|
260
|
-
labels: List[str] = None,
|
|
261
|
-
state: schemas.ProjectState = None,
|
|
262
|
-
names: Optional[List[str]] = None,
|
|
263
|
-
) -> schemas.ProjectsOutput:
|
|
264
|
-
return self._transform_run_db_error(
|
|
265
|
-
self.db.list_projects, owner, format_, labels, state
|
|
266
|
-
)
|
|
267
|
-
|
|
268
|
-
async def get_project_resources_counters(
|
|
269
|
-
self,
|
|
270
|
-
) -> Tuple[
|
|
271
|
-
Dict[str, int],
|
|
272
|
-
Dict[str, int],
|
|
273
|
-
Dict[str, int],
|
|
274
|
-
Dict[str, int],
|
|
275
|
-
Dict[str, int],
|
|
276
|
-
Dict[str, int],
|
|
277
|
-
]:
|
|
278
|
-
raise NotImplementedError()
|
|
279
|
-
|
|
280
|
-
def store_project(self, session, name: str, project: schemas.Project):
|
|
281
|
-
raise NotImplementedError()
|
|
282
|
-
|
|
283
|
-
def patch_project(
|
|
284
|
-
self,
|
|
285
|
-
session,
|
|
286
|
-
name: str,
|
|
287
|
-
project: dict,
|
|
288
|
-
patch_mode: schemas.PatchMode = schemas.PatchMode.replace,
|
|
289
|
-
):
|
|
290
|
-
raise NotImplementedError()
|
|
291
|
-
|
|
292
|
-
def create_project(self, session, project: schemas.Project):
|
|
293
|
-
raise NotImplementedError()
|
|
294
|
-
|
|
295
|
-
def get_project(
|
|
296
|
-
self, session, name: str = None, project_id: int = None
|
|
297
|
-
) -> schemas.Project:
|
|
298
|
-
raise NotImplementedError()
|
|
299
|
-
|
|
300
|
-
def delete_project(
|
|
301
|
-
self,
|
|
302
|
-
session,
|
|
303
|
-
name: str,
|
|
304
|
-
deletion_strategy: schemas.DeletionStrategy = schemas.DeletionStrategy.default(),
|
|
305
|
-
):
|
|
306
|
-
raise NotImplementedError()
|
|
307
|
-
|
|
308
|
-
def create_feature_set(
|
|
309
|
-
self,
|
|
310
|
-
session,
|
|
311
|
-
project,
|
|
312
|
-
feature_set: schemas.FeatureSet,
|
|
313
|
-
versioned=True,
|
|
314
|
-
) -> str:
|
|
315
|
-
raise NotImplementedError()
|
|
316
|
-
|
|
317
|
-
def store_feature_set(
|
|
318
|
-
self,
|
|
319
|
-
session,
|
|
320
|
-
project,
|
|
321
|
-
name,
|
|
322
|
-
feature_set: schemas.FeatureSet,
|
|
323
|
-
tag=None,
|
|
324
|
-
uid=None,
|
|
325
|
-
versioned=True,
|
|
326
|
-
always_overwrite=False,
|
|
327
|
-
) -> str:
|
|
328
|
-
raise NotImplementedError()
|
|
329
|
-
|
|
330
|
-
def get_feature_set(
|
|
331
|
-
self, session, project: str, name: str, tag: str = None, uid: str = None
|
|
332
|
-
) -> schemas.FeatureSet:
|
|
333
|
-
raise NotImplementedError()
|
|
334
|
-
|
|
335
|
-
def list_features(
|
|
336
|
-
self,
|
|
337
|
-
session,
|
|
338
|
-
project: str,
|
|
339
|
-
name: str = None,
|
|
340
|
-
tag: str = None,
|
|
341
|
-
entities: List[str] = None,
|
|
342
|
-
labels: List[str] = None,
|
|
343
|
-
) -> schemas.FeaturesOutput:
|
|
344
|
-
raise NotImplementedError()
|
|
345
|
-
|
|
346
|
-
def list_entities(
|
|
347
|
-
self,
|
|
348
|
-
session,
|
|
349
|
-
project: str,
|
|
350
|
-
name: str = None,
|
|
351
|
-
tag: str = None,
|
|
352
|
-
labels: List[str] = None,
|
|
353
|
-
) -> schemas.EntitiesOutput:
|
|
354
|
-
pass
|
|
355
|
-
|
|
356
|
-
def list_feature_sets(
|
|
357
|
-
self,
|
|
358
|
-
session,
|
|
359
|
-
project: str,
|
|
360
|
-
name: str = None,
|
|
361
|
-
tag: str = None,
|
|
362
|
-
state: str = None,
|
|
363
|
-
entities: List[str] = None,
|
|
364
|
-
features: List[str] = None,
|
|
365
|
-
labels: List[str] = None,
|
|
366
|
-
partition_by: schemas.FeatureStorePartitionByField = None,
|
|
367
|
-
rows_per_partition: int = 1,
|
|
368
|
-
partition_sort_by: schemas.SortField = None,
|
|
369
|
-
partition_order: schemas.OrderType = schemas.OrderType.desc,
|
|
370
|
-
) -> schemas.FeatureSetsOutput:
|
|
371
|
-
raise NotImplementedError()
|
|
372
|
-
|
|
373
|
-
def list_feature_sets_tags(
|
|
374
|
-
self,
|
|
375
|
-
session,
|
|
376
|
-
project: str,
|
|
377
|
-
):
|
|
378
|
-
raise NotImplementedError()
|
|
379
|
-
|
|
380
|
-
def patch_feature_set(
|
|
381
|
-
self,
|
|
382
|
-
session,
|
|
383
|
-
project,
|
|
384
|
-
name,
|
|
385
|
-
feature_set_patch: dict,
|
|
386
|
-
tag=None,
|
|
387
|
-
uid=None,
|
|
388
|
-
patch_mode: schemas.PatchMode = schemas.PatchMode.replace,
|
|
389
|
-
) -> str:
|
|
390
|
-
raise NotImplementedError()
|
|
391
|
-
|
|
392
|
-
def delete_feature_set(self, session, project, name, tag=None, uid=None):
|
|
393
|
-
raise NotImplementedError()
|
|
394
|
-
|
|
395
|
-
def create_feature_vector(
|
|
396
|
-
self,
|
|
397
|
-
session,
|
|
398
|
-
project,
|
|
399
|
-
feature_vector: schemas.FeatureVector,
|
|
400
|
-
versioned=True,
|
|
401
|
-
) -> str:
|
|
402
|
-
raise NotImplementedError()
|
|
403
|
-
|
|
404
|
-
def get_feature_vector(
|
|
405
|
-
self, session, project: str, name: str, tag: str = None, uid: str = None
|
|
406
|
-
) -> schemas.FeatureVector:
|
|
407
|
-
raise NotImplementedError()
|
|
408
|
-
|
|
409
|
-
def list_feature_vectors(
|
|
410
|
-
self,
|
|
411
|
-
session,
|
|
412
|
-
project: str,
|
|
413
|
-
name: str = None,
|
|
414
|
-
tag: str = None,
|
|
415
|
-
state: str = None,
|
|
416
|
-
labels: List[str] = None,
|
|
417
|
-
partition_by: schemas.FeatureStorePartitionByField = None,
|
|
418
|
-
rows_per_partition: int = 1,
|
|
419
|
-
partition_sort_by: schemas.SortField = None,
|
|
420
|
-
partition_order: schemas.OrderType = schemas.OrderType.desc,
|
|
421
|
-
) -> schemas.FeatureVectorsOutput:
|
|
422
|
-
raise NotImplementedError()
|
|
423
|
-
|
|
424
|
-
def list_feature_vectors_tags(
|
|
425
|
-
self,
|
|
426
|
-
session,
|
|
427
|
-
project: str,
|
|
428
|
-
):
|
|
429
|
-
raise NotImplementedError()
|
|
430
|
-
|
|
431
|
-
def store_feature_vector(
|
|
432
|
-
self,
|
|
433
|
-
session,
|
|
434
|
-
project,
|
|
435
|
-
name,
|
|
436
|
-
feature_vector: schemas.FeatureVector,
|
|
437
|
-
tag=None,
|
|
438
|
-
uid=None,
|
|
439
|
-
versioned=True,
|
|
440
|
-
always_overwrite=False,
|
|
441
|
-
) -> str:
|
|
442
|
-
raise NotImplementedError()
|
|
443
|
-
|
|
444
|
-
def patch_feature_vector(
|
|
445
|
-
self,
|
|
446
|
-
session,
|
|
447
|
-
project,
|
|
448
|
-
name,
|
|
449
|
-
feature_vector_update: dict,
|
|
450
|
-
tag=None,
|
|
451
|
-
uid=None,
|
|
452
|
-
patch_mode: schemas.PatchMode = schemas.PatchMode.replace,
|
|
453
|
-
) -> str:
|
|
454
|
-
raise NotImplementedError()
|
|
455
|
-
|
|
456
|
-
def delete_feature_vector(self, session, project, name, tag=None, uid=None):
|
|
457
|
-
raise NotImplementedError()
|
|
458
|
-
|
|
459
|
-
def list_artifact_tags(
|
|
460
|
-
self, session, project, category: Union[str, schemas.ArtifactCategories] = None
|
|
461
|
-
):
|
|
462
|
-
return self._transform_run_db_error(
|
|
463
|
-
self.db.list_artifact_tags, project, category
|
|
464
|
-
)
|
|
465
|
-
|
|
466
|
-
def create_schedule(
|
|
467
|
-
self,
|
|
468
|
-
session,
|
|
469
|
-
project: str,
|
|
470
|
-
name: str,
|
|
471
|
-
kind: schemas.ScheduleKinds,
|
|
472
|
-
scheduled_object: Any,
|
|
473
|
-
cron_trigger: schemas.ScheduleCronTrigger,
|
|
474
|
-
concurrency_limit: int,
|
|
475
|
-
labels: Dict = None,
|
|
476
|
-
next_run_time: datetime.datetime = None,
|
|
477
|
-
):
|
|
478
|
-
raise NotImplementedError()
|
|
479
|
-
|
|
480
|
-
def update_schedule(
|
|
481
|
-
self,
|
|
482
|
-
session,
|
|
483
|
-
project: str,
|
|
484
|
-
name: str,
|
|
485
|
-
scheduled_object: Any = None,
|
|
486
|
-
cron_trigger: schemas.ScheduleCronTrigger = None,
|
|
487
|
-
labels: Dict = None,
|
|
488
|
-
last_run_uri: str = None,
|
|
489
|
-
concurrency_limit: int = None,
|
|
490
|
-
next_run_time: datetime.datetime = None,
|
|
491
|
-
):
|
|
492
|
-
raise NotImplementedError()
|
|
493
|
-
|
|
494
|
-
def list_schedules(
|
|
495
|
-
self,
|
|
496
|
-
session,
|
|
497
|
-
project: str = None,
|
|
498
|
-
name: str = None,
|
|
499
|
-
labels: str = None,
|
|
500
|
-
kind: schemas.ScheduleKinds = None,
|
|
501
|
-
) -> List[schemas.ScheduleRecord]:
|
|
502
|
-
raise NotImplementedError()
|
|
503
|
-
|
|
504
|
-
def get_schedule(self, session, project: str, name: str) -> schemas.ScheduleRecord:
|
|
505
|
-
raise NotImplementedError()
|
|
506
|
-
|
|
507
|
-
def delete_schedule(self, session, project: str, name: str):
|
|
508
|
-
raise NotImplementedError()
|
|
509
|
-
|
|
510
|
-
def delete_schedules(self, session, project: str):
|
|
511
|
-
raise NotImplementedError()
|
|
512
|
-
|
|
513
|
-
@staticmethod
|
|
514
|
-
def _transform_run_db_error(func, *args, **kwargs):
|
|
515
|
-
try:
|
|
516
|
-
return func(*args, **kwargs)
|
|
517
|
-
except RunDBError as exc:
|
|
518
|
-
raise DBError(exc.args)
|
mlrun/api/schemas/marketplace.py
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
# Copyright 2018 Iguazio
|
|
2
|
-
#
|
|
3
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
# you may not use this file except in compliance with the License.
|
|
5
|
-
# You may obtain a copy of the License at
|
|
6
|
-
#
|
|
7
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
#
|
|
9
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
# See the License for the specific language governing permissions and
|
|
13
|
-
# limitations under the License.
|
|
14
|
-
#
|
|
15
|
-
from datetime import datetime, timezone
|
|
16
|
-
from typing import List, Optional
|
|
17
|
-
|
|
18
|
-
from pydantic import BaseModel, Extra, Field
|
|
19
|
-
|
|
20
|
-
import mlrun.api.utils.helpers
|
|
21
|
-
import mlrun.errors
|
|
22
|
-
from mlrun.api.schemas.object import ObjectKind, ObjectSpec, ObjectStatus
|
|
23
|
-
from mlrun.config import config
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
# Defining a different base class (not ObjectMetadata), as there's no project and it differs enough to
|
|
27
|
-
# justify a new class
|
|
28
|
-
class MarketplaceObjectMetadata(BaseModel):
|
|
29
|
-
name: str
|
|
30
|
-
description: str = ""
|
|
31
|
-
labels: Optional[dict] = {}
|
|
32
|
-
updated: Optional[datetime]
|
|
33
|
-
created: Optional[datetime]
|
|
34
|
-
|
|
35
|
-
class Config:
|
|
36
|
-
extra = Extra.allow
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
# Currently only functions are supported. Will add more in the future.
|
|
40
|
-
class MarketplaceSourceType(mlrun.api.utils.helpers.StrEnum):
|
|
41
|
-
functions = "functions"
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
# Sources-related objects
|
|
45
|
-
class MarketplaceSourceSpec(ObjectSpec):
|
|
46
|
-
path: str # URL to base directory, should include schema (s3://, etc...)
|
|
47
|
-
channel: str
|
|
48
|
-
credentials: Optional[dict] = {}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
class MarketplaceSource(BaseModel):
|
|
52
|
-
kind: ObjectKind = Field(ObjectKind.marketplace_source, const=True)
|
|
53
|
-
metadata: MarketplaceObjectMetadata
|
|
54
|
-
spec: MarketplaceSourceSpec
|
|
55
|
-
status: Optional[ObjectStatus] = ObjectStatus(state="created")
|
|
56
|
-
|
|
57
|
-
def get_full_uri(self, relative_path):
|
|
58
|
-
return "{base}/{channel}/{relative_path}".format(
|
|
59
|
-
base=self.spec.path, channel=self.spec.channel, relative_path=relative_path
|
|
60
|
-
)
|
|
61
|
-
|
|
62
|
-
def get_catalog_uri(self):
|
|
63
|
-
return self.get_full_uri(config.marketplace.catalog_filename)
|
|
64
|
-
|
|
65
|
-
@classmethod
|
|
66
|
-
def generate_default_source(cls):
|
|
67
|
-
if not config.marketplace.default_source.create:
|
|
68
|
-
return None
|
|
69
|
-
|
|
70
|
-
now = datetime.now(timezone.utc)
|
|
71
|
-
hub_metadata = MarketplaceObjectMetadata(
|
|
72
|
-
name=config.marketplace.default_source.name,
|
|
73
|
-
description=config.marketplace.default_source.description,
|
|
74
|
-
created=now,
|
|
75
|
-
updated=now,
|
|
76
|
-
)
|
|
77
|
-
return cls(
|
|
78
|
-
metadata=hub_metadata,
|
|
79
|
-
spec=MarketplaceSourceSpec(
|
|
80
|
-
path=config.marketplace.default_source.url,
|
|
81
|
-
channel=config.marketplace.default_source.channel,
|
|
82
|
-
),
|
|
83
|
-
status=ObjectStatus(state="created"),
|
|
84
|
-
)
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
last_source_index = -1
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
class IndexedMarketplaceSource(BaseModel):
|
|
91
|
-
index: int = last_source_index # Default last. Otherwise must be > 0
|
|
92
|
-
source: MarketplaceSource
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
# Item-related objects
|
|
96
|
-
class MarketplaceItemMetadata(MarketplaceObjectMetadata):
|
|
97
|
-
source: MarketplaceSourceType = Field(MarketplaceSourceType.functions, const=True)
|
|
98
|
-
channel: str
|
|
99
|
-
version: str
|
|
100
|
-
tag: Optional[str]
|
|
101
|
-
|
|
102
|
-
def get_relative_path(self) -> str:
|
|
103
|
-
if self.source == MarketplaceSourceType.functions:
|
|
104
|
-
# This is needed since the marketplace deployment script modifies the paths to use _ instead of -.
|
|
105
|
-
modified_name = self.name.replace("-", "_")
|
|
106
|
-
# Prefer using the tag if exists. Otherwise use version.
|
|
107
|
-
version = self.tag or self.version
|
|
108
|
-
return f"{self.source.value}/{self.channel}/{modified_name}/{version}/"
|
|
109
|
-
else:
|
|
110
|
-
raise mlrun.errors.MLRunInvalidArgumentError(
|
|
111
|
-
f"Bad source for marketplace item - {self.source}"
|
|
112
|
-
)
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
class MarketplaceItemSpec(ObjectSpec):
|
|
116
|
-
item_uri: str
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
class MarketplaceItem(BaseModel):
|
|
120
|
-
kind: ObjectKind = Field(ObjectKind.marketplace_item, const=True)
|
|
121
|
-
metadata: MarketplaceItemMetadata
|
|
122
|
-
spec: MarketplaceItemSpec
|
|
123
|
-
status: ObjectStatus
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
class MarketplaceCatalog(BaseModel):
|
|
127
|
-
kind: ObjectKind = Field(ObjectKind.marketplace_catalog, const=True)
|
|
128
|
-
catalog: List[MarketplaceItem]
|