Skip to content

Commit

Permalink
Set default values for declarative objects kind
Browse files Browse the repository at this point in the history
  • Loading branch information
Mathieu Gascon-Lefebvre authored and isra17 committed Aug 19, 2024
1 parent 362e00c commit 93cf8de
Show file tree
Hide file tree
Showing 9 changed files with 57 additions and 28 deletions.
2 changes: 1 addition & 1 deletion src/saturn_engine/utils/declarative_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class ObjectMetadata:
labels: dict[str, str] = field(default_factory=dict)


@dataclasses.dataclass
@dataclasses.dataclass(kw_only=True)
class BaseObject:
metadata: ObjectMetadata
apiVersion: str
Expand Down
24 changes: 16 additions & 8 deletions src/saturn_engine/worker_manager/config/declarative.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,21 @@
from saturn_engine.utils.declarative_config import load_uncompiled_objects_from_str
from saturn_engine.utils.options import fromdict

from .declarative_dynamic_topology import DYNAMIC_TOPOLOGY_KIND
from .declarative_dynamic_topology import DynamicTopology
from .declarative_executor import EXECUTOR_KIND
from .declarative_executor import Executor
from .declarative_inventory import INVENTORY_KIND
from .declarative_inventory import Inventory
from .declarative_job import JOB_KIND
from .declarative_job import Job
from .declarative_job_definition import JOB_DEFINITION_KIND
from .declarative_job_definition import JobDefinition
from .declarative_resource import RESOURCE_KIND
from .declarative_resource import RESOURCE_PROVIDER_KIND
from .declarative_resource import Resource
from .declarative_resource import ResourcesProvider
from .declarative_topic_item import TOPIC_ITEM_KIND
from .declarative_topic_item import TopicItem
from .static_definitions import StaticDefinitions

Expand All @@ -37,28 +45,28 @@ def compile_static_definitions(
definitions: StaticDefinitions = StaticDefinitions()

for uncompiled_executor in objects_by_kind.pop(
"SaturnExecutor",
EXECUTOR_KIND,
dict(),
).values():
executor: Executor = fromdict(uncompiled_executor.data, Executor)
definitions.add(executor)

for uncompiled_inventory in objects_by_kind.pop(
"SaturnInventory",
INVENTORY_KIND,
dict(),
).values():
inventory: Inventory = fromdict(uncompiled_inventory.data, Inventory)
definitions.add(inventory)

for uncompiled_topic in objects_by_kind.pop(
"SaturnTopic",
TOPIC_ITEM_KIND,
dict(),
).values():
topic_item: TopicItem = fromdict(uncompiled_topic.data, TopicItem)
definitions.add(topic_item)

for uncompiled_job_definition in objects_by_kind.pop(
"SaturnJobDefinition",
JOB_DEFINITION_KIND,
dict(),
).values():
job_definition: JobDefinition = fromdict(
Expand All @@ -67,21 +75,21 @@ def compile_static_definitions(
definitions.add(job_definition)

for uncompiled_job in objects_by_kind.pop(
"SaturnJob",
JOB_KIND,
dict(),
).values():
job_data: Job = fromdict(uncompiled_job.data, Job)
definitions.add(job_data)

for uncompiled_resource in objects_by_kind.pop(
"SaturnResource",
RESOURCE_KIND,
dict(),
).values():
resource: Resource = fromdict(uncompiled_resource.data, Resource)
definitions.add(resource)

for uncompied_resources_provider in objects_by_kind.pop(
"SaturnResourcesProvider",
RESOURCE_PROVIDER_KIND,
dict(),
).values():
resources_provider = fromdict(
Expand All @@ -90,7 +98,7 @@ def compile_static_definitions(
definitions.add(resources_provider)

for uncompiled_dynamic_topology in objects_by_kind.pop(
"SaturnDynamicTopology",
DYNAMIC_TOPOLOGY_KIND,
dict(),
).values():
dynamic_topology: DynamicTopology = fromdict(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
from saturn_engine.utils.declarative_config import BaseObject
from saturn_engine.worker_manager.config.static_definitions import StaticDefinitions

DYNAMIC_TOPOLOGY_KIND: t.Final[str] = "SaturnDynamicTopology"


class DynamicTopologyModule(t.Protocol):
def __call__(self, definitions: StaticDefinitions) -> None: ...
Expand All @@ -16,9 +18,10 @@ class DynamicTopologySpec:
module: str


@dataclasses.dataclass
@dataclasses.dataclass(kw_only=True)
class DynamicTopology(BaseObject):
spec: DynamicTopologySpec
kind: str = DYNAMIC_TOPOLOGY_KIND

def update_static_definitions(self, definitions: StaticDefinitions) -> None:
t.cast(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,24 @@
from typing import Any
import typing as t

import dataclasses
from dataclasses import field

from saturn_engine.core import api
from saturn_engine.utils.declarative_config import BaseObject

EXECUTOR_KIND: t.Final[str] = "SaturnExecutor"


@dataclasses.dataclass
class ExecutorSpec:
type: str
options: dict[str, Any] = field(default_factory=dict)
options: dict[str, t.Any] = field(default_factory=dict)


@dataclasses.dataclass
@dataclasses.dataclass(kw_only=True)
class Executor(BaseObject):
spec: ExecutorSpec
kind: str = EXECUTOR_KIND

def to_core_object(self) -> api.ComponentDefinition:
return api.ComponentDefinition(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,24 @@
from typing import Any
import typing as t

import dataclasses
from dataclasses import field

from saturn_engine.core import api
from saturn_engine.utils.declarative_config import BaseObject

INVENTORY_KIND: t.Final[str] = "SaturnInventory"


@dataclasses.dataclass
class InventorySpec:
type: str
options: dict[str, Any] = field(default_factory=dict)
options: dict[str, t.Any] = field(default_factory=dict)


@dataclasses.dataclass
@dataclasses.dataclass(kw_only=True)
class Inventory(BaseObject):
spec: InventorySpec
kind: str = INVENTORY_KIND

def to_core_object(self) -> api.ComponentDefinition:
return api.ComponentDefinition(
Expand Down
4 changes: 3 additions & 1 deletion src/saturn_engine/worker_manager/config/declarative_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from saturn_engine.worker_manager.config.static_definitions import StaticDefinitions

DEFAULT_INPUT_NAME: t.Final[str] = "default"
JOB_KIND: t.Final[str] = "SaturnJob"


@dataclasses.dataclass
Expand Down Expand Up @@ -101,9 +102,10 @@ def to_core_objects(
)


@dataclasses.dataclass
@dataclasses.dataclass(kw_only=True)
class Job(BaseObject):
spec: JobSpec
kind: str = JOB_KIND

def to_core_objects(
self,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,19 @@

from .static_definitions import StaticDefinitions

JOB_DEFINITION_KIND: t.Final[str] = "SaturnJobDefinition"


@dataclasses.dataclass
class JobDefinitionSpec:
template: JobSpec
minimalInterval: str


@dataclasses.dataclass
@dataclasses.dataclass(kw_only=True)
class JobDefinition(BaseObject):
spec: JobDefinitionSpec
kind: str = JOB_DEFINITION_KIND

def to_core_objects(
self,
Expand Down
18 changes: 11 additions & 7 deletions src/saturn_engine/worker_manager/config/declarative_resource.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
from typing import Any
from typing import Optional
import typing as t

import dataclasses

from saturn_engine.core import api
from saturn_engine.utils.declarative_config import BaseObject

RESOURCE_KIND: t.Final[str] = "SaturnResource"
RESOURCE_PROVIDER_KIND: t.Final[str] = "SaturnResourcesProvider"


@dataclasses.dataclass
class ResourceRateLimitSpec:
Expand All @@ -16,15 +18,16 @@ class ResourceRateLimitSpec:
@dataclasses.dataclass
class ResourceSpec:
type: str
data: dict[str, Any]
data: dict[str, t.Any]
default_delay: float = 0
rate_limit: Optional[ResourceRateLimitSpec] = None
rate_limit: t.Optional[ResourceRateLimitSpec] = None
concurrency: int = 1


@dataclasses.dataclass
@dataclasses.dataclass(kw_only=True)
class Resource(BaseObject):
spec: ResourceSpec
kind: str = RESOURCE_KIND

def to_core_object(self) -> api.ResourceItem:
return api.ResourceItem(
Expand All @@ -47,12 +50,13 @@ def to_core_object(self) -> api.ResourceItem:
class ResourcesProviderSpec:
type: str
resource_type: str
options: dict[str, Any]
options: dict[str, t.Any]


@dataclasses.dataclass
@dataclasses.dataclass(kw_only=True)
class ResourcesProvider(BaseObject):
spec: ResourcesProviderSpec
kind: str = RESOURCE_PROVIDER_KIND

def to_core_object(self) -> api.ResourcesProviderItem:
return api.ResourcesProviderItem(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,21 +1,24 @@
from typing import Any
import typing as t

import dataclasses
from dataclasses import field

from saturn_engine.core import api
from saturn_engine.utils.declarative_config import BaseObject

TOPIC_ITEM_KIND: t.Final[str] = "SaturnTopic"


@dataclasses.dataclass
class TopicSpec:
type: str
options: dict[str, Any] = field(default_factory=dict)
options: dict[str, t.Any] = field(default_factory=dict)


@dataclasses.dataclass
@dataclasses.dataclass(kw_only=True)
class TopicItem(BaseObject):
spec: TopicSpec
kind: str = TOPIC_ITEM_KIND

def to_core_object(self) -> api.ComponentDefinition:
return api.ComponentDefinition(
Expand Down

0 comments on commit 93cf8de

Please sign in to comment.