Skip to content

Commit

Permalink
config: rename and restructure thumbnail links
Browse files Browse the repository at this point in the history
  • Loading branch information
0einstein0 committed Aug 26, 2024
1 parent e1c1c8a commit 7b2fc65
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 25 deletions.
44 changes: 21 additions & 23 deletions invenio_rdm_records/services/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
from invenio_requests.services.requests.config import RequestSearchOptions
from requests import Request
from werkzeug.exceptions import NotFound
from werkzeug.local import LocalProxy

from invenio_rdm_records.records.processors.tiles import TilesProcessor

Expand Down Expand Up @@ -154,23 +155,27 @@ def lock_edit_published_files(service, identity, record=None, draft=None):
return True


def has_image_files(record, ctx):
"""Return if the record has any image file."""
for file in record.files.entries:
file_ext = splitext(file)[1].replace(".", "").lower()
if file_ext in current_app.config["IIIF_FORMATS"]:
return True


def record_thumbnail_sizes():
"""Return configured sizes for thumbnails."""
return current_app.config.get("APP_RDM_RECORD_THUMBNAIL_SIZES", [])


def record_thumbnail(size, record=None, **kwargs):
def get_record_thumbnail_file(record, **kwargs):
"""Generate the URL for a record's thumbnail."""
# Verify against allowed thumbnail sizes
if size not in current_app.config["APP_RDM_RECORD_THUMBNAIL_SIZES"]:
raise NotFound("Thumbnail size not allowed")

files = record.files
default_preview = files.get("default_preview")
file_entries = files.entries
image_extensions = current_app.config["IIIF_FORMATS"]
if file_entries:
# Verify file has allowed extension and selects default preview file if present else the first valid file
# Verify file has allowed extension and select the default preview file if present else the first valid file
file_key = next(
(
key
Expand All @@ -179,10 +184,7 @@ def record_thumbnail(size, record=None, **kwargs):
),
None,
)
if file_key:
return f"{file_key}/full/^{size},/0/default.png"

raise NotFound("Thumbnail not found")
return file_key


class RecordPIDLink(Link):
Expand Down Expand Up @@ -338,7 +340,7 @@ class RDMFileRecordServiceConfig(FileServiceConfig, ConfiguratorMixin):
file_schema = FileSchema


class RDMThumbnailLink(RecordLink):
class ThumbnailLinks(RecordLink):
"""RDM thumbnail links dictionary."""

def __init__(self, *args, sizes=None, **kwargs):
Expand All @@ -356,15 +358,10 @@ def expand(self, obj, context):
vars = preprocess_vars(vars)

thumbnail_links = {}
for size in self._sizes():
try:
thumbnail_url = record_thumbnail(size, record=obj)
thumbnail_links[str(size)] = (
self._uritemplate.expand(**vars) + thumbnail_url
)
except NotFound:
# Handle the case where the thumbnail does not exist
thumbnail_links[str(size)] = None
vars["file_key"] = get_record_thumbnail_file(record=obj)
for size in self._sizes:
vars["size"] = size
thumbnail_links[str(size)] = self._uritemplate.expand(**vars)
return thumbnail_links


Expand Down Expand Up @@ -528,9 +525,10 @@ class RDMRecordServiceConfig(RecordServiceConfig, ConfiguratorMixin):
if_=RecordLink("{+api}/records/{id}/media-files"),
else_=RecordLink("{+api}/records/{id}/draft/media-files"),
),
"thumbnails": RDMThumbnailLink(
"{+api}/iiif/record:{id}:",
sizes=record_thumbnail_sizes,
"thumbnails": ThumbnailLinks(
"{+api}/iiif/record:{id}:{file_key}/full/^{size},/0/default.jpg",
sizes=LocalProxy(record_thumbnail_sizes),
when=has_image_files,
),
"archive": ConditionalLink(
cond=is_record,
Expand Down
2 changes: 0 additions & 2 deletions tests/resources/test_serialized_links.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,6 @@ def test_draft_links(client, draft_json, minimal_record, headers):
"access_links": f"https://127.0.0.1:5000/api/records/{pid_value}/access/links", # noqa
"files": f"https://127.0.0.1:5000/api/records/{pid_value}/draft/files",
"media_files": f"https://127.0.0.1:5000/api/records/{pid_value}/draft/media-files",
"thumbnails": {},
"archive": f"https://127.0.0.1:5000/api/records/{pid_value}/draft/files-archive", # noqa
"archive_media": f"https://127.0.0.1:5000/api/records/{pid_value}/draft/media-files-archive", # noqa
"reserve_doi": f"https://127.0.0.1:5000/api/records/{pid_value}/draft/pids/doi", # noqa
Expand Down Expand Up @@ -102,7 +101,6 @@ def test_record_links(client, published_json, headers):
"draft": f"https://127.0.0.1:5000/api/records/{pid_value}/draft",
"files": f"https://127.0.0.1:5000/api/records/{pid_value}/files",
"media_files": f"https://127.0.0.1:5000/api/records/{pid_value}/media-files",
"thumbnails": {},
"archive": f"https://127.0.0.1:5000/api/records/{pid_value}/files-archive",
"archive_media": f"https://127.0.0.1:5000/api/records/{pid_value}/media-files-archive",
"parent": f"https://127.0.0.1:5000/api/records/{parent_pid_value}",
Expand Down

0 comments on commit 7b2fc65

Please sign in to comment.