Deal with unknown json-ld schemas (#644)

Rather than raising an error, returns an empty schema.
This commit is contained in:
Osma Ahvenlampi 2023-09-20 21:58:38 +03:00 committed by GitHub
parent 8c832383e0
commit 1e8a392e57
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 14 additions and 14 deletions

View File

@ -4,11 +4,18 @@ import urllib.parse as urllib_parse
from dateutil import parser from dateutil import parser
from pyld import jsonld from pyld import jsonld
from pyld.jsonld import JsonLdError
from core.exceptions import ActivityPubFormatError from core.exceptions import ActivityPubFormatError, capture_message
schemas = { schemas = {
"unknown": {
"contentType": "application/ld+json",
"documentUrl": "unknown",
"contextUrl": None,
"document": {
"@context": {},
},
},
"www.w3.org/ns/activitystreams": { "www.w3.org/ns/activitystreams": {
"contentType": "application/ld+json", "contentType": "application/ld+json",
"documentUrl": "http://www.w3.org/ns/activitystreams", "documentUrl": "http://www.w3.org/ns/activitystreams",
@ -622,12 +629,8 @@ def builtin_document_loader(url: str, options={}):
# Get URL without scheme # Get URL without scheme
pieces = urllib_parse.urlparse(url) pieces = urllib_parse.urlparse(url)
if pieces.hostname is None: if pieces.hostname is None:
raise JsonLdError( capture_message(f"No host name for json-ld schema: {url!r}")
f"No schema built-in for {url!r}", return schemas["unknown"]
"jsonld.LoadDocumentError",
code="loading document failed",
cause="NoHostnameError",
)
key = pieces.hostname + pieces.path.rstrip("/") key = pieces.hostname + pieces.path.rstrip("/")
try: try:
return schemas[key] return schemas[key]
@ -636,12 +639,9 @@ def builtin_document_loader(url: str, options={}):
key = "*" + pieces.path.rstrip("/") key = "*" + pieces.path.rstrip("/")
return schemas[key] return schemas[key]
except KeyError: except KeyError:
raise JsonLdError( # return an empty context instead of throwing an error
f"No schema built-in for {key!r}", capture_message(f"Ignoring unknown json-ld schema: {url!r}")
"jsonld.LoadDocumentError", return schemas["unknown"]
code="loading document failed",
cause="KeyError",
)
def canonicalise(json_data: dict, include_security: bool = False) -> dict: def canonicalise(json_data: dict, include_security: bool = False) -> dict: