Skip to content

Commit bd1027f

Browse files
authored
Update to coadd table (#12)
* add coadd self-referential relationship * rename and add coadd fields * create alembic revision * add coadd tests * fix asserts * fix import
1 parent 7ec839c commit bd1027f

File tree

4 files changed

+363
-4
lines changed

4 files changed

+363
-4
lines changed
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
"""update atomic map coadd table
2+
3+
Revision ID: fd6670a1fdbe
4+
Revises: 1195d17201ba
5+
Create Date: 2025-12-18 19:50:23.313924
6+
7+
"""
8+
from typing import Sequence, Union
9+
10+
import sqlalchemy as sa
11+
from alembic import op
12+
13+
# revision identifiers, used by Alembic.
14+
revision: str = 'fd6670a1fdbe'
15+
down_revision: Union[str, None] = '1195d17201ba'
16+
branch_labels: Union[str, Sequence[str], None] = None
17+
depends_on: Union[str, Sequence[str], None] = None
18+
19+
20+
def upgrade() -> None:
21+
op.create_table(
22+
"link_coadd_map_to_coadd",
23+
sa.Column(
24+
"parent_coadd_id",
25+
sa.Integer(),
26+
sa.ForeignKey("atomic_map_coadds.coadd_id"),
27+
nullable=False,
28+
),
29+
sa.Column(
30+
"child_coadd_id",
31+
sa.Integer(),
32+
sa.ForeignKey("atomic_map_coadds.coadd_id"),
33+
nullable=False,
34+
),
35+
)
36+
37+
op.add_column('atomic_map_coadds', sa.Column('stop_time', sa.Float(), nullable=False))
38+
op.add_column('atomic_map_coadds', sa.Column('prefix_path', sa.String(), nullable=False))
39+
op.add_column('atomic_map_coadds', sa.Column('freq_channel', sa.String(), nullable=False))
40+
op.add_column('atomic_map_coadds', sa.Column('geom_file_path', sa.String(), nullable=False))
41+
op.add_column('atomic_map_coadds', sa.Column('split_label', sa.String(), nullable=False))
42+
op.drop_column('atomic_map_coadds', 'end_time')
43+
op.drop_column('atomic_map_coadds', 'coadd_path')
44+
op.drop_column('atomic_map_coadds', 'frequency')
45+
46+
47+
def downgrade() -> None:
48+
op.add_column('atomic_map_coadds', sa.Column('frequency', sa.String(), nullable=False))
49+
op.add_column('atomic_map_coadds', sa.Column('coadd_path', sa.String(), nullable=False))
50+
op.add_column('atomic_map_coadds', sa.Column('end_time', sa.Float(), nullable=False))
51+
op.drop_column('atomic_map_coadds', 'split_label')
52+
op.drop_column('atomic_map_coadds', 'geom_file_path')
53+
op.drop_column('atomic_map_coadds', 'freq_channel')
54+
op.drop_column('atomic_map_coadds', 'prefix_path')
55+
op.drop_column('atomic_map_coadds', 'stop_time')
56+
op.drop_table('link_coadd_map_to_coadd')

mapcat/database/atomic_coadd.py

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
if TYPE_CHECKING:
1010
from .atomic_map import AtomicMapTable
1111

12-
from .links import AtomicMapToCoaddTable
12+
from .links import AtomicMapToCoaddTable, CoaddMapToCoaddTable
1313

1414

1515
class AtomicMapCoaddTable(SQLModel, table=True):
@@ -18,15 +18,35 @@ class AtomicMapCoaddTable(SQLModel, table=True):
1818
coadd_id: int = Field(primary_key=True)
1919

2020
coadd_name: str = Field()
21-
coadd_path: str = Field()
21+
prefix_path: str = Field()
2222

2323
platform: str = Field()
2424
interval: str = Field()
2525
start_time: float = Field()
26-
end_time: float = Field()
27-
frequency: str = Field()
26+
stop_time: float = Field()
27+
freq_channel: str = Field()
28+
geom_file_path: str = Field()
29+
split_label: str = Field()
2830

2931
atomic_maps: list["AtomicMapTable"] = Relationship(
3032
back_populates="coadds",
3133
link_model=AtomicMapToCoaddTable,
3234
)
35+
36+
child_coadds: list["AtomicMapCoaddTable"] = Relationship(
37+
back_populates="parent_coadds",
38+
link_model=CoaddMapToCoaddTable,
39+
sa_relationship_kwargs={
40+
"primaryjoin": "AtomicMapCoaddTable.coadd_id == CoaddMapToCoaddTable.parent_coadd_id",
41+
"secondaryjoin": "AtomicMapCoaddTable.coadd_id == CoaddMapToCoaddTable.child_coadd_id",
42+
},
43+
)
44+
45+
parent_coadds: list["AtomicMapCoaddTable"] = Relationship(
46+
back_populates="child_coadds",
47+
link_model=CoaddMapToCoaddTable,
48+
sa_relationship_kwargs={
49+
"primaryjoin": "AtomicMapCoaddTable.coadd_id == CoaddMapToCoaddTable.child_coadd_id",
50+
"secondaryjoin": "AtomicMapCoaddTable.coadd_id == CoaddMapToCoaddTable.parent_coadd_id",
51+
},
52+
)

mapcat/database/links.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,27 @@ class AtomicMapToCoaddTable(SQLModel, table=True):
7373
index=True,
7474
ondelete="CASCADE",
7575
)
76+
77+
78+
class CoaddMapToCoaddTable(SQLModel, table=True):
79+
"""
80+
Link table for many-to-many relationship between coadd maps and other coadds.
81+
"""
82+
83+
__tablename__ = "link_coadd_map_to_coadd"
84+
85+
parent_coadd_id: int = Field(
86+
foreign_key="atomic_map_coadds.coadd_id",
87+
primary_key=True,
88+
nullable=False,
89+
index=True,
90+
ondelete="CASCADE",
91+
)
92+
93+
child_coadd_id: int = Field(
94+
foreign_key="atomic_map_coadds.coadd_id",
95+
primary_key=True,
96+
nullable=False,
97+
index=True,
98+
ondelete="CASCADE",
99+
)

0 commit comments

Comments
 (0)