Skip to content

Commit b3586d5

Browse files
authored
Do not allow uploading of binary_blob in distribution field. (#610)
Patch also other distributions
1 parent b5db59e commit b3586d5

File tree

2 files changed

+28
-8
lines changed

2 files changed

+28
-8
lines changed

alembic/alembic/versions/fabaaad1cf1f_make_content_url_optional_and_add_image_.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,15 @@
3636
"team",
3737
]
3838

39+
assets_with_distributions = [
40+
"case_study",
41+
"dataset",
42+
"experiment",
43+
"computational_asset",
44+
"ml_model",
45+
"publication",
46+
]
47+
3948

4049
def upgrade() -> None:
4150
for asset_type in assets_with_media:
@@ -51,6 +60,12 @@ def upgrade() -> None:
5160
column=sa.Column("binary_blob", sa.LargeBinary(), nullable=True),
5261
)
5362

63+
for asset_type in assets_with_distributions:
64+
op.add_column(
65+
table_name=f"distribution_{asset_type}",
66+
column=sa.Column("binary_blob", sa.LargeBinary(), nullable=True),
67+
)
68+
5469

5570
def downgrade() -> None:
5671
for asset_type in assets_with_media:
@@ -62,3 +77,6 @@ def downgrade() -> None:
6277
)
6378

6479
op.drop_column(f"media_{asset_type}", "binary_blob")
80+
81+
for asset_type in assets_with_distributions:
82+
op.drop_column(f"distribution_{asset_type}", "binary_blob")

src/routers/resource_router.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -871,12 +871,14 @@ def _raise_error_on_invalid_schema(possible_schemas, schema):
871871

872872

873873
def _raise_if_contains_binary_blob(item):
874-
if not hasattr(item, "media") or not (media := getattr(item, "media")):
875-
return
874+
distributions = []
875+
if hasattr(item, "distribution") and (distribution := getattr(item, "distribution")):
876+
distributions += distribution
877+
if hasattr(item, "media") and (media := getattr(item, "media")):
878+
distributions += media
876879

877-
for item in media:
878-
if isinstance(item, Distribution) and item.binary_blob:
879-
raise HTTPException(
880-
status_code=HTTPStatus.BAD_REQUEST,
881-
detail="Setting `binary_blob` is forbidden. Consider using `content_url` instead.",
882-
)
880+
if any((isinstance(item, Distribution) and item.binary_blob) for item in distributions):
881+
raise HTTPException(
882+
status_code=HTTPStatus.BAD_REQUEST,
883+
detail="Setting `binary_blob` is forbidden. Consider using `content_url` instead.",
884+
)

0 commit comments

Comments
 (0)