Commit 7ff65b53 authored by Mickaël Desfrênes's avatar Mickaël Desfrênes
Browse files

Add support for alternate path separator in IIIF server

New env var "JAMA_IIIF_PATH_SEPARATOR" (defaults to os.path.sep) will be used for the IIIF image identifier.

See Cantaloupe's slash_substitute configuration key and reverse proxy problems for explanations: https://cantaloupe-project.github.io/manual/5.0/sources.html#FilesystemSource
parent 7cf111e7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ MEDIA_FILES_DIR = os.getenv("JAMA_FILES_DIR") or "{}/{}".format(
JAMA_SITE = os.getenv("JAMA_SITE") or "http://localhost:8000/"

IIIF_DIR = os.getenv("JAMA_IIIF_DIR") or "{}/{}".format(BASE_DIR, "iiif")

IIIF_PATH_SEPARATOR = os.getenv("JAMA_IIIF_PATH_SEPARATOR") or os.path.sep
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/

+6 −5
Original line number Diff line number Diff line
@@ -13,9 +13,9 @@ from subprocess import call
from django.utils.timezone import now


def hash_to_iiif_path(file_hash: str) -> str:
def hash_to_iiif_path(file_hash: str, separator: str = os.path.sep) -> str:
    return "{}{}{}{}{}".format(
        file_hash[:2], os.path.sep, file_hash[2:4], os.path.sep, file_hash
        file_hash[:2], separator, file_hash[2:4], separator, file_hash
    )


@@ -217,16 +217,17 @@ class File(Resource):
    def iiif_infos_url(self) -> str:
        if self.should_have_iiif():
            return "{}{}/info.json".format(
                settings.JAMA_IIIF_ENDPOINT, hash_to_iiif_path(self.hash)
                settings.JAMA_IIIF_ENDPOINT,
                hash_to_iiif_path(self.hash, settings.IIIF_PATH_SEPARATOR),
            )
        else:
            raise NotIIIF("Resource is not served via IIIF")

    def iiif_thumbnail_url(self, width: int = None, height: int = None) -> str:
        if self.should_have_iiif():
            return "{}{}/full/{},{}/0/default.jpg".format(
            return "{}{}/full/^{},{}/0/default.jpg".format(
                settings.JAMA_IIIF_ENDPOINT,
                hash_to_iiif_path(self.hash),
                hash_to_iiif_path(self.hash, settings.IIIF_PATH_SEPARATOR),
                width or "",
                height or "",
            )
+3 −1
Original line number Diff line number Diff line
@@ -173,7 +173,9 @@ def file(
    if (
        file_instance.should_have_iiif()
    ):  # and iiif_file_exists(file_instance.hash): # FS is slow
        iiif_path = models.hash_to_iiif_path(file_instance.hash)
        iiif_path = models.hash_to_iiif_path(
            file_instance.hash, settings.IIIF_PATH_SEPARATOR
        )
        urls["iiif"] = "{}{}/info.json".format(settings.JAMA_IIIF_ENDPOINT, iiif_path)
        urls["s"] = "{}{}/full/100,/0/default.jpg".format(
            settings.JAMA_IIIF_ENDPOINT, iiif_path