Serialize Post to AS2 as Note

merge-requests/132/head
Jason Robinson 2018-09-30 13:06:45 +03:00
rodzic 13ee55dfe8
commit 6ab1b937f8
5 zmienionych plików z 69 dodań i 9 usunięć

Wyświetl plik

@ -1,7 +1,9 @@
CONTEXT_ACTIVITYSTREAMS = "https://www.w3.org/ns/activitystreams"
CONTEXT_HASHTAG = {"Hashtag": "as:Hashtag"}
CONTEXT_LD_SIGNATURES = "https://w3id.org/security/v1"
CONTEXT_MANUALLY_APPROVES_FOLLOWERS = {"manuallyApprovesFollowers": "as:manuallyApprovesFollowers"}
CONTEXT_SENSITIVE = {"sensitive": "as:sensitive"}
CONTEXTS_DEFAULT = [
CONTEXT_ACTIVITYSTREAMS,
CONTEXT_LD_SIGNATURES,
]

Wyświetl plik

@ -1,19 +1,49 @@
from typing import Dict
from federation.entities.activitypub.constants import CONTEXTS_DEFAULT
from federation.entities.activitypub.enums import ActorType
from federation.entities.activitypub.constants import (
CONTEXTS_DEFAULT, CONTEXT_MANUALLY_APPROVES_FOLLOWERS, CONTEXT_SENSITIVE, CONTEXT_HASHTAG,
CONTEXT_LD_SIGNATURES)
from federation.entities.activitypub.enums import ActorType, ObjectType
from federation.entities.activitypub.mixins import ActivitypubEntityMixin
from federation.entities.base import Profile
from federation.entities.base import Profile, Post
from federation.utils.text import with_slash
class ActivitypubPost(ActivitypubEntityMixin, Post):
_type = ObjectType.NOTE.value
def to_as2(self) -> Dict:
# TODO add in sending phase:
# - to
# - cc
# - bcc
as2 = {
"@context": CONTEXTS_DEFAULT + [
CONTEXT_HASHTAG,
CONTEXT_SENSITIVE,
],
"attributedTo": self.actor_id,
"content": self.raw_content, # TODO render to html, add source markdown
"id": self.id,
"inReplyTo": None,
"published": self.created_at.isoformat(),
"sensitive": True if "nsfw" in self.tags else False,
"summary": None, # TODO Short text? First sentence? First line?
"tag": [], # TODO add tags
"type": self._type,
"url": self.url,
}
return as2
class ActivitypubProfile(ActivitypubEntityMixin, Profile):
_type = ActorType.PERSON.value
def to_as2(self) -> Dict:
as2 = {
"@context": CONTEXTS_DEFAULT + [
{"manuallyApprovesFollowers": "as:manuallyApprovesFollowers"},
CONTEXT_LD_SIGNATURES,
CONTEXT_MANUALLY_APPROVES_FOLLOWERS,
],
"type": self._type,
"name": self.name,

Wyświetl plik

@ -3,7 +3,7 @@ from unittest.mock import Mock
import pytest
# noinspection PyUnresolvedReferences
from federation.tests.fixtures.diaspora import *
from federation.tests.fixtures.entities import *
from federation.tests.fixtures.keys import get_dummy_private_key

Wyświetl plik

@ -1,8 +1,18 @@
from federation.entities.activitypub.constants import CONTEXTS_DEFAULT
from federation.entities.activitypub.constants import (
CONTEXTS_DEFAULT, CONTEXT_MANUALLY_APPROVES_FOLLOWERS, CONTEXT_LD_SIGNATURES, CONTEXT_HASHTAG, CONTEXT_SENSITIVE)
from federation.entities.activitypub.entities import ActivitypubProfile
class TestEntitiesConvertToAS2:
def test_post_to_as2(self, activitypubpost):
# TODO expand
result = activitypubpost.to_as2()
assert result.get('@context') == CONTEXTS_DEFAULT + [
CONTEXT_HASHTAG,
CONTEXT_SENSITIVE,
]
assert result.get('type') == 'Note'
def test_profile_to_as2(self):
# TODO expand
entity = ActivitypubProfile(
@ -13,6 +23,7 @@ class TestEntitiesConvertToAS2:
)
result = entity.to_as2()
assert result.get('@context') == CONTEXTS_DEFAULT + [
{"manuallyApprovesFollowers": "as:manuallyApprovesFollowers"},
CONTEXT_LD_SIGNATURES,
CONTEXT_MANUALLY_APPROVES_FOLLOWERS,
]
assert result.get('type') == 'Person'

Wyświetl plik

@ -1,5 +1,8 @@
import uuid
import pytest
from federation.entities.activitypub.entities import ActivitypubPost
from federation.entities.diaspora.entities import (
DiasporaPost, DiasporaComment, DiasporaLike, DiasporaProfile, DiasporaRetraction,
DiasporaContact, DiasporaReshare,
@ -8,7 +11,7 @@ from federation.tests.factories.entities import ShareFactory
from federation.tests.fixtures.payloads import DIASPORA_PUBLIC_PAYLOAD
__all__ = ("diasporacomment", "diasporacontact", "diasporalike", "diasporapost", "diasporaprofile",
"diasporareshare", "diasporaretraction", "diaspora_public_payload")
"diasporareshare", "diasporaretraction", "diaspora_public_payload", "activitypubpost")
@pytest.fixture
@ -54,6 +57,20 @@ def diasporalike():
)
@pytest.fixture
def activitypubpost():
post_uuid = uuid.uuid4()
profile_uuid = uuid.uuid4()
return ActivitypubPost(
raw_content="raw_content",
public=True,
provider_display_name="Socialhome",
id=f"http://127.0.0.1:8000/post/{post_uuid}/",
guid=post_uuid,
actor_id=f"http://127.0.0.1:8000/profile/{profile_uuid}/",
handle="alice@example.com",
)
@pytest.fixture
def diasporapost():
return DiasporaPost(