Skip to content

Commit

Permalink
feat: add plugin for iiif images
Browse files Browse the repository at this point in the history
  • Loading branch information
alycejenni committed Jan 15, 2024
1 parent bc7df24 commit 50b27a6
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 1 deletion.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ _A CKAN extension for a dataset gallery view._
# Overview

<!--overview-start-->
Adds a gallery view for resources on a CKAN instance. Two plugins are included in this extension: `gallery` and `gallery_image`.
Adds a gallery view for resources on a CKAN instance. Three plugins are included in this extension: the main plugin (`gallery`) and two view plugins for specific image/data types (`gallery_image` and `gallery_iiif`).

Based on [blueimp Gallery](https://blueimp.github.io/Gallery).

Expand Down
78 changes: 78 additions & 0 deletions ckanext/gallery/plugins/iiif.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
#!/usr/bin/env python
# encoding: utf-8
#
# This file is part of ckanext-gallery
# Created by the Natural History Museum in London, UK

from ckanext.gallery.plugins.interfaces import IGalleryImage

from ckan.plugins import SingletonPlugin, implements, toolkit


class GalleryIIIFPlugin(SingletonPlugin):
"""
Implements the basic image field The URL of an image is present in a text field.
"""

implements(IGalleryImage)

def image_info(self):
'''
:returns: If resource type is set, only dataset of that type will be available
'''
return {
'title': 'IIIF',
'resource_type': ['csv', 'tsv'],
'field_type': ['text'],
}

def get_images(self, field_value, record, data_dict):
"""
Get images from field value and returns them as a list of dicts specifying just
the href.
:param field_value: the value of the record's image field
:param record: the record dict itself
:param data_dict: relevant data in a dict, currently we only use the resource_view contained within
:return: a list of dicts
"""

images = []

# retrieve the delimiter if there is one
delimiter = data_dict['resource_view'].get('image_delimiter', None)
if delimiter:
# split the text by the delimiter if we have one
raw_images = field_value.split(delimiter)
else:
raw_images = [field_value]

title_field = data_dict['resource_view'].get('image_title', None)

for image in raw_images:
title = record.get(title_field)
image_base_url = image.strip().strip('/')

if not image_base_url:
continue

images.append(
{
'href': f'{image_base_url}',
'thumbnail': f'{image_base_url}/thumbnail',
'download': f'{image_base_url}/original',
'link': toolkit.url_for(
'record.view',
package_name=data_dict['package']['name'],
resource_id=data_dict['resource']['id'],
record_id=record['_id'],
),
'description': title,
'title': title,
'record_id': record['_id'],
}
)

return images
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ changelog = "https://github.com/NaturalHistoryMuseum/ckanext-gallery/blob/main/C
[project.entry-points."ckan.plugins"]
gallery = "ckanext.gallery.plugins.gallery:GalleryPlugin"
gallery_image = "ckanext.gallery.plugins.image:GalleryImagePlugin"
gallery_iiif = "ckanext.gallery.plugins.iiif:GalleryIIIFPlugin"


[build-system]
Expand Down

0 comments on commit 50b27a6

Please sign in to comment.