# copyright 2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
# contact http://www.logilab.fr -- mailto:contact@logilab.fr
#
# This program is free software: you can redistribute it and/or modify it under
# the terms of the GNU Lesser General Public License as published by the Free
# Software Foundation, either version 2.1 of the License, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
# details.
#
# You should have received a copy of the GNU Lesser General Public License along
# with this program. If not, see .
"""cubicweb-ckanpublish views/forms/actions/components for web ui"""
from logilab.mtconverter import xml_escape
from cubicweb.predicates import score_entity
from cubicweb.web import component
from cubes.ckanpublish.utils import ckan_post, ckan_buildurl
_ = unicode
class GotoCKANDatasetComponent(component.EntityCtxComponent):
"""Contextual component displaying a link to the CKAN dataset in
Dataset-like entities primary view.
"""
__regid__ = 'ckanpublish.goto-ckan-dataset'
__select__ = (component.EntityCtxComponent.__select__ &
score_entity(lambda x: getattr(x, 'ckan_dataset_id', False)))
title = _('CKAN dataset')
context = 'incontext'
_ckan_response = None
def init_rendering(self):
super(GotoCKANDatasetComponent, self).init_rendering()
config = self._cw.vreg.config
entity = self._cw.entity_from_eid(self.cw_rset[0][0])
try:
r = ckan_post(config, 'package_show',
{'id': entity.ckan_dataset_id})
except Exception as exc:
self._cw.warning('fail to post to CKAN instance: %s', exc)
raise component.EmptyComponent()
self._ckan_response = r
def render_body(self, w):
r = self._ckan_response
url = ckan_buildurl(self._cw.vreg.config,
'dataset/' + xml_escape(r['name']))
w(u'%s' % (url, xml_escape(url)))