mlrun 1.8.0rc1__py3-none-any.whl → 1.8.0rc2__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 +5 -7
- mlrun/__main__.py +1 -1
- mlrun/common/formatters/project.py +9 -0
- mlrun/common/schemas/__init__.py +3 -0
- mlrun/common/schemas/alert.py +31 -18
- mlrun/common/schemas/api_gateway.py +3 -3
- mlrun/common/schemas/artifact.py +7 -7
- mlrun/common/schemas/auth.py +6 -4
- mlrun/common/schemas/background_task.py +7 -7
- mlrun/common/schemas/client_spec.py +2 -2
- mlrun/common/schemas/clusterization_spec.py +2 -2
- mlrun/common/schemas/common.py +5 -5
- mlrun/common/schemas/datastore_profile.py +1 -1
- mlrun/common/schemas/feature_store.py +9 -9
- mlrun/common/schemas/frontend_spec.py +4 -4
- mlrun/common/schemas/function.py +10 -10
- mlrun/common/schemas/hub.py +1 -1
- mlrun/common/schemas/k8s.py +3 -3
- mlrun/common/schemas/memory_reports.py +3 -3
- mlrun/common/schemas/model_monitoring/grafana.py +1 -1
- mlrun/common/schemas/model_monitoring/model_endpoint_v2.py +1 -1
- mlrun/common/schemas/model_monitoring/model_endpoints.py +1 -1
- mlrun/common/schemas/notification.py +18 -3
- mlrun/common/schemas/object.py +1 -1
- mlrun/common/schemas/pagination.py +4 -4
- mlrun/common/schemas/partition.py +16 -1
- mlrun/common/schemas/pipeline.py +2 -2
- mlrun/common/schemas/project.py +22 -17
- mlrun/common/schemas/runs.py +2 -2
- mlrun/common/schemas/runtime_resource.py +5 -5
- mlrun/common/schemas/schedule.py +1 -1
- mlrun/common/schemas/secret.py +1 -1
- mlrun/common/schemas/tag.py +3 -3
- mlrun/common/schemas/workflow.py +5 -5
- mlrun/config.py +22 -0
- mlrun/datastore/datastore_profile.py +19 -19
- mlrun/db/base.py +48 -6
- mlrun/db/httpdb.py +221 -9
- mlrun/db/nopdb.py +34 -5
- mlrun/model.py +2 -2
- mlrun/model_monitoring/applications/results.py +2 -2
- mlrun/model_monitoring/db/tsdb/base.py +2 -2
- mlrun/model_monitoring/db/tsdb/tdengine/schemas.py +37 -13
- mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +32 -40
- mlrun/model_monitoring/helpers.py +4 -10
- mlrun/model_monitoring/stream_processing.py +14 -11
- mlrun/platforms/__init__.py +0 -13
- mlrun/projects/__init__.py +6 -1
- mlrun/projects/pipelines.py +184 -55
- mlrun/projects/project.py +95 -28
- mlrun/run.py +4 -1
- mlrun/runtimes/base.py +2 -1
- mlrun/runtimes/mounts.py +572 -0
- mlrun/runtimes/nuclio/function.py +1 -2
- mlrun/runtimes/pod.py +82 -18
- mlrun/runtimes/remotesparkjob.py +1 -1
- mlrun/runtimes/sparkjob/spark3job.py +1 -1
- mlrun/utils/helpers.py +12 -2
- mlrun/utils/logger.py +2 -2
- mlrun/utils/notifications/notification/__init__.py +22 -19
- mlrun/utils/notifications/notification/base.py +12 -12
- mlrun/utils/notifications/notification/console.py +6 -6
- mlrun/utils/notifications/notification/git.py +6 -6
- mlrun/utils/notifications/notification/ipython.py +6 -6
- mlrun/utils/notifications/notification/mail.py +149 -0
- mlrun/utils/notifications/notification/slack.py +6 -6
- mlrun/utils/notifications/notification/webhook.py +6 -6
- mlrun/utils/notifications/notification_pusher.py +20 -12
- mlrun/utils/regex.py +2 -0
- mlrun/utils/version/version.json +2 -2
- {mlrun-1.8.0rc1.dist-info → mlrun-1.8.0rc2.dist-info}/METADATA +190 -186
- {mlrun-1.8.0rc1.dist-info → mlrun-1.8.0rc2.dist-info}/RECORD +76 -74
- {mlrun-1.8.0rc1.dist-info → mlrun-1.8.0rc2.dist-info}/WHEEL +1 -1
- {mlrun-1.8.0rc1.dist-info → mlrun-1.8.0rc2.dist-info}/LICENSE +0 -0
- {mlrun-1.8.0rc1.dist-info → mlrun-1.8.0rc2.dist-info}/entry_points.txt +0 -0
- {mlrun-1.8.0rc1.dist-info → mlrun-1.8.0rc2.dist-info}/top_level.txt +0 -0
mlrun/__init__.py
CHANGED
|
@@ -31,8 +31,6 @@ from typing import Optional
|
|
|
31
31
|
|
|
32
32
|
import dotenv
|
|
33
33
|
|
|
34
|
-
import mlrun_pipelines
|
|
35
|
-
|
|
36
34
|
from .config import config as mlconf
|
|
37
35
|
from .datastore import DataItem, store_manager
|
|
38
36
|
from .db import get_run_db
|
|
@@ -63,16 +61,16 @@ from .run import (
|
|
|
63
61
|
new_function,
|
|
64
62
|
wait_for_pipeline_completion,
|
|
65
63
|
)
|
|
66
|
-
from .runtimes import new_model_server
|
|
64
|
+
from .runtimes import mounts, new_model_server
|
|
67
65
|
from .secrets import get_secret_or_env
|
|
68
66
|
from .utils.version import Version
|
|
69
67
|
|
|
70
68
|
__version__ = Version().get()["version"]
|
|
71
69
|
|
|
72
|
-
VolumeMount =
|
|
73
|
-
mount_v3io =
|
|
74
|
-
v3io_cred =
|
|
75
|
-
auto_mount =
|
|
70
|
+
VolumeMount = mounts.VolumeMount
|
|
71
|
+
mount_v3io = mounts.mount_v3io
|
|
72
|
+
v3io_cred = mounts.v3io_cred
|
|
73
|
+
auto_mount = mounts.auto_mount
|
|
76
74
|
|
|
77
75
|
|
|
78
76
|
def get_version():
|
mlrun/__main__.py
CHANGED
|
@@ -33,7 +33,7 @@ import mlrun
|
|
|
33
33
|
import mlrun.common.constants as mlrun_constants
|
|
34
34
|
import mlrun.common.schemas
|
|
35
35
|
from mlrun.common.helpers import parse_versioned_object_uri
|
|
36
|
-
from
|
|
36
|
+
from mlrun.runtimes.mounts import auto_mount as auto_mount_modifier
|
|
37
37
|
|
|
38
38
|
from .config import config as mlconf
|
|
39
39
|
from .db import get_run_db
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
#
|
|
15
15
|
|
|
16
|
+
import datetime
|
|
16
17
|
import typing
|
|
17
18
|
|
|
18
19
|
import mlrun.common.schemas
|
|
@@ -30,11 +31,18 @@ class ProjectFormat(ObjectFormat, mlrun.common.types.StrEnum):
|
|
|
30
31
|
# internal - allowed only in follower mode, only for the leader for upgrade purposes
|
|
31
32
|
leader = "leader"
|
|
32
33
|
|
|
34
|
+
name_and_creation_time = "name_and_creation_time"
|
|
35
|
+
|
|
33
36
|
@staticmethod
|
|
34
37
|
def format_method(_format: str) -> typing.Optional[typing.Callable]:
|
|
35
38
|
def _name_only(project: mlrun.common.schemas.Project) -> str:
|
|
36
39
|
return project.metadata.name
|
|
37
40
|
|
|
41
|
+
def _name_and_creation_time(
|
|
42
|
+
project: mlrun.common.schemas.Project,
|
|
43
|
+
) -> tuple[str, datetime.datetime]:
|
|
44
|
+
return project.metadata.name, project.metadata.created
|
|
45
|
+
|
|
38
46
|
def _minimal(
|
|
39
47
|
project: mlrun.common.schemas.Project,
|
|
40
48
|
) -> mlrun.common.schemas.Project:
|
|
@@ -48,4 +56,5 @@ class ProjectFormat(ObjectFormat, mlrun.common.types.StrEnum):
|
|
|
48
56
|
ProjectFormat.name_only: _name_only,
|
|
49
57
|
ProjectFormat.minimal: _minimal,
|
|
50
58
|
ProjectFormat.leader: None,
|
|
59
|
+
ProjectFormat.name_and_creation_time: _name_and_creation_time,
|
|
51
60
|
}[_format]
|
mlrun/common/schemas/__init__.py
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
from .alert import (
|
|
16
|
+
AlertActivation,
|
|
16
17
|
AlertActiveState,
|
|
17
18
|
AlertConfig,
|
|
18
19
|
AlertNotification,
|
|
@@ -161,11 +162,13 @@ from .notification import (
|
|
|
161
162
|
Notification,
|
|
162
163
|
NotificationKind,
|
|
163
164
|
NotificationSeverity,
|
|
165
|
+
NotificationState,
|
|
164
166
|
NotificationStatus,
|
|
165
167
|
SetNotificationRequest,
|
|
166
168
|
)
|
|
167
169
|
from .object import ObjectKind, ObjectMetadata, ObjectSpec, ObjectStatus
|
|
168
170
|
from .pagination import PaginationInfo
|
|
171
|
+
from .partition import PartitionInterval
|
|
169
172
|
from .pipeline import PipelinesOutput, PipelinesPagination
|
|
170
173
|
from .project import (
|
|
171
174
|
IguazioProject,
|
mlrun/common/schemas/alert.py
CHANGED
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
from datetime import datetime
|
|
16
16
|
from typing import Annotated, Optional, Union
|
|
17
17
|
|
|
18
|
-
import pydantic
|
|
18
|
+
import pydantic.v1
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
import mlrun.common.schemas.notification as notification_objects
|
|
21
21
|
from mlrun.common.types import StrEnum
|
|
22
22
|
|
|
23
23
|
|
|
@@ -27,10 +27,10 @@ class EventEntityKind(StrEnum):
|
|
|
27
27
|
JOB = "job"
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
class EventEntities(pydantic.BaseModel):
|
|
30
|
+
class EventEntities(pydantic.v1.BaseModel):
|
|
31
31
|
kind: EventEntityKind
|
|
32
32
|
project: str
|
|
33
|
-
ids: pydantic.conlist(str, min_items=1, max_items=1)
|
|
33
|
+
ids: pydantic.v1.conlist(str, min_items=1, max_items=1)
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
class EventKind(StrEnum):
|
|
@@ -64,11 +64,11 @@ _event_kind_entity_map = {
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
|
|
67
|
-
class Event(pydantic.BaseModel):
|
|
67
|
+
class Event(pydantic.v1.BaseModel):
|
|
68
68
|
kind: EventKind
|
|
69
69
|
timestamp: Union[str, datetime] = None # occurrence time
|
|
70
70
|
entity: EventEntities
|
|
71
|
-
value_dict: Optional[dict] = pydantic.Field(default_factory=dict)
|
|
71
|
+
value_dict: Optional[dict] = pydantic.v1.Field(default_factory=dict)
|
|
72
72
|
|
|
73
73
|
def is_valid(self):
|
|
74
74
|
return self.entity.kind in _event_kind_entity_map[self.kind]
|
|
@@ -86,7 +86,7 @@ class AlertSeverity(StrEnum):
|
|
|
86
86
|
|
|
87
87
|
|
|
88
88
|
# what should trigger the alert. must be either event (at least 1), or prometheus query
|
|
89
|
-
class AlertTrigger(pydantic.BaseModel):
|
|
89
|
+
class AlertTrigger(pydantic.v1.BaseModel):
|
|
90
90
|
events: list[EventKind] = []
|
|
91
91
|
prometheus_alert: str = None
|
|
92
92
|
|
|
@@ -97,16 +97,16 @@ class AlertTrigger(pydantic.BaseModel):
|
|
|
97
97
|
)
|
|
98
98
|
|
|
99
99
|
|
|
100
|
-
class AlertCriteria(pydantic.BaseModel):
|
|
100
|
+
class AlertCriteria(pydantic.v1.BaseModel):
|
|
101
101
|
count: Annotated[
|
|
102
102
|
int,
|
|
103
|
-
pydantic.Field(
|
|
103
|
+
pydantic.v1.Field(
|
|
104
104
|
description="Number of events to wait until notification is sent"
|
|
105
105
|
),
|
|
106
106
|
] = 1
|
|
107
107
|
period: Annotated[
|
|
108
108
|
str,
|
|
109
|
-
pydantic.Field(
|
|
109
|
+
pydantic.v1.Field(
|
|
110
110
|
description="Time period during which event occurred. e.g. 1d, 3h, 5m, 15s"
|
|
111
111
|
),
|
|
112
112
|
] = None
|
|
@@ -120,11 +120,11 @@ class ResetPolicy(StrEnum):
|
|
|
120
120
|
AUTO = "auto"
|
|
121
121
|
|
|
122
122
|
|
|
123
|
-
class AlertNotification(pydantic.BaseModel):
|
|
124
|
-
notification: Notification
|
|
123
|
+
class AlertNotification(pydantic.v1.BaseModel):
|
|
124
|
+
notification: notification_objects.Notification
|
|
125
125
|
cooldown_period: Annotated[
|
|
126
126
|
str,
|
|
127
|
-
pydantic.Field(
|
|
127
|
+
pydantic.v1.Field(
|
|
128
128
|
description="Period during which notifications "
|
|
129
129
|
"will not be sent after initial send. The format of this would be in time."
|
|
130
130
|
" e.g. 1d, 3h, 5m, 15s"
|
|
@@ -132,14 +132,14 @@ class AlertNotification(pydantic.BaseModel):
|
|
|
132
132
|
] = None
|
|
133
133
|
|
|
134
134
|
|
|
135
|
-
class AlertConfig(pydantic.BaseModel):
|
|
135
|
+
class AlertConfig(pydantic.v1.BaseModel):
|
|
136
136
|
project: str
|
|
137
137
|
id: int = None
|
|
138
138
|
name: str
|
|
139
139
|
description: Optional[str] = ""
|
|
140
140
|
summary: Annotated[
|
|
141
141
|
str,
|
|
142
|
-
pydantic.Field(
|
|
142
|
+
pydantic.v1.Field(
|
|
143
143
|
description=(
|
|
144
144
|
"String to be sent in the notifications generated."
|
|
145
145
|
"e.g. 'Model {{project}}/{{entity}} is drifting.'"
|
|
@@ -153,11 +153,11 @@ class AlertConfig(pydantic.BaseModel):
|
|
|
153
153
|
trigger: AlertTrigger
|
|
154
154
|
criteria: Optional[AlertCriteria]
|
|
155
155
|
reset_policy: ResetPolicy = ResetPolicy.AUTO
|
|
156
|
-
notifications: pydantic.conlist(AlertNotification, min_items=1)
|
|
156
|
+
notifications: pydantic.v1.conlist(AlertNotification, min_items=1)
|
|
157
157
|
state: AlertActiveState = AlertActiveState.INACTIVE
|
|
158
158
|
count: Optional[int] = 0
|
|
159
159
|
|
|
160
|
-
def get_raw_notifications(self) -> list[Notification]:
|
|
160
|
+
def get_raw_notifications(self) -> list[notification_objects.Notification]:
|
|
161
161
|
return [
|
|
162
162
|
alert_notification.notification for alert_notification in self.notifications
|
|
163
163
|
]
|
|
@@ -169,7 +169,7 @@ class AlertsModes(StrEnum):
|
|
|
169
169
|
|
|
170
170
|
|
|
171
171
|
class AlertTemplate(
|
|
172
|
-
pydantic.BaseModel
|
|
172
|
+
pydantic.v1.BaseModel
|
|
173
173
|
): # Template fields that are not shared with created configs
|
|
174
174
|
template_id: int = None
|
|
175
175
|
template_name: str
|
|
@@ -200,3 +200,16 @@ class AlertTemplate(
|
|
|
200
200
|
or self.reset_policy != other.reset_policy
|
|
201
201
|
or self.criteria != other.criteria
|
|
202
202
|
)
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
class AlertActivation(pydantic.v1.BaseModel):
|
|
206
|
+
name: str
|
|
207
|
+
project: str
|
|
208
|
+
severity: AlertSeverity
|
|
209
|
+
activation_time: datetime
|
|
210
|
+
entity_id: str
|
|
211
|
+
entity_kind: EventEntityKind
|
|
212
|
+
criteria: AlertCriteria
|
|
213
|
+
event_kind: EventKind
|
|
214
|
+
number_of_events: int
|
|
215
|
+
notifications: list[notification_objects.NotificationState]
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import typing
|
|
16
16
|
from typing import Optional
|
|
17
17
|
|
|
18
|
-
import pydantic
|
|
18
|
+
import pydantic.v1
|
|
19
19
|
|
|
20
20
|
import mlrun.common.constants as mlrun_constants
|
|
21
21
|
import mlrun.common.types
|
|
@@ -49,9 +49,9 @@ class APIGatewayState(mlrun.common.types.StrEnum):
|
|
|
49
49
|
waiting_for_provisioning = "waitingForProvisioning"
|
|
50
50
|
|
|
51
51
|
|
|
52
|
-
class _APIGatewayBaseModel(pydantic.BaseModel):
|
|
52
|
+
class _APIGatewayBaseModel(pydantic.v1.BaseModel):
|
|
53
53
|
class Config:
|
|
54
|
-
extra = pydantic.Extra.allow
|
|
54
|
+
extra = pydantic.v1.Extra.allow
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
class APIGatewayMetadata(_APIGatewayBaseModel):
|
mlrun/common/schemas/artifact.py
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
#
|
|
15
15
|
import typing
|
|
16
16
|
|
|
17
|
-
import pydantic
|
|
17
|
+
import pydantic.v1
|
|
18
18
|
from deprecated import deprecated
|
|
19
19
|
|
|
20
20
|
import mlrun.common.types
|
|
@@ -48,7 +48,7 @@ class ArtifactCategories(mlrun.common.types.StrEnum):
|
|
|
48
48
|
)
|
|
49
49
|
|
|
50
50
|
|
|
51
|
-
class ArtifactIdentifier(pydantic.BaseModel):
|
|
51
|
+
class ArtifactIdentifier(pydantic.v1.BaseModel):
|
|
52
52
|
# artifact kind
|
|
53
53
|
kind: typing.Optional[str]
|
|
54
54
|
key: typing.Optional[str]
|
|
@@ -69,7 +69,7 @@ class ArtifactsFormat(mlrun.common.types.StrEnum):
|
|
|
69
69
|
full = "full"
|
|
70
70
|
|
|
71
71
|
|
|
72
|
-
class ArtifactMetadata(pydantic.BaseModel):
|
|
72
|
+
class ArtifactMetadata(pydantic.v1.BaseModel):
|
|
73
73
|
key: str
|
|
74
74
|
project: str
|
|
75
75
|
iter: typing.Optional[int]
|
|
@@ -77,10 +77,10 @@ class ArtifactMetadata(pydantic.BaseModel):
|
|
|
77
77
|
tag: typing.Optional[str]
|
|
78
78
|
|
|
79
79
|
class Config:
|
|
80
|
-
extra = pydantic.Extra.allow
|
|
80
|
+
extra = pydantic.v1.Extra.allow
|
|
81
81
|
|
|
82
82
|
|
|
83
|
-
class ArtifactSpec(pydantic.BaseModel):
|
|
83
|
+
class ArtifactSpec(pydantic.v1.BaseModel):
|
|
84
84
|
src_path: typing.Optional[str]
|
|
85
85
|
target_path: typing.Optional[str]
|
|
86
86
|
viewer: typing.Optional[str]
|
|
@@ -91,10 +91,10 @@ class ArtifactSpec(pydantic.BaseModel):
|
|
|
91
91
|
unpackaging_instructions: typing.Optional[dict[str, typing.Any]]
|
|
92
92
|
|
|
93
93
|
class Config:
|
|
94
|
-
extra = pydantic.Extra.allow
|
|
94
|
+
extra = pydantic.v1.Extra.allow
|
|
95
95
|
|
|
96
96
|
|
|
97
|
-
class Artifact(pydantic.BaseModel):
|
|
97
|
+
class Artifact(pydantic.v1.BaseModel):
|
|
98
98
|
kind: str
|
|
99
99
|
metadata: ArtifactMetadata
|
|
100
100
|
spec: ArtifactSpec
|
mlrun/common/schemas/auth.py
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
#
|
|
15
15
|
import typing
|
|
16
16
|
|
|
17
|
-
import pydantic
|
|
17
|
+
import pydantic.v1
|
|
18
18
|
from nuclio.auth import AuthInfo as NuclioAuthInfo
|
|
19
19
|
from nuclio.auth import AuthKinds as NuclioAuthKinds
|
|
20
20
|
|
|
@@ -59,6 +59,7 @@ class AuthorizationResourceTypes(mlrun.common.types.StrEnum):
|
|
|
59
59
|
hub_source = "hub-source"
|
|
60
60
|
workflow = "workflow"
|
|
61
61
|
alert = "alert"
|
|
62
|
+
alert_activations = "alert-activations"
|
|
62
63
|
alert_templates = "alert-templates"
|
|
63
64
|
event = "event"
|
|
64
65
|
datastore_profile = "datastore-profile"
|
|
@@ -90,6 +91,7 @@ class AuthorizationResourceTypes(mlrun.common.types.StrEnum):
|
|
|
90
91
|
AuthorizationResourceTypes.run: "/projects/{project_name}/runs/{resource_name}",
|
|
91
92
|
AuthorizationResourceTypes.event: "/projects/{project_name}/events/{resource_name}",
|
|
92
93
|
AuthorizationResourceTypes.alert: "/projects/{project_name}/alerts/{resource_name}",
|
|
94
|
+
AuthorizationResourceTypes.alert_activations: "/projects/{project_name}/alerts/{resource_name}/activations",
|
|
93
95
|
AuthorizationResourceTypes.alert_templates: "/alert-templates/{resource_name}",
|
|
94
96
|
# runtime resource doesn't have an identifier, we don't need any auth granularity behind project level
|
|
95
97
|
AuthorizationResourceTypes.runtime_resource: "/projects/{project_name}/runtime-resources",
|
|
@@ -106,12 +108,12 @@ class AuthorizationResourceTypes(mlrun.common.types.StrEnum):
|
|
|
106
108
|
}[self].format(project_name=project_name, resource_name=resource_name)
|
|
107
109
|
|
|
108
110
|
|
|
109
|
-
class AuthorizationVerificationInput(pydantic.BaseModel):
|
|
111
|
+
class AuthorizationVerificationInput(pydantic.v1.BaseModel):
|
|
110
112
|
resource: str
|
|
111
113
|
action: AuthorizationAction
|
|
112
114
|
|
|
113
115
|
|
|
114
|
-
class AuthInfo(pydantic.BaseModel):
|
|
116
|
+
class AuthInfo(pydantic.v1.BaseModel):
|
|
115
117
|
# Basic + Iguazio auth
|
|
116
118
|
username: typing.Optional[str] = None
|
|
117
119
|
# Basic auth
|
|
@@ -145,5 +147,5 @@ class AuthInfo(pydantic.BaseModel):
|
|
|
145
147
|
return self.data_session or self.session
|
|
146
148
|
|
|
147
149
|
|
|
148
|
-
class Credentials(pydantic.BaseModel):
|
|
150
|
+
class Credentials(pydantic.v1.BaseModel):
|
|
149
151
|
access_key: typing.Optional[str]
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import datetime
|
|
16
16
|
import typing
|
|
17
17
|
|
|
18
|
-
import pydantic
|
|
18
|
+
import pydantic.v1
|
|
19
19
|
|
|
20
20
|
import mlrun.common.types
|
|
21
21
|
|
|
@@ -35,7 +35,7 @@ class BackgroundTaskState(mlrun.common.types.StrEnum):
|
|
|
35
35
|
]
|
|
36
36
|
|
|
37
37
|
|
|
38
|
-
class BackgroundTaskMetadata(pydantic.BaseModel):
|
|
38
|
+
class BackgroundTaskMetadata(pydantic.v1.BaseModel):
|
|
39
39
|
name: str
|
|
40
40
|
kind: typing.Optional[str]
|
|
41
41
|
project: typing.Optional[str]
|
|
@@ -44,21 +44,21 @@ class BackgroundTaskMetadata(pydantic.BaseModel):
|
|
|
44
44
|
timeout: typing.Optional[int]
|
|
45
45
|
|
|
46
46
|
|
|
47
|
-
class BackgroundTaskSpec(pydantic.BaseModel):
|
|
47
|
+
class BackgroundTaskSpec(pydantic.v1.BaseModel):
|
|
48
48
|
pass
|
|
49
49
|
|
|
50
50
|
|
|
51
|
-
class BackgroundTaskStatus(pydantic.BaseModel):
|
|
51
|
+
class BackgroundTaskStatus(pydantic.v1.BaseModel):
|
|
52
52
|
state: BackgroundTaskState
|
|
53
53
|
error: typing.Optional[str]
|
|
54
54
|
|
|
55
55
|
|
|
56
|
-
class BackgroundTask(pydantic.BaseModel):
|
|
57
|
-
kind: ObjectKind = pydantic.Field(ObjectKind.background_task, const=True)
|
|
56
|
+
class BackgroundTask(pydantic.v1.BaseModel):
|
|
57
|
+
kind: ObjectKind = pydantic.v1.Field(ObjectKind.background_task, const=True)
|
|
58
58
|
metadata: BackgroundTaskMetadata
|
|
59
59
|
spec: BackgroundTaskSpec
|
|
60
60
|
status: BackgroundTaskStatus
|
|
61
61
|
|
|
62
62
|
|
|
63
|
-
class BackgroundTaskList(pydantic.BaseModel):
|
|
63
|
+
class BackgroundTaskList(pydantic.v1.BaseModel):
|
|
64
64
|
background_tasks: list[BackgroundTask]
|
|
@@ -14,13 +14,13 @@
|
|
|
14
14
|
#
|
|
15
15
|
import typing
|
|
16
16
|
|
|
17
|
-
import pydantic
|
|
17
|
+
import pydantic.v1
|
|
18
18
|
|
|
19
19
|
from .function import Function
|
|
20
20
|
from .k8s import Resources
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
class ClientSpec(pydantic.BaseModel):
|
|
23
|
+
class ClientSpec(pydantic.v1.BaseModel):
|
|
24
24
|
version: typing.Optional[str]
|
|
25
25
|
namespace: typing.Optional[str]
|
|
26
26
|
docker_registry: typing.Optional[str]
|
|
@@ -14,12 +14,12 @@
|
|
|
14
14
|
#
|
|
15
15
|
import typing
|
|
16
16
|
|
|
17
|
-
import pydantic
|
|
17
|
+
import pydantic.v1
|
|
18
18
|
|
|
19
19
|
import mlrun.common.types
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
class ClusterizationSpec(pydantic.BaseModel):
|
|
22
|
+
class ClusterizationSpec(pydantic.v1.BaseModel):
|
|
23
23
|
chief_api_state: typing.Optional[str]
|
|
24
24
|
chief_version: typing.Optional[str]
|
|
25
25
|
|
mlrun/common/schemas/common.py
CHANGED
|
@@ -14,12 +14,12 @@
|
|
|
14
14
|
|
|
15
15
|
import typing
|
|
16
16
|
|
|
17
|
-
import pydantic
|
|
17
|
+
import pydantic.v1
|
|
18
18
|
|
|
19
19
|
import mlrun.errors
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
class ImageBuilder(pydantic.BaseModel):
|
|
22
|
+
class ImageBuilder(pydantic.v1.BaseModel):
|
|
23
23
|
functionSourceCode: typing.Optional[str] = None # noqa: N815
|
|
24
24
|
codeEntryType: typing.Optional[str] = None # noqa: N815
|
|
25
25
|
codeEntryAttributes: typing.Optional[str] = None # noqa: N815
|
|
@@ -42,10 +42,10 @@ class ImageBuilder(pydantic.BaseModel):
|
|
|
42
42
|
source_code_target_dir: typing.Optional[str] = None
|
|
43
43
|
|
|
44
44
|
class Config:
|
|
45
|
-
extra = pydantic.Extra.allow
|
|
45
|
+
extra = pydantic.v1.Extra.allow
|
|
46
46
|
|
|
47
47
|
|
|
48
|
-
class LabelsModel(pydantic.BaseModel):
|
|
48
|
+
class LabelsModel(pydantic.v1.BaseModel):
|
|
49
49
|
"""
|
|
50
50
|
This class accepts either a dictionary, a list, or a string for filtering by labels.
|
|
51
51
|
|
|
@@ -65,7 +65,7 @@ class LabelsModel(pydantic.BaseModel):
|
|
|
65
65
|
typing.Union[str, dict[str, typing.Optional[str]], list[str]]
|
|
66
66
|
]
|
|
67
67
|
|
|
68
|
-
@pydantic.validator("labels")
|
|
68
|
+
@pydantic.v1.validator("labels")
|
|
69
69
|
@classmethod
|
|
70
70
|
def validate(cls, labels) -> list[str]:
|
|
71
71
|
if labels is None:
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
#
|
|
15
15
|
from typing import Optional
|
|
16
16
|
|
|
17
|
-
import pydantic
|
|
17
|
+
import pydantic.v1
|
|
18
18
|
|
|
19
19
|
from .auth import AuthorizationResourceTypes, Credentials
|
|
20
20
|
from .object import (
|
|
@@ -27,7 +27,7 @@ from .object import (
|
|
|
27
27
|
)
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
class FeatureStoreBaseModel(pydantic.BaseModel):
|
|
30
|
+
class FeatureStoreBaseModel(pydantic.v1.BaseModel):
|
|
31
31
|
"""
|
|
32
32
|
Intermediate base class, in order to override pydantic's configuration, as per
|
|
33
33
|
https://docs.pydantic.dev/1.10/usage/model_config/#change-behaviour-globally
|
|
@@ -43,7 +43,7 @@ class Feature(FeatureStoreBaseModel):
|
|
|
43
43
|
labels: Optional[dict] = {}
|
|
44
44
|
|
|
45
45
|
class Config:
|
|
46
|
-
extra = pydantic.Extra.allow
|
|
46
|
+
extra = pydantic.v1.Extra.allow
|
|
47
47
|
|
|
48
48
|
|
|
49
49
|
class Entity(FeatureStoreBaseModel):
|
|
@@ -52,17 +52,17 @@ class Entity(FeatureStoreBaseModel):
|
|
|
52
52
|
labels: Optional[dict] = {}
|
|
53
53
|
|
|
54
54
|
class Config:
|
|
55
|
-
extra = pydantic.Extra.allow
|
|
55
|
+
extra = pydantic.v1.Extra.allow
|
|
56
56
|
|
|
57
57
|
|
|
58
58
|
class FeatureSetSpec(ObjectSpec):
|
|
59
59
|
entities: list[Entity] = []
|
|
60
60
|
features: list[Feature] = []
|
|
61
|
-
engine: Optional[str] = pydantic.Field(default="storey")
|
|
61
|
+
engine: Optional[str] = pydantic.v1.Field(default="storey")
|
|
62
62
|
|
|
63
63
|
|
|
64
64
|
class FeatureSet(FeatureStoreBaseModel):
|
|
65
|
-
kind: ObjectKind = pydantic.Field(ObjectKind.feature_set, const=True)
|
|
65
|
+
kind: ObjectKind = pydantic.v1.Field(ObjectKind.feature_set, const=True)
|
|
66
66
|
metadata: ObjectMetadata
|
|
67
67
|
spec: FeatureSetSpec
|
|
68
68
|
status: ObjectStatus
|
|
@@ -155,7 +155,7 @@ class EntitiesOutput(FeatureStoreBaseModel):
|
|
|
155
155
|
|
|
156
156
|
|
|
157
157
|
class FeatureVector(FeatureStoreBaseModel):
|
|
158
|
-
kind: ObjectKind = pydantic.Field(ObjectKind.feature_vector, const=True)
|
|
158
|
+
kind: ObjectKind = pydantic.v1.Field(ObjectKind.feature_vector, const=True)
|
|
159
159
|
metadata: ObjectMetadata
|
|
160
160
|
spec: ObjectSpec
|
|
161
161
|
status: ObjectStatus
|
|
@@ -183,7 +183,7 @@ class DataSource(FeatureStoreBaseModel):
|
|
|
183
183
|
path: str
|
|
184
184
|
|
|
185
185
|
class Config:
|
|
186
|
-
extra = pydantic.Extra.allow
|
|
186
|
+
extra = pydantic.v1.Extra.allow
|
|
187
187
|
|
|
188
188
|
|
|
189
189
|
class DataTarget(FeatureStoreBaseModel):
|
|
@@ -192,7 +192,7 @@ class DataTarget(FeatureStoreBaseModel):
|
|
|
192
192
|
path: Optional[str]
|
|
193
193
|
|
|
194
194
|
class Config:
|
|
195
|
-
extra = pydantic.Extra.allow
|
|
195
|
+
extra = pydantic.v1.Extra.allow
|
|
196
196
|
|
|
197
197
|
|
|
198
198
|
class FeatureSetIngestInput(FeatureStoreBaseModel):
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
#
|
|
15
15
|
import typing
|
|
16
16
|
|
|
17
|
-
import pydantic
|
|
17
|
+
import pydantic.v1
|
|
18
18
|
|
|
19
19
|
import mlrun.common.types
|
|
20
20
|
|
|
@@ -43,20 +43,20 @@ class NuclioStreamsFeatureFlag(mlrun.common.types.StrEnum):
|
|
|
43
43
|
disabled = "disabled"
|
|
44
44
|
|
|
45
45
|
|
|
46
|
-
class FeatureFlags(pydantic.BaseModel):
|
|
46
|
+
class FeatureFlags(pydantic.v1.BaseModel):
|
|
47
47
|
project_membership: ProjectMembershipFeatureFlag
|
|
48
48
|
authentication: AuthenticationFeatureFlag
|
|
49
49
|
nuclio_streams: NuclioStreamsFeatureFlag
|
|
50
50
|
preemption_nodes: PreemptionNodesFeatureFlag
|
|
51
51
|
|
|
52
52
|
|
|
53
|
-
class ArtifactLimits(pydantic.BaseModel):
|
|
53
|
+
class ArtifactLimits(pydantic.v1.BaseModel):
|
|
54
54
|
max_chunk_size: int
|
|
55
55
|
max_preview_size: int
|
|
56
56
|
max_download_size: int
|
|
57
57
|
|
|
58
58
|
|
|
59
|
-
class FrontendSpec(pydantic.BaseModel):
|
|
59
|
+
class FrontendSpec(pydantic.v1.BaseModel):
|
|
60
60
|
jobs_dashboard_url: typing.Optional[str]
|
|
61
61
|
model_monitoring_dashboard_url: typing.Optional[str]
|
|
62
62
|
abortable_function_kinds: list[str] = []
|
mlrun/common/schemas/function.py
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
#
|
|
15
15
|
import typing
|
|
16
16
|
|
|
17
|
-
import pydantic
|
|
17
|
+
import pydantic.v1
|
|
18
18
|
|
|
19
19
|
import mlrun.common.types
|
|
20
20
|
|
|
@@ -90,42 +90,42 @@ class SecurityContextEnrichmentModes(mlrun.common.types.StrEnum):
|
|
|
90
90
|
disabled = "disabled"
|
|
91
91
|
|
|
92
92
|
|
|
93
|
-
class ImagePullSecret(pydantic.BaseModel):
|
|
93
|
+
class ImagePullSecret(pydantic.v1.BaseModel):
|
|
94
94
|
default: typing.Optional[str]
|
|
95
95
|
|
|
96
96
|
|
|
97
|
-
class Pipelines(pydantic.BaseModel):
|
|
97
|
+
class Pipelines(pydantic.v1.BaseModel):
|
|
98
98
|
kfp_pod_user_unix_id: typing.Optional[int]
|
|
99
99
|
|
|
100
100
|
|
|
101
|
-
class SecurityContext(pydantic.BaseModel):
|
|
101
|
+
class SecurityContext(pydantic.v1.BaseModel):
|
|
102
102
|
default: typing.Optional[str]
|
|
103
103
|
enrichment_mode: typing.Optional[SecurityContextEnrichmentModes]
|
|
104
104
|
enrichment_group_id: typing.Optional[int]
|
|
105
105
|
pipelines: typing.Optional[Pipelines]
|
|
106
106
|
|
|
107
107
|
|
|
108
|
-
class ServiceAccount(pydantic.BaseModel):
|
|
108
|
+
class ServiceAccount(pydantic.v1.BaseModel):
|
|
109
109
|
default: typing.Optional[str]
|
|
110
110
|
|
|
111
111
|
|
|
112
|
-
class StateThresholds(pydantic.BaseModel):
|
|
112
|
+
class StateThresholds(pydantic.v1.BaseModel):
|
|
113
113
|
default: typing.Optional[dict[str, str]]
|
|
114
114
|
|
|
115
115
|
|
|
116
|
-
class FunctionSpec(pydantic.BaseModel):
|
|
116
|
+
class FunctionSpec(pydantic.v1.BaseModel):
|
|
117
117
|
image_pull_secret: typing.Optional[ImagePullSecret]
|
|
118
118
|
security_context: typing.Optional[SecurityContext]
|
|
119
119
|
service_account: typing.Optional[ServiceAccount]
|
|
120
120
|
state_thresholds: typing.Optional[StateThresholds]
|
|
121
121
|
|
|
122
122
|
class Config:
|
|
123
|
-
extra = pydantic.Extra.allow
|
|
123
|
+
extra = pydantic.v1.Extra.allow
|
|
124
124
|
|
|
125
125
|
|
|
126
|
-
class Function(pydantic.BaseModel):
|
|
126
|
+
class Function(pydantic.v1.BaseModel):
|
|
127
127
|
spec: typing.Optional[FunctionSpec]
|
|
128
128
|
application: typing.Optional[dict[str, typing.Any]]
|
|
129
129
|
|
|
130
130
|
class Config:
|
|
131
|
-
extra = pydantic.Extra.allow
|
|
131
|
+
extra = pydantic.v1.Extra.allow
|
mlrun/common/schemas/hub.py
CHANGED
mlrun/common/schemas/k8s.py
CHANGED
|
@@ -14,18 +14,18 @@
|
|
|
14
14
|
#
|
|
15
15
|
import typing
|
|
16
16
|
|
|
17
|
-
import pydantic
|
|
17
|
+
import pydantic.v1
|
|
18
18
|
|
|
19
19
|
import mlrun.common.types
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
class ResourceSpec(pydantic.BaseModel):
|
|
22
|
+
class ResourceSpec(pydantic.v1.BaseModel):
|
|
23
23
|
cpu: typing.Optional[str]
|
|
24
24
|
memory: typing.Optional[str]
|
|
25
25
|
gpu: typing.Optional[str]
|
|
26
26
|
|
|
27
27
|
|
|
28
|
-
class Resources(pydantic.BaseModel):
|
|
28
|
+
class Resources(pydantic.v1.BaseModel):
|
|
29
29
|
requests: ResourceSpec = ResourceSpec()
|
|
30
30
|
limits: ResourceSpec = ResourceSpec()
|
|
31
31
|
|