Mercurial > libervia-web
diff src/pages/common/blog/page_meta.py @ 928:ee243d48100e
pages (common): added common hierarchy for reusable pages (blog is the first)
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 16 Apr 2017 18:24:24 +0200 |
parents | |
children | af6a62e21053 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/pages/common/blog/page_meta.py Sun Apr 16 18:24:24 2017 +0200 @@ -0,0 +1,72 @@ +#!/usr/bin/env python2.7 +# -*- coding: utf-8 -*- +from libervia.server.constants import Const as C +from twisted.words.protocols.jabber import jid +from twisted.internet import defer +from sat.tools.common import data_objects +from sat.core.i18n import _ +from sat.core.log import getLogger +import urllib +log = getLogger('pages/common/blog') + +"""generic blog (with service/node provided)""" +name = u'blog' +template = u"blog/articles.html" +uri_handlers = {(u'pubsub', u'microblog'): 'microblog_uri'} + + +def microblog_uri(self, uri_data): + service = urllib.quote_plus(uri_data[u'path']) + node = urllib.quote_plus(uri_data[u'node']) + return service + u'/' + node + + +def parse_url(self, request): + """URL is /[service]/[node] + + if [node] is not found, default namespace is used + if both [service] and [node] are not found, default service is used too + """ + data = self.getRData(request) + + try: + service = self.nextPath(request) + except IndexError: + data['service'] = u'' + else: + try: + data[u"service"] = jid.JID(service) + except Exception: + log.warning(_(u"bad service entered: {}").format(service)) + self.pageError(request, C.HTTP_BAD_REQUEST) + + try: + data['node'] = self.nextPath(request) + except IndexError: + data['node'] = u'' + + +@defer.inlineCallbacks +def prepare_render(self, request): + data = self.getRData(request) + service, node = data.get(u'service', u''), data.get(u'node', u'') + profile = self.getProfile(request) + if profile is None: + profile = C.SERVICE_PROFILE + + try: + blog_data = yield self.host.bridge.mbGet( + service.userhost(), + node, + 10, + [], + {}, + profile) + except Exception as e: + # FIXME: need a better way to test errors in bridge errback + if u"forbidden" in unicode(e): + self.pageError(request, 401) + else: + raise e + + request.template_data[u'items'] = data_objects.BlogItems(blog_data)