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)