Source code for simstack.models.base_lists
from typing import List, TypeVar, Iterator, TYPE_CHECKING
from odmantic import Field, Model, ObjectId
from simstack.models.simstack_model import simstack_model
from simstack.util.generic_list_mixin import GenericListMixin
from simstack.util.object_list_mixin import ObjectListMixin
if TYPE_CHECKING:
from simstack.models import StringData
T = TypeVar("T")
[docs]
@simstack_model
class StringDataList(Model, ObjectListMixin["StringData"]):
field_name: str = "string_data_list"
elements: List[ObjectId] = Field(default_factory=list, description="List of StringData ObjectIDs")
def __iter__(self) -> Iterator["StringData"]:
return ObjectListMixin.__iter__(self)
def __init__(self, **data):
data, cache = self._normalize_elements_for_init(data)
Model.__init__(self, **data)
if cache is not None:
self._set_cache(cache)
[docs]
@simstack_model
class BooleanDataList(Model, ObjectListMixin["StringData"]):
field_name: str = "boolean_data_list"
elements: List[ObjectId] = Field(default_factory=list, description="List of BooleanData ObjectIDs")
def __iter__(self) -> Iterator["StringData"]:
return ObjectListMixin.__iter__(self)
def __init__(self, **data):
data, cache = self._normalize_elements_for_init(data)
Model.__init__(self, **data)
if cache is not None:
self._set_cache(cache)
[docs]
@simstack_model
class StringList(Model, GenericListMixin[str]):
field_name: str = "string_list"
elements: List[str] = Field(default_factory=list, description="List of strings")
def __iter__(self) -> Iterator[T]:
return iter(self.elements)
def __len__(self) -> int:
return len(self.elements)