Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions packages/common-library/src/common_library/pydantic_validators.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import datetime

from pydantic import field_validator


def _try_convert_str_to_float_or_return(
v: datetime.timedelta | str | float,
) -> datetime.timedelta | str | float:
if isinstance(v, str):
try:
return float(v)
except ValueError:
# returns format like "1:00:00"
return v
return v


def timedelta_try_convert_str_to_float(field: str):
"""Transforms a float/int number into a valid datetime as it used to work in the past"""
return field_validator(field, mode="before")(_try_convert_str_to_float_or_return)
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import TypeAlias
from typing import Final, TypeAlias

from pydantic import BaseModel, ByteSize, ConfigDict, Field
from pydantic import BaseModel, ByteSize, ConfigDict, Field, TypeAdapter

from ..resource_tracker import HardwareInfo, PricingInfo
from ..services import ServicePortKey
Expand Down Expand Up @@ -75,6 +75,9 @@ class DynamicServiceCreate(ServiceDetails):


DynamicServiceGet: TypeAlias = RunningDynamicServiceDetails
DynamicServiceGetAdapter: Final[TypeAdapter[DynamicServiceGet]] = TypeAdapter(
DynamicServiceGet
)


class GetProjectInactivityResponse(BaseModel):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
from typing import Final

from models_library.api_schemas_directorv2.dynamic_services import DynamicServiceCreate
from models_library.projects import ProjectID
from models_library.projects_nodes_io import NodeID
from models_library.resource_tracker import HardwareInfo, PricingInfo
from models_library.services_resources import ServiceResourcesDictHelpers
from models_library.users import UserID
from models_library.wallets import WalletInfo
from pydantic import BaseModel, ConfigDict
from pydantic import BaseModel, ConfigDict, TypeAdapter


class DynamicServiceStart(DynamicServiceCreate):
Expand Down Expand Up @@ -35,6 +37,11 @@ class DynamicServiceStart(DynamicServiceCreate):
)


DynamicServiceStartAdapter: Final[TypeAdapter[DynamicServiceStart]] = TypeAdapter(
DynamicServiceStart
)


class DynamicServiceStop(BaseModel):
user_id: UserID
project_id: ProjectID
Expand All @@ -53,3 +60,8 @@ class DynamicServiceStop(BaseModel):
}
}
)


DynamicServiceStopAdapter: Final[TypeAdapter[DynamicServiceStop]] = TypeAdapter(
DynamicServiceStop
)
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# mypy: disable-error-code=truthy-function
from typing import Any, Literal, TypeAlias
from typing import Any, Final, Literal, TypeAlias

from pydantic import ConfigDict, Field
from pydantic import ConfigDict, Field, TypeAdapter

from ..api_schemas_directorv2.dynamic_services import RetrieveDataOut
from ..basic_types import PortInt
Expand Down Expand Up @@ -106,7 +106,7 @@ class NodeGet(OutputSchema):
"service_basepath": "/x/E1O2E-LAH",
"service_state": "pending",
"service_message": "no suitable node (insufficient resources on 1 node)",
"user_id": 123,
"user_id": "123",
},
# dynamic
{
Expand All @@ -120,13 +120,16 @@ class NodeGet(OutputSchema):
"service_basepath": "/x/E1O2E-LAH",
"service_state": "pending",
"service_message": "no suitable node (insufficient resources on 1 node)",
"user_id": 123,
"user_id": "123",
},
]
}
)


NodeGetAdapter: Final[TypeAdapter[NodeGet]] = TypeAdapter(NodeGet)


class NodeGetIdle(OutputSchema):
service_state: Literal["idle"]
service_uuid: NodeID
Expand All @@ -145,6 +148,9 @@ def from_node_id(cls, node_id: NodeID) -> "NodeGetIdle":
)


NodeGetIdleAdapter: Final[TypeAdapter[NodeGetIdle]] = TypeAdapter(NodeGetIdle)


class NodeGetUnknown(OutputSchema):
service_state: Literal["unknown"]
service_uuid: NodeID
Expand Down
5 changes: 3 additions & 2 deletions packages/settings-library/src/settings_library/basic_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,17 @@
# an extra dependency to a larger models_library (intra-repo library)

from enum import Enum
from typing import Annotated, TypeAlias
from typing import Annotated, Final, TypeAlias

from pydantic import Field, StringConstraints
from pydantic import Field, StringConstraints, TypeAdapter

# port number range
PortInt: TypeAlias = Annotated[int, Field(gt=0, lt=65535)]


# e.g. 'v5'
VersionTag: TypeAlias = Annotated[str, StringConstraints(pattern=r"^v\d$")]
VersionTagAdapter: Final[TypeAdapter[VersionTag]] = TypeAdapter(VersionTag)


class LogLevel(str, Enum):
Expand Down
Loading
Loading