Skip to content

Commit 2353e7e

Browse files
committed
feat: update observed variable schema
1 parent dd48b62 commit 2353e7e

File tree

4 files changed

+42
-13
lines changed

4 files changed

+42
-13
lines changed

src/model/method.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212

1313
if TYPE_CHECKING:
1414
from src.model.device import Device
15-
from src.model.observed_variable import ObservedVariable
1615
from src.model.vocabulary import Vocabulary
1716

1817

@@ -24,12 +23,8 @@ class Method(Base):
2423
# Relationships:
2524
method_reference_id: Mapped[UUID | None] = mapped_column(ForeignKey("vocabulary_table.id", ondelete="SET NULL"))
2625
method_reference: Mapped[Optional["Vocabulary"]] = relationship(
27-
back_populates="method", lazy=None, info=dto_field("read-only")
26+
back_populates="method", lazy=None, info=dto_field("read-only"),
2827
)
2928

3029
device_id: Mapped[UUID | None] = mapped_column(ForeignKey("device_table.id", ondelete="SET NULL"))
3130
device: Mapped[Optional["Device"]] = relationship(lazy=None, info=dto_field("read-only"))
32-
33-
observed_variable: Mapped[Optional["ObservedVariable"]] = relationship(
34-
back_populates="method", lazy=None, info=dto_field("read-only")
35-
)

src/model/observed_variable.py

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,46 @@
1+
from dataclasses import dataclass, field
12
from typing import TYPE_CHECKING, Optional
23
from uuid import UUID
34

45
from litestar.dto import dto_field
56
from sqlalchemy import ForeignKey
67
from sqlalchemy.orm import Mapped, mapped_column, relationship
78

8-
from src.model.variable import Variable
9+
from src.model.variable import Variable, VariableDataclass
910

1011
__all__ = ("ObservedVariable",)
1112

1213

1314
if TYPE_CHECKING:
14-
from src.model.method import Method
15+
from src.model.vocabulary import Vocabulary
1516

1617

1718
class ObservedVariable(Variable):
1819
__tablename__: str = "observed_variable_table" # type: ignore[assignment]
1920
__mapper_args__ = {"polymorphic_identity": "observed_variable"}
20-
2121
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],
2539
)
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)

src/model/vocabulary.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
from src.model.facility import Facility
1919
from src.model.institution import Institution
2020
from src.model.method import Method
21+
from src.model.observed_variable import ObservedVariable
2122

2223
# from src.model.observation_unit import ObservationUnit
2324
# from src.model.sample import Sample
@@ -81,6 +82,18 @@ class Vocabulary(Base):
8182
organism: Mapped[list["BiologicalMaterial"]] = relationship(
8283
back_populates="organism", lazy=None, info=dto_field("private")
8384
)
85+
variable_reference: Mapped[list["ObservedVariable"]] = relationship(
86+
lazy=None,
87+
back_populates="variable_reference",
88+
info=dto_field("read-only"),
89+
foreign_keys="[ObservedVariable.variable_reference_id]",
90+
)
91+
trait_reference: Mapped[list["ObservedVariable"]] = relationship(
92+
lazy=None,
93+
back_populates="trait_reference",
94+
info=dto_field("read-only"),
95+
foreign_keys="[ObservedVariable.trait_reference_id]",
96+
)
8497
# observation_units: Mapped[list["ObservationUnit"]] = relationship(
8598
# "ObservationUnit", back_populates="observation_unit_type", lazy="selectin", info=dto_field("read-only")
8699
# )

src/router/observed_variable.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@
99

1010

1111
class ObservedVariableController(BaseController[ObservedVariable]):
12-
path = "/observed_variable"
12+
path = "/observedVariable"
1313
dto = ObservedVariableDTO.write_dto
1414
return_dto = ObservedVariableDTO.read_dto

0 commit comments

Comments
 (0)