Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
279 commits
Select commit Hold shift + click to select a range
7120f2c
serve persisted scipion sets through metadata endpoints
fonsecareyna82 Jun 19, 2026
a430ab2
use object manager for persisted scipion metadata
fonsecareyna82 Jun 19, 2026
bb5b43f
route metadata image rendering through object manager
fonsecareyna82 Jun 19, 2026
12ba8cf
Add logical tables for persisted scipion sets
fonsecareyna82 Jun 19, 2026
8d908b4
fix postgres metadata dao logical table handling
fonsecareyna82 Jun 19, 2026
7dafe66
persist nested logical tables for scipion classes
fonsecareyna82 Jun 19, 2026
1bd8214
Reuse request-scoped database mapper
fonsecareyna82 Jun 20, 2026
e8c0bce
add properties table to postgres metadata dao
fonsecareyna82 Jun 20, 2026
144b574
add metadata table actions to postgres dao
fonsecareyna82 Jun 20, 2026
30c1de2
Expose metadata actions for all tables
fonsecareyna82 Jun 20, 2026
f87fd68
Resolve postgres metadata volume actions
fonsecareyna82 Jun 20, 2026
3266cc0
add metadata action service tests
fonsecareyna82 Jun 20, 2026
b9f5a8a
Add postgresql metadata dao tests
fonsecareyna82 Jun 20, 2026
53feab4
test metadata router mapper propagation
fonsecareyna82 Jun 20, 2026
cc6341c
support nested metadata tables for complex sets
fonsecareyna82 Jun 20, 2026
cf584f7
serve tilt series list from postgresql
fonsecareyna82 Jun 20, 2026
9f8f326
serve tilt series frames from postgresql
fonsecareyna82 Jun 20, 2026
843249a
Render tilt series images from postgresql
fonsecareyna82 Jun 20, 2026
23e990d
Render tilt series batch from postgresql
fonsecareyna82 Jun 20, 2026
8e559bf
serve ctftomo series list from postgresql
fonsecareyna82 Jun 20, 2026
8dadb94
serve ctftomo views from postgresql
fonsecareyna82 Jun 20, 2026
b2c6b32
render ctftomo psd from postgresql metadata
fonsecareyna82 Jun 20, 2026
cbe3a9e
fallback incomplete ctftomo postgresql views
fonsecareyna82 Jun 20, 2026
66c9bf2
sync generated ctftomo set to postgresql
fonsecareyna82 Jun 20, 2026
b776d6f
store linked tomograms for coords3d sets
fonsecareyna82 Jun 20, 2026
9f37380
store coords3d bottom-left coordinates in postgresql
fonsecareyna82 Jun 20, 2026
fb5fc0b
attach coords3d tomograms before bottom-left conversion
fonsecareyna82 Jun 20, 2026
7f9bfc4
serve coords3d tomogram slices from postgresql
fonsecareyna82 Jun 20, 2026
2b8a11e
store edited coords3d outputs in postgresql
fonsecareyna82 Jun 20, 2026
b689faf
add postgresql volume reader
fonsecareyna82 Jun 20, 2026
ba95e91
Match volume slice defaults with coords3d
fonsecareyna82 Jun 21, 2026
bbb242e
Reuse image registry for postgresql volume slices
fonsecareyna82 Jun 21, 2026
9a2a5b6
store class size in postgresql metadata
fonsecareyna82 Jun 21, 2026
5dec466
expose metadata additional info columns
fonsecareyna82 Jun 21, 2026
58077ac
Add postgresql integrated analyze context
fonsecareyna82 Jun 22, 2026
7d0d7b8
move postgresql integrated context to viewer reader
fonsecareyna82 Jun 22, 2026
9cacaab
filter related integrated context relations
fonsecareyna82 Jun 22, 2026
e28d706
prefer volume data files over tomostar metadata
fonsecareyna82 Jun 22, 2026
310e00b
serve integrated tomograms from coords3d context
fonsecareyna82 Jun 22, 2026
787032a
clean integrated tomogram context workarounds
fonsecareyna82 Jun 22, 2026
278ce20
match integrated tilt series by tomogram ids"
fonsecareyna82 Jun 22, 2026
a1ec525
derive integrated tilt series from tomograms
fonsecareyna82 Jun 22, 2026
8045c89
serve integrated tilt series from tomogram context
fonsecareyna82 Jun 22, 2026
38816c2
Revert "serve integrated tilt series from tomogram context"
fonsecareyna82 Jun 22, 2026
9b739e3
Revert "derive integrated tilt series from tomograms"
fonsecareyna82 Jun 22, 2026
700fea7
Revert "match integrated tilt series by tomogram ids""
fonsecareyna82 Jun 22, 2026
fdd9f49
solving conflicts
fonsecareyna82 Jun 22, 2026
601cbcf
solving more conflicts
fonsecareyna82 Jun 22, 2026
5fb7280
Revert "match integrated tilt series by tomogram ids""
fonsecareyna82 Jun 22, 2026
753c70e
remove broken integrated tilt series inference
fonsecareyna82 Jun 22, 2026
09af158
add protocol input refs table
fonsecareyna82 Jun 22, 2026
3dc4cb2
store protocol input refs during sync
fonsecareyna82 Jun 22, 2026
e3068d3
Resolve integrated context from input refs
fonsecareyna82 Jun 22, 2026
11fce83
clarify integrated dependency fallback policy
fonsecareyna82 Jun 22, 2026
01c734d
preserve tomogram relation aliases
fonsecareyna82 Jun 22, 2026
f06d4d7
avoid legacy ctftomo fallback for postgresql outputs
fonsecareyna82 Jun 22, 2026
3029034
avoid unsafe legacy ctftomo views fallback
fonsecareyna82 Jun 22, 2026
54d10d1
match tomogram relations by item index
fonsecareyna82 Jun 22, 2026
65519f2
match postgresql ctftomo series by aliases
fonsecareyna82 Jun 22, 2026
12e5cf9
fix integrated tomogram and ctftomo relations
fonsecareyna82 Jun 22, 2026
619f861
fix integrated tomogram and ctftomo relations
fonsecareyna82 Jun 22, 2026
ff0827b
Resolve ctftomo tilt angles from associated tilt series
fonsecareyna82 Jun 22, 2026
27077d2
resolve ctftomo relations from regular tilt series
fonsecareyna82 Jun 22, 2026
ae01f95
resolve tomogram relations from regular tilt series
fonsecareyna82 Jun 22, 2026
8318fd7
match tomogram relations by semantic ids
fonsecareyna82 Jun 22, 2026
3918cde
Store explicit tomogram tilt series ids
fonsecareyna82 Jun 22, 2026
2ed2264
preserve tomogram volume selectors
fonsecareyna82 Jun 22, 2026
fbc2435
Fix integrated metadata links and schema resolution
fonsecareyna82 Jun 23, 2026
d39d346
Sync filtered TiltSeries outputs with PostgreSQL
fonsecareyna82 Jun 23, 2026
5c1563c
Encapsulate Scipion runtime protocol resolution
fonsecareyna82 Jun 23, 2026
159771d
Centralize Scipion runtime protocol resolution
fonsecareyna82 Jun 23, 2026
43e1661
Resolve runtime protocols in log and rename services
fonsecareyna82 Jun 23, 2026
7128d0d
Purge PostgreSQL outputs before protocol restart
fonsecareyna82 Jun 23, 2026
ba26524
Resolve protocol params through runtime helper
fonsecareyna82 Jun 23, 2026
fd81785
Resolve workflow mutations through runtime helper
fonsecareyna82 Jun 23, 2026
c718285
Resolve file browser protocol ids through runtime helper
fonsecareyna82 Jun 23, 2026
8522ee7
Resolve preview and export protocols through runtime helper
fonsecareyna82 Jun 23, 2026
34f4a35
Resolve viewer fallbacks through runtime helper
fonsecareyna82 Jun 23, 2026
252985e
Resolve coords and metadata fallbacks through runtime helper
fonsecareyna82 Jun 23, 2026
0cdbba7
Resolve external viewers through runtime helper
fonsecareyna82 Jun 23, 2026
6418e48
Resolve auxiliary services through runtime helper
fonsecareyna82 Jun 23, 2026
1e88921
Update tests for runtime protocol resolver
fonsecareyna82 Jun 23, 2026
f5a1bbe
Document runtime-only protocol utilities
fonsecareyna82 Jun 23, 2026
2b512ec
Sync generated outputs with resolved protocol ids
fonsecareyna82 Jun 23, 2026
df378b3
Add coverage for generated output synchronization
fonsecareyna82 Jun 23, 2026
d71cbcc
Centralize generated set PostgreSQL persistence
fonsecareyna82 Jun 23, 2026
4d4e0eb
Resolve PostgreSQL reader protocol ids
fonsecareyna82 Jun 23, 2026
2f07fcd
Test PostgreSQL reader protocol id resolution
fonsecareyna82 Jun 23, 2026
254708a
Require PostgreSQL readers for web viewers
fonsecareyna82 Jun 24, 2026
83658bc
Block CTFTomo viewer runtime fallback
fonsecareyna82 Jun 24, 2026
db4029a
Test PostgreSQL-only viewer mode
fonsecareyna82 Jun 24, 2026
3834947
Report persisted outputs during project sync
fonsecareyna82 Jun 24, 2026
5e27334
Report skipped and failed output sync
fonsecareyna82 Jun 24, 2026
70783ca
Return output sync report from registerOutput
fonsecareyna82 Jun 24, 2026
3479e8f
Test project sync output report
fonsecareyna82 Jun 24, 2026
6cffca5
Compare declared and persisted outputs during sync
fonsecareyna82 Jun 24, 2026
11bdea1
Test declared output sync comparison
fonsecareyna82 Jun 24, 2026
cddc32f
Use PostgreSQL-only integrated analyze context
fonsecareyna82 Jun 24, 2026
22071f1
Test PostgreSQL-only integrated analyze context
fonsecareyna82 Jun 24, 2026
889f568
Resolve protocol ids for thumbnail rendering
fonsecareyna82 Jun 24, 2026
0eccf4e
Resolve protocol ids in batch output thumbnails
fonsecareyna82 Jun 24, 2026
c37b55c
Fix batch thumbnail logging ids
fonsecareyna82 Jun 24, 2026
ce1cee9
Test PostgreSQL id resolution for thumbnails
fonsecareyna82 Jun 24, 2026
b253f82
Resolve runtime ids for protocol logs
fonsecareyna82 Jun 24, 2026
375e1d1
ormalize PostgreSQL metadata values before rendering
fonsecareyna82 Jun 24, 2026
ccdd314
Apply sorting to metadata table pages
fonsecareyna82 Jun 24, 2026
bb7e439
Resolve runtime ids for protocol mutations
fonsecareyna82 Jun 24, 2026
658350b
Resolve runtime id when updating protocol steps
fonsecareyna82 Jun 24, 2026
ba9c968
Test runtime id resolution for protocol mutations
fonsecareyna82 Jun 24, 2026
78b2d92
Test runtime id resolution for subtree mutations
fonsecareyna82 Jun 24, 2026
ca986cb
Test runtime id resolution for protocol launch
fonsecareyna82 Jun 24, 2026
ac97501
Fixing indentation errors
fonsecareyna82 Jun 24, 2026
1453ba0
Test runtime id resolution for workflow export
fonsecareyna82 Jun 24, 2026
48c6daa
Test workflow import reference handling
fonsecareyna82 Jun 24, 2026
85f1451
Resolve runtime id when listing protocol steps
fonsecareyna82 Jun 24, 2026
5a3da1e
Test runtime id resolution for file workflow export
fonsecareyna82 Jun 24, 2026
21e1e73
Test runtime id resolution for file browser operations
fonsecareyna82 Jun 24, 2026
962f18e
Test runtime id resolution for protocol params
fonsecareyna82 Jun 24, 2026
42a0a0f
Test runtime id resolution for next protocol suggestions
fonsecareyna82 Jun 24, 2026
2506277
Test runtime id resolution for pointer params
fonsecareyna82 Jun 24, 2026
b6d0305
Test runtime id resolution for protocol wizards
fonsecareyna82 Jun 24, 2026
c65bf47
Test runtime id resolution for coords2d outputs
fonsecareyna82 Jun 24, 2026
de0ec85
Remove legacy protocols router from API
fonsecareyna82 Jun 24, 2026
dca6739
Resolve protocol tag assignments by database id
fonsecareyna82 Jun 24, 2026
3f922b5
Test protocol tag id resolution
fonsecareyna82 Jun 24, 2026
2886687
Test protocol tag database id resolution
fonsecareyna82 Jun 24, 2026
04f9a91
Pass mapper when resolving analyze viewers
fonsecareyna82 Jun 25, 2026
4f1de3e
Align tests with external analyze viewer resolver
fonsecareyna82 Jun 25, 2026
da72a74
Require PostgreSQL coords3d viewer data
fonsecareyna82 Jun 25, 2026
1930a02
Require PostgreSQL tiltseries image viewer data
fonsecareyna82 Jun 25, 2026
24b5a03
Require PostgreSQL ctftomo views data
fonsecareyna82 Jun 25, 2026
8fbafab
Require PostgreSQL FSC viewer data
fonsecareyna82 Jun 25, 2026
bc79e10
Test metadata action protocol id resolution
fonsecareyna82 Jun 25, 2026
652b462
Resolve protocol id for metadata image paths
fonsecareyna82 Jun 25, 2026
e56d3f4
Resolve protocol ids for thumbnail item filtering
fonsecareyna82 Jun 25, 2026
30ea271
Add project PostgreSQL consistency checker
fonsecareyna82 Jun 25, 2026
10106ac
Expose project PostgreSQL consistency checker
fonsecareyna82 Jun 25, 2026
5e70683
Expose project PostgreSQL consistency checker
fonsecareyna82 Jun 25, 2026
6a7f546
Check persisted outputs in PostgreSQL consistency report
fonsecareyna82 Jun 25, 2026
fe6bc3e
Fixing consistency
fonsecareyna82 Jun 25, 2026
15ecb2d
Check protocol steps in PostgreSQL consistency report
fonsecareyna82 Jun 25, 2026
4b8a5ad
Fix consistency checker runtime step collection
fonsecareyna82 Jun 25, 2026
d9f83cd
Fix consistency checker runtime step collection
fonsecareyna82 Jun 25, 2026
25a926f
Check protocol input refs in PostgreSQL consistency report
fonsecareyna82 Jun 25, 2026
b4d05d6
Check input refs against protocol dependencies
fonsecareyna82 Jun 25, 2026
e5a4c44
Check protocol params in PostgreSQL consistency report
fonsecareyna82 Jun 25, 2026
2ac1310
Fixing tests
fonsecareyna82 Jun 25, 2026
867db31
Check protocol params in PostgreSQL consistency report
fonsecareyna82 Jun 25, 2026
c558f5c
Check output classes in PostgreSQL consistency report
fonsecareyna82 Jun 25, 2026
d4180b7
Check output mapper kinds in PostgreSQL consistency report
fonsecareyna82 Jun 25, 2026
195aa6c
Check output item counts in PostgreSQL consistency report
fonsecareyna82 Jun 25, 2026
7254048
Check protocol classes in PostgreSQL consistency report
fonsecareyna82 Jun 25, 2026
d187b62
Extract PostgreSQL consistency checker service
fonsecareyna82 Jun 25, 2026
b262fce
Move consistency checker helpers to service methods
fonsecareyna82 Jun 25, 2026
fcbfc4b
Extract runtime snapshot collection
fonsecareyna82 Jun 25, 2026
e9b7661
Extract PostgreSQL snapshot collection
fonsecareyna82 Jun 25, 2026
5237821
Extract consistency derived sets builder
fonsecareyna82 Jun 25, 2026
12e7296
Extract protocol consistency comparison
fonsecareyna82 Jun 25, 2026
97027b8
Extract dependency consistency comparison
fonsecareyna82 Jun 25, 2026
d75e9b7
Extract output issue builders
fonsecareyna82 Jun 25, 2026
de3bec1
Extract output consistency comparison
fonsecareyna82 Jun 25, 2026
8f09ce8
Extract step consistency comparison
fonsecareyna82 Jun 25, 2026
3f4725a
Extract parameter consistency comparison
fonsecareyna82 Jun 25, 2026
87fa200
Extract input reference consistency comparison
fonsecareyna82 Jun 25, 2026
eb3e89f
Extract input reference dependency comparison
fonsecareyna82 Jun 26, 2026
8a1edd4
Extract consistency issues builder
fonsecareyna82 Jun 26, 2026
021cc09
Extract consistency summary builder
fonsecareyna82 Jun 26, 2026
99e6ba0
Extract consistency comparisons builder
fonsecareyna82 Jun 26, 2026
9268594
Clean consistency service formatting
fonsecareyna82 Jun 26, 2026
fb64080
Align consistency tests with input reference target validation
fonsecareyna82 Jun 26, 2026
fa4106b
Align input ref consistency tests with target validation
fonsecareyna82 Jun 26, 2026
295c4be
Fix input ref target validation test order
fonsecareyna82 Jun 26, 2026
3a3c8e4
Validate PostgreSQL output payload completeness
fonsecareyna82 Jun 26, 2026
cf30868
Clean step consistency comparison formatting
fonsecareyna82 Jun 26, 2026
d2b9096
feat(consistency): compare flat set itemsCount with persisted rows
fonsecareyna82 Jun 26, 2026
208d48c
feat(consistency): validate flat set max item id
fonsecareyna82 Jun 26, 2026
57eb7d2
fix(consistency): avoid extra root table mismatch issues
fonsecareyna82 Jun 26, 2026
aa5edac
fix(consistency): include flat set column stats in payload
fonsecareyna82 Jun 26, 2026
c1b2313
feat(consistency): validate flat set columns count
fonsecareyna82 Jun 27, 2026
23de5cf
feat(consistency): validate root table columns count
fonsecareyna82 Jun 27, 2026
5d702e0
feat(consistency): validate root table column schema
fonsecareyna82 Jun 27, 2026
e6a2a1d
feat(consistency): validate root table item id signature
fonsecareyna82 Jun 27, 2026
6cd044b
feat(consistency): validate root table item id signature
fonsecareyna82 Jun 27, 2026
61859e3
feat(consistency): validate root table item value signature
fonsecareyna82 Jun 27, 2026
c341faf
feat(consistency): validate flat set properties signature
fonsecareyna82 Jun 27, 2026
6e53354
feat(consistency): validate flat set root object
fonsecareyna82 Jun 27, 2026
340ab4b
feat(consistency): validate flat set root object
fonsecareyna82 Jun 27, 2026
4953046
Fixing a tests
fonsecareyna82 Jun 27, 2026
06c06cc
feat(consistency): validate flat set root object
fonsecareyna82 Jun 27, 2026
226842c
perf(projects): use lightweight persisted output summaries
fonsecareyna82 Jun 27, 2026
c95d778
fix(consistency): skip param comparison when runtime params are unava…
fonsecareyna82 Jun 28, 2026
23b8b6c
fix(consistency): ignore input refs to unavailable runtime outputs
fonsecareyna82 Jun 28, 2026
65192ad
feat(projects): sync protocol steps from project snapshot
fonsecareyna82 Jun 28, 2026
834ffce
feat(projects): validate postgres consistency across project mutations
fonsecareyna82 Jun 29, 2026
6f42a07
refactor(protocols): use request-scoped project service
fonsecareyna82 Jun 29, 2026
2d92024
fix(protocols): scope new protocol params cache by project
fonsecareyna82 Jun 29, 2026
cf9c94a
fix(protocols): handle duplicate protocol copy errors safely
fonsecareyna82 Jun 29, 2026
4455937
fix(protocols): normalize legacy log offsets
fonsecareyna82 Jun 29, 2026
dd1be6d
fix(protocols): reset legacy log offsets after truncation
fonsecareyna82 Jun 29, 2026
5278ecc
fix(protocols): preserve delete protocol http errors
fonsecareyna82 Jun 29, 2026
d335104
fix(protocols): return validation error for missing delete ids
fonsecareyna82 Jun 29, 2026
4b21b5d
fix(protocols): return delete protocol sync counts
fonsecareyna82 Jun 29, 2026
be15155
fix(protocols): return duplicate protocol sync counts
fonsecareyna82 Jun 29, 2026
15a1d7f
fix(protocols): return stop protocol sync counts
fonsecareyna82 Jun 29, 2026
bc80960
fix(protocols): return restart protocol sync counts
fonsecareyna82 Jun 29, 2026
c30edf8
fix(protocols): return continue protocol sync counts
fonsecareyna82 Jun 29, 2026
690f8d9
fix(protocols): return reset protocol sync counts
fonsecareyna82 Jun 29, 2026
e916b1e
refactor(protocols): centralize sync count response mapping
fonsecareyna82 Jun 29, 2026
c938d2e
fix(protocols): return rename protocol sync counts
fonsecareyna82 Jun 29, 2026
3063219
fix(protocols): return launch protocol sync counts
fonsecareyna82 Jun 29, 2026
2e63504
fix(protocols): accept resume launch mode alias
fonsecareyna82 Jun 29, 2026
0472263
fix(protocols): default missing launch mode to launch
fonsecareyna82 Jun 29, 2026
3163923
fix(protocols): mark launch protocol errors as failed
fonsecareyna82 Jun 29, 2026
7ffb334
test(protocols): cover launch protocol unexpected errors
fonsecareyna82 Jun 29, 2026
15e57dd
test(protocols): cover save protocol http errors
fonsecareyna82 Jun 29, 2026
f245547
test(protocols): cover save protocol unexpected errors
fonsecareyna82 Jun 29, 2026
4e2385b
test(protocols): cover save protocol missing project
fonsecareyna82 Jun 29, 2026
a787ce4
fix(protocols): normalize suggestion protocol errors
fonsecareyna82 Jun 29, 2026
8dc5bf1
test(protocols): cover rename protocol unexpected errors
fonsecareyna82 Jun 29, 2026
6f64c0e
test(protocols): cover rename protocol http errors
fonsecareyna82 Jun 29, 2026
2b6f818
test(protocols): cover duplicate protocol errors
fonsecareyna82 Jun 29, 2026
8137e47
test(protocols): cover delete protocol errors
fonsecareyna82 Jun 29, 2026
3d40bba
test(protocols): cover restart protocol unexpected errors
fonsecareyna82 Jun 29, 2026
5e155cf
test(protocols): cover continue protocol errors
fonsecareyna82 Jun 29, 2026
dcca6e7
test(protocols): cover reset protocol errors
fonsecareyna82 Jun 29, 2026
907dae5
test(protocols): cover stop protocol errors
fonsecareyna82 Jun 29, 2026
0fa316a
test(protocols): cover missing project protocol operations
fonsecareyna82 Jun 29, 2026
b61ea39
refactor(projects): count project protocols from postgresql
fonsecareyna82 Jun 29, 2026
25faf27
test(projects): cover postgresql protocol counts
fonsecareyna82 Jun 29, 2026
9c7cc5f
refactor(protocols): avoid runtime load when listing protocol steps
fonsecareyna82 Jun 29, 2026
8a6539e
refactor(protocols): avoid runtime load when listing protocol classes
fonsecareyna82 Jun 29, 2026
38a6b47
refactor(protocols): avoid runtime load when listing protocol classes
fonsecareyna82 Jun 29, 2026
486bb87
refactor(metadata): avoid runtime load for metadata reads
fonsecareyna82 Jun 29, 2026
f50967b
refactor(metadata): avoid runtime load for metadata window reads
fonsecareyna82 Jun 29, 2026
31b881f
refactor(volumes): avoid runtime load for volume metadata reads
fonsecareyna82 Jun 29, 2026
1d364b2
refactor(tomography): avoid runtime load for tomography metadata reads
fonsecareyna82 Jun 29, 2026
c924925
refactor(coords3d): avoid runtime load for coordinates metadata reads
fonsecareyna82 Jun 29, 2026
4fc4bbf
refactor(metadata): avoid runtime load for metadata image reads
fonsecareyna82 Jun 29, 2026
fec54ff
refactor(tags): avoid runtime load for tag endpoints
fonsecareyna82 Jun 29, 2026
773aa3b
refactor(fsc): avoid runtime load for fsc rows
fonsecareyna82 Jun 29, 2026
9f6e386
refactor(projects): avoid runtime load for effective settings
fonsecareyna82 Jun 29, 2026
b69e144
refactor(coords3d): avoid runtime load for tomogram slice render
fonsecareyna82 Jun 29, 2026
57c1a65
refactor(viewers): avoid runtime load when resolving analyze viewer
fonsecareyna82 Jun 29, 2026
7afe58c
Fixing resolve analyze tests
fonsecareyna82 Jun 29, 2026
54dac0e
refactor(volumes): avoid runtime load for volume render endpoints
fonsecareyna82 Jun 29, 2026
d4d5630
refactor(tiltseries): avoid runtime load for tilt image renders
fonsecareyna82 Jun 29, 2026
99eafab
refactor(ctftomo): avoid runtime load for psd renders
fonsecareyna82 Jun 29, 2026
4a15c82
refactor(coords2d): add postgresql reader for coordinates metadata
fonsecareyna82 Jun 30, 2026
554922d
Removing deprecated tests
fonsecareyna82 Jun 30, 2026
e5193ac
refactor(logs): resolve protocol logs from postgresql paths first
fonsecareyna82 Jun 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .backend_reload_marker
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
reloadMarker=1780572679.3509667
1 change: 1 addition & 0 deletions alembic/env.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
tag_model,
protocol_tag_assignment_model,
protocol_step_model,
scipion_object_model,
)

target_metadata = Base.metadata
Expand Down
249 changes: 249 additions & 0 deletions alembic/versions/1f8e5b400102_add_scipion_object_persistence_models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,249 @@
"""add scipion object persistence models

Revision ID: 1f8e5b400102
Revises: 6806b9a72a6e
Create Date: 2026-06-19 11:10:02.296385

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql


# revision identifiers, used by Alembic.
revision: str = "1f8e5b400102"
down_revision: Union[str, None] = "6806b9a72a6e"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
op.create_table(
"scipion_object_types",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("className", sa.Text(), nullable=False),
sa.Column("moduleName", sa.Text(), nullable=True),
sa.Column("baseClassName", sa.Text(), nullable=True),
sa.Column("mapperKind", sa.Text(), server_default="tree", nullable=False),
sa.Column(
"schema",
postgresql.JSONB(astext_type=sa.Text()),
server_default=sa.text("'{}'::jsonb"),
nullable=False,
),
sa.Column("createdAt", sa.DateTime(timezone=True), server_default=sa.text("now()"), nullable=False),
sa.Column("updatedAt", sa.DateTime(timezone=True), nullable=True),
sa.CheckConstraint("\"mapperKind\" IN ('tree', 'flat_set', 'scalar', 'pointer')", name="ck_scipion_object_types_mapper_kind"),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("className"),
)
op.create_index("idx_scipion_object_types_className", "scipion_object_types", ["className"])
op.create_index("idx_scipion_object_types_mapperKind", "scipion_object_types", ["mapperKind"])
op.create_index(
"idx_scipion_object_types_schema_gin",
"scipion_object_types",
["schema"],
postgresql_using="gin",
)
op.create_index(op.f("ix_scipion_object_types_id"), "scipion_object_types", ["id"])

op.create_table(
"scipion_object_type_properties",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("typeId", sa.Integer(), nullable=False),
sa.Column("propertyPath", sa.Text(), nullable=False),
sa.Column("className", sa.Text(), nullable=True),
sa.Column("valueKind", sa.Text(), nullable=True),
sa.Column("isPointer", sa.Boolean(), server_default="false", nullable=False),
sa.Column("isNested", sa.Boolean(), server_default="false", nullable=False),
sa.Column(
"schema",
postgresql.JSONB(astext_type=sa.Text()),
server_default=sa.text("'{}'::jsonb"),
nullable=False,
),
sa.Column("createdAt", sa.DateTime(timezone=True), server_default=sa.text("now()"), nullable=False),
sa.Column("updatedAt", sa.DateTime(timezone=True), nullable=True),
sa.ForeignKeyConstraint(["typeId"], ["scipion_object_types.id"], ondelete="CASCADE"),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("typeId", "propertyPath", name="ux_scipion_object_type_properties_type_path"),
)
op.create_index("idx_scipion_object_type_properties_path", "scipion_object_type_properties", ["propertyPath"])
op.create_index(
"idx_scipion_object_type_properties_schema_gin",
"scipion_object_type_properties",
["schema"],
postgresql_using="gin",
)
op.create_index(op.f("ix_scipion_object_type_properties_id"), "scipion_object_type_properties", ["id"])

op.create_table(
"scipion_objects",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("projectId", sa.Integer(), nullable=False),
sa.Column("protocolDbId", sa.Integer(), nullable=True),
sa.Column("scipionObjId", sa.Integer(), nullable=False),
sa.Column("parentObjectId", sa.Integer(), nullable=True),
sa.Column("name", sa.Text(), nullable=True),
sa.Column("path", sa.Text(), nullable=False),
sa.Column("className", sa.Text(), nullable=False),
sa.Column("value", sa.Text(), nullable=True),
sa.Column("label", sa.Text(), nullable=True),
sa.Column("comment", sa.Text(), nullable=True),
sa.Column("creation", sa.DateTime(timezone=True), nullable=True),
sa.Column(
"metadata",
postgresql.JSONB(astext_type=sa.Text()),
server_default=sa.text("'{}'::jsonb"),
nullable=False,
),
sa.Column("createdAt", sa.DateTime(timezone=True), server_default=sa.text("now()"), nullable=False),
sa.Column("updatedAt", sa.DateTime(timezone=True), nullable=True),
sa.ForeignKeyConstraint(["parentObjectId"], ["scipion_objects.id"], ondelete="CASCADE"),
sa.ForeignKeyConstraint(["projectId"], ["projects.id"], ondelete="CASCADE"),
sa.ForeignKeyConstraint(["protocolDbId"], ["protocols.id"], ondelete="CASCADE"),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("projectId", "protocolDbId", "path", name="ux_scipion_objects_project_protocol_path"),
sa.UniqueConstraint(
"projectId",
"protocolDbId",
"scipionObjId",
name="ux_scipion_objects_project_protocol_obj",
),
)
op.create_index("idx_scipion_objects_metadata_gin", "scipion_objects", ["metadata"], postgresql_using="gin")
op.create_index("idx_scipion_objects_parent", "scipion_objects", ["parentObjectId"])
op.create_index("idx_scipion_objects_project_class", "scipion_objects", ["projectId", "className"])
op.create_index("idx_scipion_objects_project_protocol", "scipion_objects", ["projectId", "protocolDbId"])
op.create_index(op.f("ix_scipion_objects_id"), "scipion_objects", ["id"])

op.create_table(
"scipion_object_relations",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("projectId", sa.Integer(), nullable=False),
sa.Column("creatorObjectId", sa.Integer(), nullable=False),
sa.Column("parentObjectId", sa.Integer(), nullable=False),
sa.Column("childObjectId", sa.Integer(), nullable=False),
sa.Column("name", sa.Text(), nullable=False),
sa.Column("parentExtended", sa.Text(), nullable=True),
sa.Column("childExtended", sa.Text(), nullable=True),
sa.Column(
"metadata",
postgresql.JSONB(astext_type=sa.Text()),
server_default=sa.text("'{}'::jsonb"),
nullable=False,
),
sa.Column("creation", sa.DateTime(timezone=True), nullable=True),
sa.Column("createdAt", sa.DateTime(timezone=True), server_default=sa.text("now()"), nullable=False),
sa.ForeignKeyConstraint(["childObjectId"], ["scipion_objects.id"], ondelete="CASCADE"),
sa.ForeignKeyConstraint(["creatorObjectId"], ["scipion_objects.id"], ondelete="CASCADE"),
sa.ForeignKeyConstraint(["parentObjectId"], ["scipion_objects.id"], ondelete="CASCADE"),
sa.ForeignKeyConstraint(["projectId"], ["projects.id"], ondelete="CASCADE"),
sa.PrimaryKeyConstraint("id"),
)
op.create_index("idx_scipion_object_relations_child", "scipion_object_relations", ["childObjectId"])
op.create_index(
"idx_scipion_object_relations_metadata_gin",
"scipion_object_relations",
["metadata"],
postgresql_using="gin",
)
op.create_index("idx_scipion_object_relations_parent", "scipion_object_relations", ["parentObjectId"])
op.create_index("idx_scipion_object_relations_project_name", "scipion_object_relations", ["projectId", "name"])
op.create_index(op.f("ix_scipion_object_relations_id"), "scipion_object_relations", ["id"])

op.create_table(
"scipion_sets",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("projectId", sa.Integer(), nullable=False),
sa.Column("protocolDbId", sa.Integer(), nullable=True),
sa.Column("objectId", sa.Integer(), nullable=True),
sa.Column("outputName", sa.Text(), nullable=False),
sa.Column("setClassName", sa.Text(), nullable=False),
sa.Column("itemClassName", sa.Text(), nullable=False),
sa.Column(
"properties",
postgresql.JSONB(astext_type=sa.Text()),
server_default=sa.text("'{}'::jsonb"),
nullable=False,
),
sa.Column("createdAt", sa.DateTime(timezone=True), server_default=sa.text("now()"), nullable=False),
sa.Column("updatedAt", sa.DateTime(timezone=True), nullable=True),
sa.ForeignKeyConstraint(["objectId"], ["scipion_objects.id"], ondelete="SET NULL"),
sa.ForeignKeyConstraint(["projectId"], ["projects.id"], ondelete="CASCADE"),
sa.ForeignKeyConstraint(["protocolDbId"], ["protocols.id"], ondelete="CASCADE"),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("projectId", "protocolDbId", "outputName", name="ux_scipion_sets_project_protocol_output"),
)
op.create_index("idx_scipion_sets_project_protocol", "scipion_sets", ["projectId", "protocolDbId"])
op.create_index("idx_scipion_sets_properties_gin", "scipion_sets", ["properties"], postgresql_using="gin")
op.create_index(op.f("ix_scipion_sets_id"), "scipion_sets", ["id"])

op.create_table(
"scipion_set_columns",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("setId", sa.Integer(), nullable=False),
sa.Column("labelProperty", sa.Text(), nullable=False),
sa.Column("columnName", sa.Text(), nullable=False),
sa.Column("className", sa.Text(), nullable=True),
sa.Column("valueType", sa.Text(), nullable=True),
sa.Column("position", sa.Integer(), nullable=False),
sa.Column("indexed", sa.Boolean(), server_default="false", nullable=False),
sa.ForeignKeyConstraint(["setId"], ["scipion_sets.id"], ondelete="CASCADE"),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("setId", "columnName", name="ux_scipion_set_columns_set_column"),
sa.UniqueConstraint("setId", "labelProperty", name="ux_scipion_set_columns_set_label"),
)
op.create_index("idx_scipion_set_columns_label", "scipion_set_columns", ["labelProperty"])
op.create_index(op.f("ix_scipion_set_columns_id"), "scipion_set_columns", ["id"])

op.create_table(
"scipion_set_items",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("setId", sa.Integer(), nullable=False),
sa.Column("scipionItemId", sa.Integer(), nullable=False),
sa.Column("enabled", sa.Boolean(), server_default="true", nullable=False),
sa.Column("label", sa.Text(), nullable=True),
sa.Column("comment", sa.Text(), nullable=True),
sa.Column("creation", sa.DateTime(timezone=True), nullable=True),
sa.Column(
"values",
postgresql.JSONB(astext_type=sa.Text()),
server_default=sa.text("'{}'::jsonb"),
nullable=False,
),
sa.Column("createdAt", sa.DateTime(timezone=True), server_default=sa.text("now()"), nullable=False),
sa.Column("updatedAt", sa.DateTime(timezone=True), nullable=True),
sa.ForeignKeyConstraint(["setId"], ["scipion_sets.id"], ondelete="CASCADE"),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("setId", "scipionItemId", name="ux_scipion_set_items_set_item"),
)
op.create_index("idx_scipion_set_items_set", "scipion_set_items", ["setId"])
op.create_index("idx_scipion_set_items_values_gin", "scipion_set_items", ["values"], postgresql_using="gin")
op.create_index(op.f("ix_scipion_set_items_id"), "scipion_set_items", ["id"])

op.create_table(
"scipion_set_properties",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("setId", sa.Integer(), nullable=False),
sa.Column("key", sa.Text(), nullable=False),
sa.Column("value", sa.Text(), nullable=True),
sa.ForeignKeyConstraint(["setId"], ["scipion_sets.id"], ondelete="CASCADE"),
sa.PrimaryKeyConstraint("id"),
sa.UniqueConstraint("setId", "key", name="ux_scipion_set_properties_set_key"),
)
op.create_index("idx_scipion_set_properties_key", "scipion_set_properties", ["key"])
op.create_index(op.f("ix_scipion_set_properties_id"), "scipion_set_properties", ["id"])


def downgrade() -> None:
op.drop_table("scipion_set_properties")
op.drop_table("scipion_set_items")
op.drop_table("scipion_set_columns")
op.drop_table("scipion_sets")
op.drop_table("scipion_object_relations")
op.drop_table("scipion_objects")
op.drop_table("scipion_object_type_properties")
op.drop_table("scipion_object_types")
89 changes: 89 additions & 0 deletions alembic/versions/2fc2cd4da2e2_add_protocol_input_refs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
"""add protocol input refs

Revision ID: 2fc2cd4da2e2
Revises: 33ffae69565b
Create Date: 2026-06-22 12:06:28.813389

"""
from typing import Sequence, Union

from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision: str = '2fc2cd4da2e2'
down_revision: Union[str, None] = '33ffae69565b'
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None


def upgrade() -> None:
op.create_table(
"protocol_input_refs",
sa.Column("projectId", sa.Integer(), nullable=False),
sa.Column("protocolDbId", sa.Integer(), nullable=False),
sa.Column("protocolId", sa.Text(), nullable=False),
sa.Column("inputName", sa.Text(), nullable=False),
sa.Column("itemIndex", sa.Integer(), nullable=False, server_default="0"),
sa.Column("parentProtocolDbId", sa.Integer(), nullable=True),
sa.Column("parentProtocolId", sa.Text(), nullable=True),
sa.Column("parentOutputName", sa.Text(), nullable=True),
sa.Column("objectClassName", sa.Text(), nullable=True),
sa.Column("objectId", sa.Text(), nullable=True),
sa.Column("createdAt", sa.DateTime(timezone=True), server_default=sa.text("now()"), nullable=False),
sa.Column("updatedAt", sa.DateTime(timezone=True), server_default=sa.text("now()"), nullable=False),
sa.PrimaryKeyConstraint(
"projectId",
"protocolDbId",
"inputName",
"itemIndex",
name="protocol_input_refs_pkey",
),
sa.ForeignKeyConstraint(
["projectId"],
["projects.id"],
name="protocol_input_refs_projectId_fkey",
ondelete="CASCADE",
),
sa.ForeignKeyConstraint(
["projectId", "protocolDbId"],
["protocols.projectId", "protocols.id"],
name="protocol_input_refs_protocolDbId_fkey",
ondelete="CASCADE",
),
sa.ForeignKeyConstraint(
["projectId", "parentProtocolDbId"],
["protocols.projectId", "protocols.id"],
name="protocol_input_refs_parentProtocolDbId_fkey",
ondelete="CASCADE",
),
)

op.create_index(
"idx_protocol_input_refs_protocol",
"protocol_input_refs",
["projectId", "protocolDbId"],
unique=False,
)

op.create_index(
"idx_protocol_input_refs_parent",
"protocol_input_refs",
["projectId", "parentProtocolDbId", "parentOutputName"],
unique=False,
)

op.create_index(
"idx_protocol_input_refs_parent_protocol_id",
"protocol_input_refs",
["projectId", "parentProtocolId", "parentOutputName"],
unique=False,
)


def downgrade() -> None:
op.drop_index("idx_protocol_input_refs_parent_protocol_id", table_name="protocol_input_refs")
op.drop_index("idx_protocol_input_refs_parent", table_name="protocol_input_refs")
op.drop_index("idx_protocol_input_refs_protocol", table_name="protocol_input_refs")
op.drop_table("protocol_input_refs")
Loading
Loading