temdb 3.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- temdb/alembic.ini +29 -0
- temdb/migrations/env.py +66 -0
- temdb/migrations/script.py.mako +28 -0
- temdb/migrations/versions/.gitkeep +0 -0
- temdb/migrations/versions/20260612_0001_initial_schema.py +542 -0
- temdb/migrations/versions/20260717_ec4c96d0bf77_add_description_to_block_table.py +32 -0
- temdb/migrations/versions/20260721_44f75ed44d66_updated_at_nullable_no_server_default.py +165 -0
- temdb/migrations/versions/20260721_bec991e0d0eb_dataset_status_server_default.py +38 -0
- temdb/migrations/versions/20260801_a1d2f3e4b5c6_add_sections_run_parameters.py +67 -0
- temdb/server/__init__.py +3 -0
- temdb/server/api/__init__.py +0 -0
- temdb/server/api/v2/__init__.py +0 -0
- temdb/server/api/v2/acquisition.py +1094 -0
- temdb/server/api/v2/block.py +228 -0
- temdb/server/api/v2/cutting_session.py +229 -0
- temdb/server/api/v2/dataset.py +139 -0
- temdb/server/api/v2/lens_correction.py +121 -0
- temdb/server/api/v2/microscope.py +93 -0
- temdb/server/api/v2/quality_control.py +185 -0
- temdb/server/api/v2/roi.py +372 -0
- temdb/server/api/v2/section.py +457 -0
- temdb/server/api/v2/specimen.py +246 -0
- temdb/server/api/v2/substrate.py +180 -0
- temdb/server/api/v2/tasks.py +508 -0
- temdb/server/cli.py +48 -0
- temdb/server/config.py +46 -0
- temdb/server/database.py +75 -0
- temdb/server/dependencies.py +24 -0
- temdb/server/exception_handlers.py +109 -0
- temdb/server/ids.py +12 -0
- temdb/server/main.py +172 -0
- temdb/server/sqlmodels/__init__.py +29 -0
- temdb/server/sqlmodels/acquisition.py +101 -0
- temdb/server/sqlmodels/base.py +41 -0
- temdb/server/sqlmodels/block.py +18 -0
- temdb/server/sqlmodels/cutting_session.py +27 -0
- temdb/server/sqlmodels/dataset.py +34 -0
- temdb/server/sqlmodels/lens_correction.py +36 -0
- temdb/server/sqlmodels/microscope.py +22 -0
- temdb/server/sqlmodels/roi.py +55 -0
- temdb/server/sqlmodels/section.py +55 -0
- temdb/server/sqlmodels/specimen.py +17 -0
- temdb/server/sqlmodels/substrate.py +23 -0
- temdb/server/sqlmodels/task.py +60 -0
- temdb/server/sqlmodels/tile.py +53 -0
- temdb/server/sqlmodels/tile_partition.py +147 -0
- temdb-3.0.0.dist-info/METADATA +16 -0
- temdb-3.0.0.dist-info/RECORD +51 -0
- temdb-3.0.0.dist-info/WHEEL +4 -0
- temdb-3.0.0.dist-info/entry_points.txt +3 -0
- temdb-3.0.0.dist-info/licenses/LICENSE +11 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"""updated_at nullable, no server_default
|
|
2
|
+
|
|
3
|
+
Revision ID: 44f75ed44d66
|
|
4
|
+
Revises: bec991e0d0eb
|
|
5
|
+
Create Date: 2026-07-21 15:07:38.694622
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from collections.abc import Sequence
|
|
10
|
+
|
|
11
|
+
import sqlalchemy as sa
|
|
12
|
+
from alembic import op
|
|
13
|
+
from sqlalchemy.dialects import postgresql
|
|
14
|
+
|
|
15
|
+
# revision identifiers, used by Alembic.
|
|
16
|
+
revision: str = "44f75ed44d66"
|
|
17
|
+
down_revision: str | Sequence[str] | None = "bec991e0d0eb"
|
|
18
|
+
branch_labels: str | Sequence[str] | None = None
|
|
19
|
+
depends_on: str | Sequence[str] | None = None
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def upgrade() -> None:
|
|
23
|
+
"""Upgrade schema."""
|
|
24
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
25
|
+
op.alter_column(
|
|
26
|
+
"acquisition_tasks",
|
|
27
|
+
"updated_at",
|
|
28
|
+
existing_type=postgresql.TIMESTAMP(timezone=True),
|
|
29
|
+
server_default=None,
|
|
30
|
+
nullable=True,
|
|
31
|
+
)
|
|
32
|
+
op.alter_column(
|
|
33
|
+
"acquisitions",
|
|
34
|
+
"updated_at",
|
|
35
|
+
existing_type=postgresql.TIMESTAMP(timezone=True),
|
|
36
|
+
server_default=None,
|
|
37
|
+
nullable=True,
|
|
38
|
+
)
|
|
39
|
+
op.alter_column(
|
|
40
|
+
"blocks", "updated_at", existing_type=postgresql.TIMESTAMP(timezone=True), server_default=None, nullable=True
|
|
41
|
+
)
|
|
42
|
+
op.alter_column(
|
|
43
|
+
"cutting_sessions",
|
|
44
|
+
"updated_at",
|
|
45
|
+
existing_type=postgresql.TIMESTAMP(timezone=True),
|
|
46
|
+
server_default=None,
|
|
47
|
+
nullable=True,
|
|
48
|
+
)
|
|
49
|
+
op.alter_column(
|
|
50
|
+
"datasets", "updated_at", existing_type=postgresql.TIMESTAMP(timezone=True), server_default=None, nullable=True
|
|
51
|
+
)
|
|
52
|
+
op.alter_column(
|
|
53
|
+
"lens_corrections",
|
|
54
|
+
"updated_at",
|
|
55
|
+
existing_type=postgresql.TIMESTAMP(timezone=True),
|
|
56
|
+
server_default=None,
|
|
57
|
+
nullable=True,
|
|
58
|
+
)
|
|
59
|
+
op.alter_column(
|
|
60
|
+
"microscopes",
|
|
61
|
+
"updated_at",
|
|
62
|
+
existing_type=postgresql.TIMESTAMP(timezone=True),
|
|
63
|
+
server_default=None,
|
|
64
|
+
nullable=True,
|
|
65
|
+
)
|
|
66
|
+
op.alter_column(
|
|
67
|
+
"rois", "updated_at", existing_type=postgresql.TIMESTAMP(timezone=True), server_default=None, nullable=True
|
|
68
|
+
)
|
|
69
|
+
op.alter_column(
|
|
70
|
+
"sections", "updated_at", existing_type=postgresql.TIMESTAMP(timezone=True), server_default=None, nullable=True
|
|
71
|
+
)
|
|
72
|
+
op.alter_column(
|
|
73
|
+
"specimens", "updated_at", existing_type=postgresql.TIMESTAMP(timezone=True), server_default=None, nullable=True
|
|
74
|
+
)
|
|
75
|
+
op.alter_column(
|
|
76
|
+
"substrates",
|
|
77
|
+
"updated_at",
|
|
78
|
+
existing_type=postgresql.TIMESTAMP(timezone=True),
|
|
79
|
+
server_default=None,
|
|
80
|
+
nullable=True,
|
|
81
|
+
)
|
|
82
|
+
# ### end Alembic commands ###
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def downgrade() -> None:
|
|
86
|
+
"""Downgrade schema."""
|
|
87
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
88
|
+
op.alter_column(
|
|
89
|
+
"substrates",
|
|
90
|
+
"updated_at",
|
|
91
|
+
existing_type=postgresql.TIMESTAMP(timezone=True),
|
|
92
|
+
server_default=sa.text("now()"),
|
|
93
|
+
nullable=False,
|
|
94
|
+
)
|
|
95
|
+
op.alter_column(
|
|
96
|
+
"specimens",
|
|
97
|
+
"updated_at",
|
|
98
|
+
existing_type=postgresql.TIMESTAMP(timezone=True),
|
|
99
|
+
server_default=sa.text("now()"),
|
|
100
|
+
nullable=False,
|
|
101
|
+
)
|
|
102
|
+
op.alter_column(
|
|
103
|
+
"sections",
|
|
104
|
+
"updated_at",
|
|
105
|
+
existing_type=postgresql.TIMESTAMP(timezone=True),
|
|
106
|
+
server_default=sa.text("now()"),
|
|
107
|
+
nullable=False,
|
|
108
|
+
)
|
|
109
|
+
op.alter_column(
|
|
110
|
+
"rois",
|
|
111
|
+
"updated_at",
|
|
112
|
+
existing_type=postgresql.TIMESTAMP(timezone=True),
|
|
113
|
+
server_default=sa.text("now()"),
|
|
114
|
+
nullable=False,
|
|
115
|
+
)
|
|
116
|
+
op.alter_column(
|
|
117
|
+
"microscopes",
|
|
118
|
+
"updated_at",
|
|
119
|
+
existing_type=postgresql.TIMESTAMP(timezone=True),
|
|
120
|
+
server_default=sa.text("now()"),
|
|
121
|
+
nullable=False,
|
|
122
|
+
)
|
|
123
|
+
op.alter_column(
|
|
124
|
+
"lens_corrections",
|
|
125
|
+
"updated_at",
|
|
126
|
+
existing_type=postgresql.TIMESTAMP(timezone=True),
|
|
127
|
+
server_default=sa.text("now()"),
|
|
128
|
+
nullable=False,
|
|
129
|
+
)
|
|
130
|
+
op.alter_column(
|
|
131
|
+
"datasets",
|
|
132
|
+
"updated_at",
|
|
133
|
+
existing_type=postgresql.TIMESTAMP(timezone=True),
|
|
134
|
+
server_default=sa.text("now()"),
|
|
135
|
+
nullable=False,
|
|
136
|
+
)
|
|
137
|
+
op.alter_column(
|
|
138
|
+
"cutting_sessions",
|
|
139
|
+
"updated_at",
|
|
140
|
+
existing_type=postgresql.TIMESTAMP(timezone=True),
|
|
141
|
+
server_default=sa.text("now()"),
|
|
142
|
+
nullable=False,
|
|
143
|
+
)
|
|
144
|
+
op.alter_column(
|
|
145
|
+
"blocks",
|
|
146
|
+
"updated_at",
|
|
147
|
+
existing_type=postgresql.TIMESTAMP(timezone=True),
|
|
148
|
+
server_default=sa.text("now()"),
|
|
149
|
+
nullable=False,
|
|
150
|
+
)
|
|
151
|
+
op.alter_column(
|
|
152
|
+
"acquisitions",
|
|
153
|
+
"updated_at",
|
|
154
|
+
existing_type=postgresql.TIMESTAMP(timezone=True),
|
|
155
|
+
server_default=sa.text("now()"),
|
|
156
|
+
nullable=False,
|
|
157
|
+
)
|
|
158
|
+
op.alter_column(
|
|
159
|
+
"acquisition_tasks",
|
|
160
|
+
"updated_at",
|
|
161
|
+
existing_type=postgresql.TIMESTAMP(timezone=True),
|
|
162
|
+
server_default=sa.text("now()"),
|
|
163
|
+
nullable=False,
|
|
164
|
+
)
|
|
165
|
+
# ### end Alembic commands ###
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""dataset.status server_default
|
|
2
|
+
|
|
3
|
+
Revision ID: bec991e0d0eb
|
|
4
|
+
Revises: ec4c96d0bf77
|
|
5
|
+
Create Date: 2026-07-21 14:12:14.207627
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from collections.abc import Sequence
|
|
10
|
+
|
|
11
|
+
import sqlalchemy as sa
|
|
12
|
+
from alembic import op
|
|
13
|
+
|
|
14
|
+
# revision identifiers, used by Alembic.
|
|
15
|
+
revision: str = "bec991e0d0eb"
|
|
16
|
+
down_revision: str | Sequence[str] | None = "ec4c96d0bf77"
|
|
17
|
+
branch_labels: str | Sequence[str] | None = None
|
|
18
|
+
depends_on: str | Sequence[str] | None = None
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def upgrade() -> None:
|
|
22
|
+
"""Upgrade schema."""
|
|
23
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
24
|
+
op.alter_column(
|
|
25
|
+
"datasets",
|
|
26
|
+
"status",
|
|
27
|
+
existing_type=sa.VARCHAR(),
|
|
28
|
+
server_default=sa.text("'collecting'"),
|
|
29
|
+
existing_nullable=False,
|
|
30
|
+
)
|
|
31
|
+
# ### end Alembic commands ###
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def downgrade() -> None:
|
|
35
|
+
"""Downgrade schema."""
|
|
36
|
+
# ### commands auto generated by Alembic - please adjust! ###
|
|
37
|
+
op.alter_column("datasets", "status", existing_type=sa.VARCHAR(), server_default=None, existing_nullable=False)
|
|
38
|
+
# ### end Alembic commands ###
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"""add sections.run_parameters and migrate legacy nested payload
|
|
2
|
+
|
|
3
|
+
Revision ID: a1d2f3e4b5c6
|
|
4
|
+
Revises: 44f75ed44d66
|
|
5
|
+
Create Date: 2026-08-01 00:00:00.000000
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from collections.abc import Sequence
|
|
10
|
+
|
|
11
|
+
import sqlalchemy as sa
|
|
12
|
+
from alembic import op
|
|
13
|
+
from sqlalchemy.dialects import postgresql
|
|
14
|
+
|
|
15
|
+
# revision identifiers, used by Alembic.
|
|
16
|
+
revision: str = "a1d2f3e4b5c6"
|
|
17
|
+
down_revision: str | Sequence[str] | None = "44f75ed44d66"
|
|
18
|
+
branch_labels: str | Sequence[str] | None = None
|
|
19
|
+
depends_on: str | Sequence[str] | None = None
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def upgrade() -> None:
|
|
23
|
+
"""Upgrade schema."""
|
|
24
|
+
op.add_column("sections", sa.Column("run_parameters", postgresql.JSONB(astext_type=sa.Text()), nullable=True))
|
|
25
|
+
|
|
26
|
+
op.execute(
|
|
27
|
+
sa.text(
|
|
28
|
+
"""
|
|
29
|
+
UPDATE sections
|
|
30
|
+
SET run_parameters = section_metrics->'run_parameters'
|
|
31
|
+
WHERE run_parameters IS NULL
|
|
32
|
+
AND section_metrics IS NOT NULL
|
|
33
|
+
AND section_metrics ? 'run_parameters'
|
|
34
|
+
"""
|
|
35
|
+
)
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
op.execute(
|
|
39
|
+
sa.text(
|
|
40
|
+
"""
|
|
41
|
+
UPDATE sections
|
|
42
|
+
SET section_metrics = section_metrics - 'run_parameters'
|
|
43
|
+
WHERE section_metrics IS NOT NULL
|
|
44
|
+
AND section_metrics ? 'run_parameters'
|
|
45
|
+
"""
|
|
46
|
+
)
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def downgrade() -> None:
|
|
51
|
+
"""Downgrade schema."""
|
|
52
|
+
op.execute(
|
|
53
|
+
sa.text(
|
|
54
|
+
"""
|
|
55
|
+
UPDATE sections
|
|
56
|
+
SET section_metrics = jsonb_set(
|
|
57
|
+
COALESCE(section_metrics, '{}'::jsonb),
|
|
58
|
+
'{run_parameters}',
|
|
59
|
+
run_parameters,
|
|
60
|
+
true
|
|
61
|
+
)
|
|
62
|
+
WHERE run_parameters IS NOT NULL
|
|
63
|
+
"""
|
|
64
|
+
)
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
op.drop_column("sections", "run_parameters")
|
temdb/server/__init__.py
ADDED
|
File without changes
|
|
File without changes
|