Content of statuses, and notes (bios) of users, are interpreted as markdown

and returned as HTML.
trilby-heavy
Marnanel Thurman 2020-04-25 16:40:06 +01:00
rodzic 42909bb629
commit 3858c95426
5 zmienionych plików z 18 dodań i 5 usunięć

Wyświetl plik

@ -3,6 +3,7 @@ from kepi.trilby_api.models import *
from rest_framework_recursive.fields import RecursiveField from rest_framework_recursive.fields import RecursiveField
from oauth2_provider.models import Application from oauth2_provider.models import Application
import kepi.trilby_api.utils as trilby_utils import kepi.trilby_api.utils as trilby_utils
import markdown
######################################### #########################################
@ -37,6 +38,14 @@ class UserSerializer(serializers.ModelSerializer):
created_at = serializers.DateTimeField( created_at = serializers.DateTimeField(
) )
note = serializers.SerializerMethodField()
def get_note(self, user):
result = markdown.markdown(user.note)
return result
def set_note(self, user, note):
user.note = note
note = serializers.CharField( note = serializers.CharField(
) )
@ -184,13 +193,17 @@ class StatusSerializer(serializers.ModelSerializer):
# "content" is read-only for HTML; # "content" is read-only for HTML;
# "status" is write-only for text (or Markdown) # "status" is write-only for text (or Markdown)
content = serializers.CharField( content = serializers.SerializerMethodField(
read_only = True) read_only = True)
status = serializers.CharField( status = serializers.CharField(
source='source_text', source='source_text',
write_only = True) write_only = True)
def get_content(self, status):
result = markdown.markdown(status.content)
return result
created_at = serializers.DateTimeField( created_at = serializers.DateTimeField(
required = False, required = False,
read_only = True) read_only = True)

Wyświetl plik

@ -35,7 +35,7 @@ ACCOUNT_SOURCE_EXPECTED = {
STATUS_EXPECTED = { STATUS_EXPECTED = {
'in_reply_to_account_id': None, 'in_reply_to_account_id': None,
'content': 'Hello world.', 'content': '<p>Hello world.</p>',
'emojis': [], 'emojis': [],
'reblogs_count': 0, 'reblogs_count': 0,
'favourites_count': 0, 'favourites_count': 0,

Wyświetl plik

@ -116,7 +116,7 @@ class TestNotifications(TrilbyTestCase):
self.assertDictContainsSubset( self.assertDictContainsSubset(
{ {
'id': str(status.id), 'id': str(status.id),
'content': 'Curiouser and curiouser!', 'content': '<p>Curiouser and curiouser!</p>',
}, },
content[0]['status'], content[0]['status'],
) )

Wyświetl plik

@ -646,7 +646,7 @@ class TestGetStatus(TrilbyTestCase):
self.assertEqual( self.assertEqual(
details['content'], details['content'],
'Daisies are our silver.', '<p>Daisies are our silver.</p>',
) )
def test_view_specific_status_404(self): def test_view_specific_status_404(self):

Wyświetl plik

@ -58,7 +58,7 @@ class TestTimelines(TrilbyTestCase):
expected = [] expected = []
for (id, visibility, visible_in) in TIMELINE_DATA: for (id, visibility, visible_in) in TIMELINE_DATA:
if situation in visible_in: if situation in visible_in:
expected.append(id) expected.append(f'<p>{id}</p>')
expected = sorted(expected) expected = sorted(expected)
details = sorted([x['content'] \ details = sorted([x['content'] \