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.

Files changed (76) hide show
  1. mlrun/__init__.py +5 -7
  2. mlrun/__main__.py +1 -1
  3. mlrun/common/formatters/project.py +9 -0
  4. mlrun/common/schemas/__init__.py +3 -0
  5. mlrun/common/schemas/alert.py +31 -18
  6. mlrun/common/schemas/api_gateway.py +3 -3
  7. mlrun/common/schemas/artifact.py +7 -7
  8. mlrun/common/schemas/auth.py +6 -4
  9. mlrun/common/schemas/background_task.py +7 -7
  10. mlrun/common/schemas/client_spec.py +2 -2
  11. mlrun/common/schemas/clusterization_spec.py +2 -2
  12. mlrun/common/schemas/common.py +5 -5
  13. mlrun/common/schemas/datastore_profile.py +1 -1
  14. mlrun/common/schemas/feature_store.py +9 -9
  15. mlrun/common/schemas/frontend_spec.py +4 -4
  16. mlrun/common/schemas/function.py +10 -10
  17. mlrun/common/schemas/hub.py +1 -1
  18. mlrun/common/schemas/k8s.py +3 -3
  19. mlrun/common/schemas/memory_reports.py +3 -3
  20. mlrun/common/schemas/model_monitoring/grafana.py +1 -1
  21. mlrun/common/schemas/model_monitoring/model_endpoint_v2.py +1 -1
  22. mlrun/common/schemas/model_monitoring/model_endpoints.py +1 -1
  23. mlrun/common/schemas/notification.py +18 -3
  24. mlrun/common/schemas/object.py +1 -1
  25. mlrun/common/schemas/pagination.py +4 -4
  26. mlrun/common/schemas/partition.py +16 -1
  27. mlrun/common/schemas/pipeline.py +2 -2
  28. mlrun/common/schemas/project.py +22 -17
  29. mlrun/common/schemas/runs.py +2 -2
  30. mlrun/common/schemas/runtime_resource.py +5 -5
  31. mlrun/common/schemas/schedule.py +1 -1
  32. mlrun/common/schemas/secret.py +1 -1
  33. mlrun/common/schemas/tag.py +3 -3
  34. mlrun/common/schemas/workflow.py +5 -5
  35. mlrun/config.py +22 -0
  36. mlrun/datastore/datastore_profile.py +19 -19
  37. mlrun/db/base.py +48 -6
  38. mlrun/db/httpdb.py +221 -9
  39. mlrun/db/nopdb.py +34 -5
  40. mlrun/model.py +2 -2
  41. mlrun/model_monitoring/applications/results.py +2 -2
  42. mlrun/model_monitoring/db/tsdb/base.py +2 -2
  43. mlrun/model_monitoring/db/tsdb/tdengine/schemas.py +37 -13
  44. mlrun/model_monitoring/db/tsdb/tdengine/tdengine_connector.py +32 -40
  45. mlrun/model_monitoring/helpers.py +4 -10
  46. mlrun/model_monitoring/stream_processing.py +14 -11
  47. mlrun/platforms/__init__.py +0 -13
  48. mlrun/projects/__init__.py +6 -1
  49. mlrun/projects/pipelines.py +184 -55
  50. mlrun/projects/project.py +95 -28
  51. mlrun/run.py +4 -1
  52. mlrun/runtimes/base.py +2 -1
  53. mlrun/runtimes/mounts.py +572 -0
  54. mlrun/runtimes/nuclio/function.py +1 -2
  55. mlrun/runtimes/pod.py +82 -18
  56. mlrun/runtimes/remotesparkjob.py +1 -1
  57. mlrun/runtimes/sparkjob/spark3job.py +1 -1
  58. mlrun/utils/helpers.py +12 -2
  59. mlrun/utils/logger.py +2 -2
  60. mlrun/utils/notifications/notification/__init__.py +22 -19
  61. mlrun/utils/notifications/notification/base.py +12 -12
  62. mlrun/utils/notifications/notification/console.py +6 -6
  63. mlrun/utils/notifications/notification/git.py +6 -6
  64. mlrun/utils/notifications/notification/ipython.py +6 -6
  65. mlrun/utils/notifications/notification/mail.py +149 -0
  66. mlrun/utils/notifications/notification/slack.py +6 -6
  67. mlrun/utils/notifications/notification/webhook.py +6 -6
  68. mlrun/utils/notifications/notification_pusher.py +20 -12
  69. mlrun/utils/regex.py +2 -0
  70. mlrun/utils/version/version.json +2 -2
  71. {mlrun-1.8.0rc1.dist-info → mlrun-1.8.0rc2.dist-info}/METADATA +190 -186
  72. {mlrun-1.8.0rc1.dist-info → mlrun-1.8.0rc2.dist-info}/RECORD +76 -74
  73. {mlrun-1.8.0rc1.dist-info → mlrun-1.8.0rc2.dist-info}/WHEEL +1 -1
  74. {mlrun-1.8.0rc1.dist-info → mlrun-1.8.0rc2.dist-info}/LICENSE +0 -0
  75. {mlrun-1.8.0rc1.dist-info → mlrun-1.8.0rc2.dist-info}/entry_points.txt +0 -0
  76. {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 = mlrun_pipelines.common.mounts.VolumeMount
73
- mount_v3io = mlrun_pipelines.mounts.mount_v3io
74
- v3io_cred = mlrun_pipelines.mounts.v3io_cred
75
- auto_mount = mlrun_pipelines.mounts.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 mlrun_pipelines.mounts import auto_mount as auto_mount_modifier
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]
@@ -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,
@@ -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
- from mlrun.common.schemas.notification import Notification
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):
@@ -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
@@ -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
 
@@ -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:
@@ -15,7 +15,7 @@
15
15
 
16
16
  import typing
17
17
 
18
- from pydantic import BaseModel
18
+ from pydantic.v1 import BaseModel
19
19
 
20
20
 
21
21
  class DatastoreProfile(BaseModel):
@@ -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] = []
@@ -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
@@ -15,7 +15,7 @@
15
15
  from datetime import datetime, timezone
16
16
  from typing import Optional
17
17
 
18
- from pydantic import BaseModel, Extra, Field
18
+ from pydantic.v1 import BaseModel, Extra, Field
19
19
 
20
20
  import mlrun.common.types
21
21
  import mlrun.config
@@ -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