|
| 1 | +from dataclasses import dataclass, field |
1 | 2 | from typing import TYPE_CHECKING, Optional
|
2 | 3 | from uuid import UUID
|
3 | 4 |
|
4 | 5 | from litestar.dto import dto_field
|
5 | 6 | from sqlalchemy import ForeignKey
|
6 | 7 | from sqlalchemy.orm import Mapped, mapped_column, relationship
|
7 | 8 |
|
8 |
| -from src.model.variable import Variable |
| 9 | +from src.model.variable import Variable, VariableDataclass |
9 | 10 |
|
10 | 11 | __all__ = ("ObservedVariable",)
|
11 | 12 |
|
12 | 13 |
|
13 | 14 | if TYPE_CHECKING:
|
14 |
| - from src.model.method import Method |
| 15 | + from src.model.vocabulary import Vocabulary |
15 | 16 |
|
16 | 17 |
|
17 | 18 | class ObservedVariable(Variable):
|
18 | 19 | __tablename__: str = "observed_variable_table" # type: ignore[assignment]
|
19 | 20 | __mapper_args__ = {"polymorphic_identity": "observed_variable"}
|
20 |
| - |
21 | 21 | id: Mapped[UUID] = mapped_column(ForeignKey("variable_table.id"), primary_key=True, info=dto_field("read-only"))
|
22 |
| - method_id: Mapped[UUID | None] = mapped_column(ForeignKey("method_table.id")) |
23 |
| - method: Mapped[Optional["Method"]] = relationship( |
24 |
| - back_populates="observed_variable", lazy=None, info=dto_field("read-only") |
| 22 | + |
| 23 | + title: Mapped[str] = mapped_column(nullable=False) |
| 24 | + variable_reference_id: Mapped[UUID | None] = mapped_column(ForeignKey("vocabulary_table.id", ondelete="SET NULL")) |
| 25 | + variable_reference: Mapped[Optional["Vocabulary"]] = relationship( |
| 26 | + "Vocabulary", |
| 27 | + lazy=None, |
| 28 | + back_populates="variable_reference", |
| 29 | + info=dto_field("read-only"), |
| 30 | + foreign_keys=[variable_reference_id], |
| 31 | + ) |
| 32 | + trait_reference_id: Mapped[UUID | None] = mapped_column(ForeignKey("vocabulary_table.id", ondelete="SET NULL")) |
| 33 | + trait_reference: Mapped[Optional["Vocabulary"]] = relationship( |
| 34 | + "Vocabulary", |
| 35 | + lazy=None, |
| 36 | + back_populates="trait_reference", |
| 37 | + info=dto_field("read-only"), |
| 38 | + foreign_keys=[trait_reference_id], |
25 | 39 | )
|
| 40 | + |
| 41 | + |
| 42 | +@dataclass(kw_only=True) |
| 43 | +class ObservedVariableDataclass(VariableDataclass): |
| 44 | + title: str |
| 45 | + variable_reference_id: UUID | None = field(default=None) |
| 46 | + trait_reference_id: UUID | None = field(default=None) |
0 commit comments