def atom_feed_latest(request, mailbox_slug): """ renders the mailbox as an atom feed """ ctx = request.context mb = ctx.get_mailbox(mailbox_slug) if mb is None: return HttpResponse(status=404) if not ctx.user.has_perm(PERM_READ, mb): return HttpResponse(status=401) etag = get_mailbox_etag(mb) cached = check_etag(request, etag) if cached is not None: return cached # number of entries try: limit = min(int(request.GET.get('limit', DEFAULT_ATOM_ENTRIES)), MAX_ATOM_ENTRIES) except: return HttpResponse(status=400) params = {'limit': limit, 'include_docs': True, 'reduce': False, 'descending': True} # starting point in time if 'startkey' in request.GET: params['startkey'] = request.GET['startkey'] latest_messages = Message.view(mb, Message.by_timestamp, **params) return _render_atom_feed(request, mb, latest_messages)
def _render_atom_feed(request, mb, messages): entries = [] for message in messages: renderer = _get_atom_renderer(message, request) if renderer is not None: entries.append(renderer) info = MailboxInfo.get(mb) # absolute url for requested feed feed_url = request.url template_info = TemplateContext(request, {'id': feed_url, 'self_link': feed_url, 'updated': datetime.utcnow(), # XXX 'title': info.title or request.context.get_mailbox_slug(mb.name), 'entries': entries, }) res = HttpResponse(content_type='application/atom+xml') res.charset = 'utf-8' res.unicode_body = request.context.render('radar/atom/atom.xml', template_info) res.headers['etag'] = get_mailbox_etag(mb) return res
def mailbox_exists(request, mailbox_slug): """ tests existence of a mailbox. returns 200 if the mailbox exists, 404 if not. """ ctx = request.context mb = ctx.get_mailbox(mailbox_slug) if mb is None: return HttpResponse(status=404) etag = get_mailbox_etag(mb) cached = check_etag(request, etag) if cached is not None: return cached res = HttpResponse(content_type="text/html") res.headers['etag'] = etag return res