Browse Source

Implement the Micropub source query internally rather than by simply parsing the visible content

Danielle McLean 2 years ago
Signed by: 00dani <> GPG Key ID: 8EB789DDF3ABD240
1 changed files with 18 additions and 12 deletions
  1. +18

+ 18
- 12
micropub/views/ View File

@@ -1,10 +1,13 @@
from django.http import JsonResponse
from django.urls import reverse

from entries.from_url import from_url
from lemoncurry import requests
from lemoncurry.utils import absolute_url
from .. import error

def config(request):
config = syndicate_to(request)
config['media-endpoint'] = absolute_url(request, reverse('micropub:media'))
@@ -12,19 +15,22 @@ def config(request):

def source(request):
get = request.GET
if 'url' not in get:
if 'url' not in request.GET:
raise error.bad_req('must specify url parameter for source query')
mf2 = requests.mf2(get['url']).to_dict(filter_by_type='h-entry')
if not mf2:
raise error.bad_req('no h-entry at the requested url')
entry = mf2[0]
keys = get.getlist('properties', []) + get.getlist('properties[]', [])
if not keys:
return entry

props = entry['properties']
return {'properties': {k: props[k] for k in keys if k in props}}
entry = from_url(request.GET['url'])
props = {}

keys = set(request.GET.getlist('properties') + request.GET.getlist('properties[]'))
if not keys or 'content' in keys:
props['content'] = [entry.content]
if (not keys or 'category' in keys) and entry.cats.exists():
props['category'] = [ for cat in entry.cats.all()]
if (not keys or 'name' in keys) and
props['name'] = []
if (not keys or 'syndication' in keys) and entry.syndications.exists():
props['syndication'] = [synd.url for synd in entry.syndications.all()]

return {'type': ['h-entry'], 'properties': props}

def syndicate_to(request):