Coverage for src/cstlcore/constellations/models.py: 85%
26 statements
« prev ^ index » next coverage.py v7.9.1, created at 2026-02-19 12:46 +0000
« prev ^ index » next coverage.py v7.9.1, created at 2026-02-19 12:46 +0000
1import uuid
2from datetime import datetime
3from typing import TYPE_CHECKING
5from sqlmodel import TIMESTAMP, Column, Field, Relationship, SQLModel, text
7if TYPE_CHECKING:
8 from cstlcore.assets.models import Asset
9 from cstlcore.collections.models import Collection
10 from cstlcore.glossary.models import GlossaryTerm
11 from cstlcore.memberships.models import ConstellationMembership
14class ConstellationBase(SQLModel):
15 name: str = Field(index=True, nullable=False)
16 description: str | None = Field(default=None, nullable=True)
19class Constellation(ConstellationBase, table=True):
20 id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True)
21 created_at: datetime | None = Field(
22 default=None,
23 sa_column=Column(
24 TIMESTAMP(timezone=True),
25 nullable=False,
26 server_default=text("CURRENT_TIMESTAMP"),
27 ),
28 )
30 memberships: list["ConstellationMembership"] = Relationship(
31 back_populates="constellation", cascade_delete=True
32 )
33 collections: list["Collection"] = Relationship(
34 back_populates="constellation", cascade_delete=True
35 )
36 assets: list["Asset"] = Relationship(
37 back_populates="constellation", cascade_delete=True
38 )
39 glossary_terms: list["GlossaryTerm"] = Relationship(
40 back_populates="constellation", cascade_delete=True
41 )
44class ConstellationPublic(ConstellationBase):
45 id: uuid.UUID
48class ConstellationCreate(ConstellationBase):
49 pass
52class ConstellationUpdate(SQLModel):
53 name: str | None = None
54 description: str | None = None