From b5fca7c1c9f3fdac31f752478643ed18c8d630b9 Mon Sep 17 00:00:00 2001 From: Georg Krause Date: Wed, 30 Jun 2021 15:41:12 +0000 Subject: [PATCH] Update PyLD to version 2.0 --- api/Dockerfile | 4 ++++ api/funkwhale_api/federation/jsonld.py | 11 +++++++++++ api/requirements/base.txt | 2 +- docs/installation/debian.rst | 4 ++-- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/api/Dockerfile b/api/Dockerfile index 1ba704e38..e339b78ff 100644 --- a/api/Dockerfile +++ b/api/Dockerfile @@ -17,6 +17,8 @@ RUN \ openldap-dev \ openssl-dev \ cargo \ + libxml2-dev \ + libxslt-dev \ && \ \ ln -s /usr/bin/python3 /usr/bin/python @@ -57,6 +59,8 @@ RUN apk add --no-cache \ jpeg-dev \ ffmpeg \ libpq \ + libxml2 \ + libxslt \ && \ \ ln -s /usr/bin/python3 /usr/bin/python diff --git a/api/funkwhale_api/federation/jsonld.py b/api/funkwhale_api/federation/jsonld.py index f95b279f4..d91690d1c 100644 --- a/api/funkwhale_api/federation/jsonld.py +++ b/api/funkwhale_api/federation/jsonld.py @@ -46,6 +46,17 @@ def expand(doc, options=None, default_contexts=["AS", "FW", "SEC"]): # probably an already expanded document pass + # XXX This is a hotfix for a bug in pyld. The JSON-LD allows empty dicts or lists as part of the + # context, but this makes pyld failing to parse the context the right way. So we remove all + # empty items from the contexts + try: + for active_ctx in doc["@context"]: + if len(active_ctx) == 0: + doc["@context"].remove(active_ctx) + except KeyError: + # Nothing to do here if no context is available at all + pass + result = pyld.jsonld.expand(doc, options=options) try: # jsonld.expand returns a list, which is useless for us diff --git a/api/requirements/base.txt b/api/requirements/base.txt index 4f39ea827..a084fa84d 100644 --- a/api/requirements/base.txt +++ b/api/requirements/base.txt @@ -54,7 +54,7 @@ python-ldap~=3.3.0 django-auth-ldap~=2.4.0 pydub~=0.25.1 -pyld~=1.0.0 +pyld~=2.0.3 aiohttp~=3.7.4 django-oauth-toolkit~=1.3.0 diff --git a/docs/installation/debian.rst b/docs/installation/debian.rst index 1a13a4008..b91ee0dba 100644 --- a/docs/installation/debian.rst +++ b/docs/installation/debian.rst @@ -37,7 +37,7 @@ On Debian-like systems, you can install them using: sudo apt-get update # Install system dependencies - sudo apt-get install curl python3-pip python3-venv git unzip libldap2-dev libsasl2-dev gettext-base zlib1g-dev libffi-dev libssl-dev + sudo apt-get install curl python3-pip python3-venv git unzip libldap2-dev libsasl2-dev gettext-base zlib1g-dev libffi-dev libssl-dev libxml2-dev libxslti1-dev # Funkwhale dependencies sudo apt install build-essential ffmpeg libjpeg-dev libmagic-dev libpq-dev postgresql-client python3-dev make @@ -389,7 +389,7 @@ And start the services: To ensure all Funkwhale processes are started automatically after a reboot, run: .. code-block:: shell - + sudo systemctl enable funkwhale-server sudo systemctl enable funkwhale-worker sudo systemctl enable funkwhale-beat