From 855aba00f5ded8edc7942ebb34c0a58956a13db8 Mon Sep 17 00:00:00 2001 From: Thomas Sileo Date: Sun, 22 Jul 2018 11:18:27 +0200 Subject: [PATCH] New NotAnActivityError error --- little_boxes/activitypub.py | 6 +++++- little_boxes/backend.py | 8 ++++++-- little_boxes/errors.py | 7 +++++++ 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/little_boxes/activitypub.py b/little_boxes/activitypub.py index 415db83..447e0e5 100644 --- a/little_boxes/activitypub.py +++ b/little_boxes/activitypub.py @@ -37,7 +37,11 @@ AS_PUBLIC = "https://www.w3.org/ns/activitystreams#Public" COLLECTION_CTX = [ "https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1", - {"Hashtag": "as:Hashtag", "sensitive": "as:sensitive"}, + { + "Hashtag": "as:Hashtag", + "sensitive": "as:sensitive", + "toot": "http://joinmastodon.org/ns#", + }, ] # Will be used to keep track of all the defined activities diff --git a/little_boxes/backend.py b/little_boxes/backend.py index e9c0d5a..818413b 100644 --- a/little_boxes/backend.py +++ b/little_boxes/backend.py @@ -14,6 +14,7 @@ from .__version__ import __version__ from .collection import parse_collection from .errors import ActivityGoneError from .errors import ActivityNotFoundError +from .errors import NotAnActivityError from .errors import ActivityUnavailableError from .urlutils import URLLookupFailedError from .urlutils import check_url as check_url @@ -75,6 +76,9 @@ class Backend(abc.ABC): pass # pragma: no cover def fetch_iri(self, iri: str, **kwargs) -> "ap.ObjectType": # pragma: no cover + if not iri.startswith('http'): + raise NotAnActivityError(f"{iri} is not a valid IRI") + try: self.check_url(iri) except URLLookupFailedError: @@ -111,9 +115,9 @@ class Backend(abc.ABC): try: out = resp.json() - except json.JSONDecodeError: + except (json.JSONDecodeError, ValueError): # TODO(tsileo): a special error type? - raise ActivityUnavailableError(f"{iri} is not JSON") + raise NotAnActivityError(f"{iri} is not JSON") return out diff --git a/little_boxes/errors.py b/little_boxes/errors.py index 19a0bc4..935ea57 100644 --- a/little_boxes/errors.py +++ b/little_boxes/errors.py @@ -83,3 +83,10 @@ class ActivityUnavailableError(ServerError): """Raises when fetching a remote activity times out.""" status_code = 503 + + +class NotAnActivityError(ServerError): + """Raised when no JSON can be decoded. + + Most likely raised when stumbling upon a OStatus notice or failed lookup. + """