54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
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'))
|
|
return config
|
|
|
|
|
|
def source(request):
|
|
if 'url' not in request.GET:
|
|
raise error.bad_req('must specify url parameter for source query')
|
|
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'] = [cat.name for cat in entry.cats.all()]
|
|
if (not keys or 'name' in keys) and entry.name:
|
|
props['name'] = [entry.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):
|
|
return {'syndicate-to': []}
|
|
|
|
|
|
queries = {
|
|
'config': config,
|
|
'source': source,
|
|
'syndicate-to': syndicate_to,
|
|
}
|
|
|
|
|
|
def query(request):
|
|
if 'q' not in request.GET:
|
|
raise error.bad_req('must specify q parameter')
|
|
q = request.GET['q']
|
|
if q not in queries:
|
|
raise error.bad_req('unsupported query {0}'.format(q))
|
|
res = queries[q](request)
|
|
return JsonResponse(res)
|