Skip to content

Commit 3859cac

Browse files
committed
feat: add external links property to Experiment model and view model
1 parent 796a6f0 commit 3859cac

File tree

4 files changed

+45
-3
lines changed

4 files changed

+45
-3
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
"""add external links property to experiments
2+
3+
Revision ID: 00dab0f5f498
4+
Revises: b22b450d409c
5+
Create Date: 2025-12-16 12:06:15.265947
6+
7+
"""
8+
9+
import sqlalchemy as sa
10+
from sqlalchemy.dialects import postgresql
11+
12+
from alembic import op
13+
14+
# revision identifiers, used by Alembic.
15+
revision = "00dab0f5f498"
16+
down_revision = "b22b450d409c"
17+
branch_labels = None
18+
depends_on = None
19+
20+
21+
def upgrade():
22+
# ### commands auto generated by Alembic - please adjust! ###
23+
op.add_column(
24+
"experiments",
25+
sa.Column("external_links", postgresql.JSONB(astext_type=sa.Text()), nullable=False, server_default="{}"),
26+
)
27+
# ### end Alembic commands ###
28+
29+
30+
def downgrade():
31+
# ### commands auto generated by Alembic - please adjust! ###
32+
op.drop_column("experiments", "external_links")
33+
# ### end Alembic commands ###

src/mavedb/models/experiment.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ class Experiment(Base):
7373
abstract_text = Column(String, nullable=False)
7474
method_text = Column(String, nullable=False)
7575
extra_metadata = Column(JSONB, nullable=False)
76+
external_links = Column(JSONB, nullable=False, default={})
7677

7778
private = Column(Boolean, nullable=False, default=True)
7879
approved = Column(Boolean, nullable=False, default=False)

src/mavedb/view_models/experiment.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
from datetime import date
22
from typing import Any, Collection, Optional, Sequence
33

4-
from pydantic import field_validator, model_validator, ValidationInfo
4+
from pydantic import ValidationInfo, field_validator, model_validator
55

6+
from mavedb.lib.validation import urn_re
67
from mavedb.lib.validation.exceptions import ValidationError
78
from mavedb.lib.validation.transform import (
89
transform_experiment_set_to_urn,
9-
transform_score_set_list_to_urn_list,
1010
transform_record_publication_identifiers,
11+
transform_score_set_list_to_urn_list,
1112
)
12-
from mavedb.lib.validation import urn_re
1313
from mavedb.lib.validation.utilities import is_null
1414
from mavedb.view_models import record_type_validator, set_record_type
1515
from mavedb.view_models.base.base import BaseModel
@@ -37,6 +37,10 @@
3737
from mavedb.view_models.user import SavedUser, User
3838

3939

40+
class ExternalLink(BaseModel):
41+
url: Optional[str] = None
42+
43+
4044
class OfficialCollection(BaseModel):
4145
badge_name: str
4246
name: str
@@ -115,6 +119,7 @@ class SavedExperiment(ExperimentBase):
115119
contributors: list[Contributor]
116120
keywords: Sequence[SavedExperimentControlledKeyword]
117121
score_set_urns: list[str]
122+
external_links: dict[str, ExternalLink]
118123

119124
_record_type_factory = record_type_validator()(set_record_type)
120125

tests/helpers/constants.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,7 @@
540540
"primaryPublicationIdentifiers": [],
541541
"secondaryPublicationIdentifiers": [],
542542
"rawReadIdentifiers": [],
543+
"externalLinks": {},
543544
# keys to be set after receiving response
544545
"urn": None,
545546
"experimentSetUrn": None,
@@ -580,6 +581,7 @@
580581
"primaryPublicationIdentifiers": [],
581582
"secondaryPublicationIdentifiers": [],
582583
"rawReadIdentifiers": [],
584+
"externalLinks": {},
583585
# keys to be set after receiving response
584586
"urn": None,
585587
"experimentSetUrn": None,
@@ -630,6 +632,7 @@
630632
"primaryPublicationIdentifiers": [],
631633
"secondaryPublicationIdentifiers": [],
632634
"rawReadIdentifiers": [],
635+
"externalLinks": {},
633636
# keys to be set after receiving response
634637
"urn": None,
635638
"experimentSetUrn": None,

0 commit comments

Comments
 (0)