import uuid from datetime import datetime from typing import Iterable, Set, Union from uuid import UUID from boltons import urlutils from sqlalchemy import Column from sqlalchemy.orm import Query, relationship from sqlalchemy_utils import Ltree from ereuse_devicehub.resources.device.models import Device from ereuse_devicehub.resources.models import Thing LotQuery = Union[Query, Iterable['Lot']] class Lot(Thing): id = ... # type: Column name = ... # type: Column closed = ... # type: Column devices = ... # type: relationship paths = ... # type: relationship def __init__(self, name: str, closed: bool = closed.default.arg) -> None: super().__init__() self.id = ... # type: UUID self.name = ... # type: str self.closed = ... # type: bool self.devices = ... # type: Set[Device] self.paths = ... # type: Set[Path] def add_child(self, child: Union[Lot, uuid.UUID]): pass def remove_child(self, child: Union[Lot, uuid.UUID]): pass @classmethod def roots(cls) -> LotQuery: pass @property def children(self) -> LotQuery: pass @property def descendants(self) -> LotQuery: pass @classmethod def descendantsq(cls, id) -> LotQuery: pass @property def parents(self) -> LotQuery: pass @classmethod def parentsq(cls, id) -> LotQuery: pass @property def url(self) -> urlutils.URL: pass class Path: id = ... # type: Column lot_id = ... # type: Column lot = ... # type: relationship path = ... # type: Column created = ... # type: Column def __init__(self, lot: Lot) -> None: super().__init__() self.id = ... # type: UUID self.lot = ... # type: Lot self.path = ... # type: Ltree self.created = ... # type: datetime