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.
Files changed (51) hide show
  1. temdb/alembic.ini +29 -0
  2. temdb/migrations/env.py +66 -0
  3. temdb/migrations/script.py.mako +28 -0
  4. temdb/migrations/versions/.gitkeep +0 -0
  5. temdb/migrations/versions/20260612_0001_initial_schema.py +542 -0
  6. temdb/migrations/versions/20260717_ec4c96d0bf77_add_description_to_block_table.py +32 -0
  7. temdb/migrations/versions/20260721_44f75ed44d66_updated_at_nullable_no_server_default.py +165 -0
  8. temdb/migrations/versions/20260721_bec991e0d0eb_dataset_status_server_default.py +38 -0
  9. temdb/migrations/versions/20260801_a1d2f3e4b5c6_add_sections_run_parameters.py +67 -0
  10. temdb/server/__init__.py +3 -0
  11. temdb/server/api/__init__.py +0 -0
  12. temdb/server/api/v2/__init__.py +0 -0
  13. temdb/server/api/v2/acquisition.py +1094 -0
  14. temdb/server/api/v2/block.py +228 -0
  15. temdb/server/api/v2/cutting_session.py +229 -0
  16. temdb/server/api/v2/dataset.py +139 -0
  17. temdb/server/api/v2/lens_correction.py +121 -0
  18. temdb/server/api/v2/microscope.py +93 -0
  19. temdb/server/api/v2/quality_control.py +185 -0
  20. temdb/server/api/v2/roi.py +372 -0
  21. temdb/server/api/v2/section.py +457 -0
  22. temdb/server/api/v2/specimen.py +246 -0
  23. temdb/server/api/v2/substrate.py +180 -0
  24. temdb/server/api/v2/tasks.py +508 -0
  25. temdb/server/cli.py +48 -0
  26. temdb/server/config.py +46 -0
  27. temdb/server/database.py +75 -0
  28. temdb/server/dependencies.py +24 -0
  29. temdb/server/exception_handlers.py +109 -0
  30. temdb/server/ids.py +12 -0
  31. temdb/server/main.py +172 -0
  32. temdb/server/sqlmodels/__init__.py +29 -0
  33. temdb/server/sqlmodels/acquisition.py +101 -0
  34. temdb/server/sqlmodels/base.py +41 -0
  35. temdb/server/sqlmodels/block.py +18 -0
  36. temdb/server/sqlmodels/cutting_session.py +27 -0
  37. temdb/server/sqlmodels/dataset.py +34 -0
  38. temdb/server/sqlmodels/lens_correction.py +36 -0
  39. temdb/server/sqlmodels/microscope.py +22 -0
  40. temdb/server/sqlmodels/roi.py +55 -0
  41. temdb/server/sqlmodels/section.py +55 -0
  42. temdb/server/sqlmodels/specimen.py +17 -0
  43. temdb/server/sqlmodels/substrate.py +23 -0
  44. temdb/server/sqlmodels/task.py +60 -0
  45. temdb/server/sqlmodels/tile.py +53 -0
  46. temdb/server/sqlmodels/tile_partition.py +147 -0
  47. temdb-3.0.0.dist-info/METADATA +16 -0
  48. temdb-3.0.0.dist-info/RECORD +51 -0
  49. temdb-3.0.0.dist-info/WHEEL +4 -0
  50. temdb-3.0.0.dist-info/entry_points.txt +3 -0
  51. 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")
@@ -0,0 +1,3 @@
1
+ from temdb.server.main import create_app
2
+
3
+ __all__ = ["create_app"]
File without changes
File without changes