def render_piwik(self): return tk.render_snippet('snippets/piwik.html', dict(piwik={ 'error': self.error, 'url': self.url.replace('http://', '').replace('https://', '').strip('/'), 'site_id': self.site_id, 'domain': self.domain, }))
def get_open_datarequests_badge(show_badge): '''The snippet is only returned when show_badge == True''' if show_badge: return tk.render_snippet('datarequests/snippets/badge.html', {'comments_count': get_open_datarequests_number()}) else: return ''
def render(self, name_prefix, data={}): tpl_vars = self.prepare_template_vars(name_prefix, data) tpl = self.get_template() obj = self.obj if not tpl: # No template supplied: use a template to glue fields together. # Prepare all additional vars needed for this kind of template. tpl = self.get_glue_template() errors = self.errors error_dict = errors if isinstance(errors, dict) else None field_qualifiers = self.get_field_qualifiers().iteritems() field_data = self.get_field_template_vars() def render_field(k, qf): f = obj.get_field(k) if not qf: qf = f.queryTaggedValue('widget-qualifier') if not qf: qf = self.context.provided_action.qualifier qa = QualAction(self.action, qualifier=qf) ef = error_dict.get(k) if error_dict else None df = field_data.get(k, {}) mf = markup_for_field(qa, f, errors=ef, name_prefix=name_prefix, data=df) return dict(field=f, markup=mf) tpl_vars['fields'] = OrderedDict( ((k, render_field(k, qf)) for k, qf in field_qualifiers)) markup = toolkit.render_snippet(tpl, tpl_vars) return markup
def render_piwik(self): return tk.render_snippet('snippets/piwik.html', dict(piwik={ 'error': self.error, 'url': self.url.strip('/'), 'site_id': self.site_id, 'domain': self.domain, 'cookies_disabled': self.cookies_disabled }, googleanalytics_id=self.googleanalytics_id))
def render_piwik(self): return tk.render_snippet('snippets/piwik.html', dict(piwik={ 'error': self.error, 'url': self.url.strip('/'), 'site_id': self.site_id, 'domain': self.domain, 'cookies_disabled': self.cookies_disabled }))
def get_open_datarequests_badge(show_badge): """The snippet is only returned when show_badge == True""" if show_badge: return tk.render_snippet( "datarequests/snippets/badge.html", {"comments_count": get_open_datarequests_number()}, ) else: return ""
def get_resource_value_label(field_name, resource, dataset_type='dataset'): schema = scheming_get_dataset_schema(dataset_type) for field in schema['resource_fields']: if field['field_name'] == field_name: return toolkit.render_snippet( 'scheming/snippets/display_field.html', data=dict(field=field, data=resource, entity_type='dataset', object_type=dataset_type))
def matomo_snippet(): data = { "matomo_domain": config.get('ckanext.matomo.domain'), "matomo_script_domain": config.get('ckanext.matomo.script_domain', config.get('ckanext.matomo.domain')), "matomo_site_id": config.get('ckanext.matomo.site_id') } return render_snippet("matomo/snippets/matomo.html", data)
def render_piwik(self): return tk.render_snippet( 'snippets/piwik.html', dict( piwik={ 'error': self.error, 'url': self.url.replace('http://', '').replace('https://', '').strip('/'), 'site_id': self.site_id, 'domain': self.domain, }))
def csc_ga_googleanalytics_header(self): '''Render the googleanalytics_header snippet for CKAN 2.0 templates. This is a template helper function that renders the googleanalytics_header jinja snippet. To be called from the jinja templates in this extension, see ITemplateHelpers. ''' data = { 'googleanalytics_id': self.googleanalytics_id, 'googleanalytics_domain': self.googleanalytics_domain, 'googleanalytics_fields': str(self.googleanalytics_fields), 'googleanalytics_linked_domains': self.googleanalytics_linked_domains } return toolkit.render_snippet( 'googleanalytics/snippets/csc_googleanalytics_header.html', data)
def comments_block(self): ''' Adds Disqus Comments to the page.''' # we need to create an identifier c = plugins.toolkit.c identifier = '' try: if c.current_package_id: identifier = c.current_package_id elif c.id: identifier = c.id else: # cannot make an identifier identifier = '' except: identifier = '' data = {'identifier' : identifier, 'site_url': config.get('ckan.site_url') } return toolkit.render_snippet('package/comments_block.html', data)
def acquire_button(package): """ Return a Get Access button for the given package id when the dataset has an acquisition URL. :param package: the the package to request access when the get access button is clicked :type package: Package :returns: a get access button as an HTML snippet :rtype: string """ if "acquire_url" in package and request.path.startswith("/dataset") and package["acquire_url"] != "": url_dest = package["acquire_url"] data = {"url_dest": url_dest} return tk.render_snippet("snippets/acquire_button.html", data) else: return ""
def acquire_button(package): ''' Return a Get Access button for the given package id when the dataset has an acquisition URL. :param package: the the package to request access when the get access button is clicked :type package: Package :returns: a get access button as an HTML snippet :rtype: string ''' if 'acquire_url' in package and request.path.startswith('/dataset')\ and package['acquire_url'] != '': url_dest = package['acquire_url'] data = {'url_dest': url_dest} return tk.render_snippet('snippets/acquire_button.html', data) else: return ''
def googleanalytics_header(): """Render the googleanalytics_header snippet for CKAN 2.0 templates. This is a template helper function that renders the googleanalytics_header jinja snippet. To be called from the jinja templates in this extension, see ITemplateHelpers. """ fields = utils.config_fields() if utils.config_enable_user_id() and tk.c.user: fields["userId"] = str(tk.c.userobj.id) data = { "googleanalytics_id": utils.config_id(), "googleanalytics_domain": utils.config_domain(), "googleanalytics_fields": str(fields), "googleanalytics_linked_domains": utils.config_linked_domains(), } return tk.render_snippet( "googleanalytics/snippets/googleanalytics_header.html", data)
def get_comments_badge(datarequest_id): return tk.render_snippet( "datarequests/snippets/badge.html", {"comments_count": get_comments_number(datarequest_id)}, )
def report_view(report_name, organization=None, refresh=False): try: report = t.get_action('report_show')({}, {'id': report_name}) except t.NotAuthorized: return t.abort(401) except t.ObjectNotFound: return t.abort(404) except Exception as e: log.error("Failed to get report: %s", e) raise # ensure correct url is being used if 'organization' in _get_routing_rule()\ and 'organization' not in report['option_defaults']: return t.redirect_to(helpers.relative_url_for(organization=None)) elif 'organization' not in _get_routing_rule()\ and 'organization' in report['option_defaults']\ and report['option_defaults']['organization']: org = report['option_defaults']['organization'] return t.redirect_to(helpers.relative_url_for(organization=org)) if 'organization' in t.request.params: # organization should only be in the url - let the param overwrite # the url. return t.redirect_to(helpers.relative_url_for()) # options options = Report.add_defaults_to_options(t.request.params, report['option_defaults']) option_display_params = {} if 'format' in options: format = options.pop('format') else: format = None if 'organization' in report['option_defaults']: options['organization'] = organization options_html = {} c.options = options # for legacy genshi snippets for option in options: if option not in report['option_defaults']: # e.g. 'refresh' param log.warn( 'Not displaying report option HTML for param %s as option not recognized' ) continue option_display_params = { 'value': options[option], 'default': report['option_defaults'][option], 'report_name': report_name } try: options_html[option] = \ t.render_snippet('report/option_%s.html' % option, data=option_display_params) except TemplateNotFound: log.warn( 'Not displaying report option HTML for param %s as no template found' ) continue # Alternative way to refresh the cache - not in the UI, but is # handy for testing try: refresh = t.asbool(t.request.params.get('refresh')) if 'refresh' in options: options.pop('refresh') except ValueError: refresh = False # Refresh the cache if requested if t.request.method == 'POST' and not format: refresh = True if refresh: try: t.get_action('report_refresh')({}, { 'id': report_name, 'options': options }) except t.NotAuthorized: return t.abort(401) # Don't want the refresh=1 in the url once it is done return t.redirect_to(helpers.relative_url_for(refresh=None)) # Check for any options not allowed by the report for key in options: if key not in report['option_defaults']: return t.abort(400, 'Option not allowed by report: %s' % key) try: data, report_date = t.get_action('report_data_get')({}, { 'id': report_name, 'options': options }) except t.ObjectNotFound: return t.abort(404) except t.NotAuthorized: return t.abort(401) if format and format != 'html': ensure_data_is_dicts(data) anonymise_user_names(data, organization=options.get('organization')) if format == 'csv': try: key = t.get_action('report_key_get')({}, { 'id': report_name, 'options': options }) except t.NotAuthorized: return t.abort(401) filename = 'report_%s.csv' % key response_headers = { 'Content-Type': 'application/csv', 'Content-Disposition': six.text_type('attachment; filename=%s' % (filename)) } return make_csv_from_dicts(data['table']), response_headers elif format == 'json': data['generated_at'] = report_date return json.dumps(data), {'Content-Type': 'application/json'} else: return t.abort(400, 'Format not known - try html, json or csv') are_some_results = bool(data['table'] if 'table' in data else data) # A couple of context variables for legacy genshi reports c.data = data c.options = options return t.render('report/view.html', extra_vars={ 'report': report, 'report_name': report_name, 'data': data, 'report_date': report_date, 'options': options, 'options_html': options_html, 'report_template': report['template'], 'are_some_results': are_some_results }), {}
def get_comments_badge(datarequest_id): return tk.render_snippet('datarequests/snippets/badge.html', {'comments_count': get_comments_number(datarequest_id)})
def render_siteimprove(self): return toolkit.render_snippet( 'siteimprove/snippets/tracker.html')
def render_modernus(self): data = {'modernus_id': self.modernus_id, 'modernus_portion': self.modernus_portion, 'modernus_name': self.modernus_name} return toolkit.render_snippet( 'modernus/snippets/counter.html',data)
def view(self, report_name, organization=None, refresh=False): c.report_name = report_name try: report = ReportRegistry.instance().get_report(report_name) except KeyError: t.abort(404, 'Report not found') # ensure correct url is being used if 'organization' in t.request.environ['pylons.routes_dict'] and \ 'organization' not in report.option_defaults: t.redirect_to(dguhelpers.relative_url_for(organization=None)) elif 'organization' not in t.request.environ['pylons.routes_dict'] and\ 'organization' in report.option_defaults and \ report.option_defaults['organization']: org = report.option_defaults['organization'] t.redirect_to(dguhelpers.relative_url_for(organization=org)) if 'organization' in t.request.params: # organization should only be in the url - let the param overwrite # the url. t.redirect_to(dguhelpers.relative_url_for()) # options c.options = report.add_defaults_to_options(t.request.params) if 'format' in c.options: format = c.options.pop('format') else: format = None if 'organization' in report.option_defaults: c.options['organization'] = organization c.offer_organization_index = \ report.option_defaults['organization'] is None c.options_html = {} for option in c.options: try: c.options_html[option] = \ t.render_snippet('report/option_%s.html' % option) except TemplateNotFound: continue c.report_title = report.title c.report_description = report.description # Refresh the cache if requested if t.request.method == 'POST' and not format: if not (c.userobj and c.userobj.sysadmin): t.abort(401) report.refresh_cache(c.options) # Alternative way to refresh the cache - not in the UI, but is # handy for testing try: refresh = t.asbool(t.request.params.get('refresh')) except ValueError: refresh = False if refresh: if not (c.userobj and c.userobj.sysadmin): t.abort(401) c.options.pop('refresh') report.refresh_cache(c.options) # Don't want the refresh=1 in the url once it is done t.redirect_to(dguhelpers.relative_url_for(refresh=None)) # Check for any options not allowed by the report for key in c.options: if key not in report.option_defaults: t.abort(400, 'Option not allowed by report: %s' % key) try: c.data, c.report_date = report.get_fresh_report(**c.options) except t.ObjectNotFound: t.abort(404) if format and format != 'html': ensure_data_is_dicts(c.data) anonymise_user_names(c.data, organization=c.options.get('organization')) if format == 'csv': filename = 'report_%s.csv' % report.generate_key(c.options).replace('?', '_') t.response.headers['Content-Type'] = 'application/csv' t.response.headers['Content-Disposition'] = str('attachment; filename=%s' % (filename)) return make_csv_from_dicts(c.data['table']) elif format == 'json': t.response.headers['Content-Type'] = 'application/json' c.data['generated_at'] = c.report_date return json.dumps(c.data, cls=DateTimeJsonEncoder) else: t.abort(400, 'Format not known - try html, json or csv') c.are_some_results = bool(c.data['table'] if 'table' in c.data else c.data) if c.are_some_results: # you can't pass args into genshi template, so it will just look # for c.data c.report_snippet = t.render_snippet(report.get_template()) return t.render('report/view.html')
def _new_resource(self, id, data=None, errors=None, error_summary=None, is_doc=False): '''Core function to prepare metadata for resource and documentation controllers. Does different things depending on `is_doc` is True or False ''' if request.method == 'POST' and not data: save_action = request.params.get('save') data = data or \ clean_dict(dict_fns.unflatten(tuplize_dict(parse_params( request.POST)))) # we don't want to include save as it is part of the form del data['save'] resource_id = data['id'] del data['id'] context = { 'model': model, 'session': model.Session, 'user': c.user, 'auth_user_obj': c.userobj, 'is_doc': is_doc } # see if we have any data that we are trying to save data_provided = False for key, value in data.iteritems(): if ((value or isinstance(value, cgi.FieldStorage)) and key != 'resource_type'): data_provided = True break if not data_provided and "go-dataset-complete" not in save_action: if save_action == 'go-dataset': # go to final stage of adddataset h.redirect_to(controller='package', action='edit', id=id) # see if we have added any resources try: data_dict = get_action('package_show')(context, {'id': id}) except NotAuthorized: abort(403, _('Unauthorized to update dataset')) except NotFound: abort( 404, _('The dataset {id} could not be found.').format( id=id)) require_resources = asbool( config.get('ckan.dataset.create_on_ui_requires_resources', 'True')) if require_resources and not len(data_dict['resources']): # no data and configured to require resource: stay on page msg = _('You must add at least one data resource') # On new templates do not use flash message if asbool(config.get('ckan.legacy_templates')): h.flash_error(msg) h.redirect_to(controller='package', action='new_resource', id=id) else: errors = {} error_summary = {_('Error'): msg} return self.new_resource(id, data, errors, error_summary) # XXX race condition if another user edits/deletes data_dict = get_action('package_show')(context, {'id': id}) get_action('package_update')(dict(context, allow_state_change=True), dict(data_dict, state='active')) h.redirect_to(controller='package', action='read', id=id) data['package_id'] = id try: if resource_id: data['id'] = resource_id get_action('resource_update')(context, data) else: get_action('resource_create')(context, data) except (ValidationError, ckan.logic.ValidationError) as e: errors = e.error_dict error_summary = e.error_summary return self.new_resource(id, data, errors, error_summary) except NotAuthorized: abort(403, _('Unauthorized to create a resource')) except NotFound: abort(404, _('The dataset {id} could not be found.').format(id=id)) if save_action == 'go-metadata-from-doc': # XXX race condition if another user edits/deletes data_dict = get_action('package_show')(context, {'id': id}) get_action('package_update')(dict(context, allow_state_change=True), dict(data_dict, state='active')) h.redirect_to(controller='package', action='read', id=id) elif save_action == 'go-dataset': # go to first stage of add dataset h.redirect_to(controller='package', action='edit', id=id) elif 'go-dataset-complete' in save_action: # go to first stage of add dataset h.redirect_to(controller='package', action='read', id=id) elif save_action == 'docs' or save_action == 'doc-again-from-doc': h.redirect_to('/dataset/new_doc/{id}'.format(id=id)) else: # add more resources h.redirect_to(controller='package', action='new_resource', id=id) # get resources for sidebar context = { 'model': model, 'session': model.Session, 'user': c.user, 'auth_user_obj': c.userobj, 'is_doc': is_doc } try: pkg_dict = get_action('package_show')(context, {'id': id}) except NotFound: abort(404, _('The dataset {id} could not be found.').format(id=id)) try: toolkit.check_access('resource_create', context, {"package_id": pkg_dict["id"]}) except NotAuthorized: abort(403, _('Unauthorized to create a resource for this package')) package_type = pkg_dict['type'] or 'dataset' errors = errors or {} error_summary = error_summary or {} vars = { 'data': data, 'errors': errors, 'error_summary': error_summary, 'action': 'new', 'resource_form_snippet': self._resource_form(package_type), 'dataset_type': package_type } vars['pkg_name'] = id vars['is_doc'] = is_doc # required for nav menu # logging.error(pkg_dict) vars['pkg_dict'] = pkg_dict template = 'package/new_resource_not_draft.html' if pkg_dict['state'].startswith('draft'): vars['stage'] = ['complete', 'active'] if is_doc: vars['stage'] = ['complete', 'complete', 'active'] template = 'package/new_resource.html' return toolkit.render_snippet(template, data=vars)
def view(self, report_name, organization=None, refresh=False): c.report_name = report_name try: report = ReportRegistry.instance().get_report(report_name) except KeyError: t.abort(404, 'Report not found') # ensure correct url is being used if 'organization' in t.request.environ['pylons.routes_dict'] and \ 'organization' not in report.option_defaults: t.redirect_to(dguhelpers.relative_url_for(organization=None)) elif 'organization' not in t.request.environ['pylons.routes_dict'] and\ 'organization' in report.option_defaults and \ report.option_defaults['organization']: org = report.option_defaults['organization'] t.redirect_to(dguhelpers.relative_url_for(organization=org)) if 'organization' in t.request.params: # organization should only be in the url - let the param overwrite # the url. t.redirect_to(dguhelpers.relative_url_for()) # options c.options = report.add_defaults_to_options(t.request.params) if 'format' in c.options: format = c.options.pop('format') else: format = None if 'organization' in report.option_defaults: c.options['organization'] = organization c.offer_organization_index = \ report.option_defaults['organization'] is None c.options_html = {} for option in c.options: try: c.options_html[option] = \ t.render_snippet('report/option_%s.html' % option) except TemplateNotFound: continue c.report_title = report.title c.report_description = report.description # Refresh the cache if requested if t.request.method == 'POST' and not format: if not (c.userobj and c.userobj.sysadmin): t.abort(401) report.refresh_cache(c.options) # Alternative way to refresh the cache - not in the UI, but is # handy for testing try: refresh = t.asbool(t.request.params.get('refresh')) except ValueError: refresh = False if refresh: if not (c.userobj and c.userobj.sysadmin): t.abort(401) c.options.pop('refresh') report.refresh_cache(c.options) # Don't want the refresh=1 in the url once it is done t.redirect_to(dguhelpers.relative_url_for(refresh=None)) # Check for any options not allowed by the report for key in c.options: if key not in report.option_defaults: t.abort(400, 'Option not allowed by report: %s' % key) try: c.data, c.report_date = report.get_fresh_report(**c.options) except t.ObjectNotFound: t.abort(404) if format and format != 'html': ensure_data_is_dicts(c.data) anonymise_user_names(c.data, organization=c.options.get('organization')) if format == 'csv': filename = 'report_%s.csv' % report.generate_key( c.options).replace('?', '_') t.response.headers['Content-Type'] = 'application/csv' t.response.headers['Content-Disposition'] = str( 'attachment; filename=%s' % (filename)) return make_csv_from_dicts(c.data['table']) elif format == 'json': t.response.headers['Content-Type'] = 'application/json' c.data['generated_at'] = c.report_date return json.dumps(c.data, cls=DateTimeJsonEncoder) else: t.abort(400, 'Format not known - try html, json or csv') c.are_some_results = bool(c.data['table'] if 'table' in c.data else c.data) if c.are_some_results: # you can't pass args into genshi template, so it will just look # for c.data c.report_snippet = t.render_snippet(report.get_template()) return t.render('report/view.html')
def view(self, report_name, organization=None, refresh=False): try: report = t.get_action('report_show')({}, {'id': report_name}) except t.NotAuthorized: t.abort(401) except t.ObjectNotFound: t.abort(404) # ensure correct url is being used if 'organization' in t.request.environ['pylons.routes_dict'] and \ 'organization' not in report['option_defaults']: t.redirect_to(helpers.relative_url_for(organization=None)) elif 'organization' not in t.request.environ['pylons.routes_dict'] and\ 'organization' in report['option_defaults'] and \ report['option_defaults']['organization']: org = report['option_defaults']['organization'] t.redirect_to(helpers.relative_url_for(organization=org)) if 'organization' in t.request.params: # organization should only be in the url - let the param overwrite # the url. t.redirect_to(helpers.relative_url_for()) # options options = Report.add_defaults_to_options(t.request.params, report['option_defaults']) option_display_params = {} if 'format' in options: format = options.pop('format') else: format = None if 'organization' in report['option_defaults']: options['organization'] = organization options_html = {} c.options = options # for legacy genshi snippets for option in options: if option not in report['option_defaults']: # e.g. 'refresh' param log.warn('Not displaying report option HTML for param %s as option not recognized') continue option_display_params = {'value': options[option], 'default': report['option_defaults'][option]} try: options_html[option] = \ t.render_snippet('report/option_%s.html' % option, data=option_display_params) except TemplateNotFound: log.warn('Not displaying report option HTML for param %s as no template found') continue # Alternative way to refresh the cache - not in the UI, but is # handy for testing try: refresh = t.asbool(t.request.params.get('refresh')) if 'refresh' in options: options.pop('refresh') except ValueError: refresh = False # Refresh the cache if requested if t.request.method == 'POST' and not format: refresh = True if refresh: try: t.get_action('report_refresh')({}, {'id': report_name, 'options': options}) except t.NotAuthorized: t.abort(401) # Don't want the refresh=1 in the url once it is done t.redirect_to(helpers.relative_url_for(refresh=None)) # Check for any options not allowed by the report for key in options: if key not in report['option_defaults']: t.abort(400, 'Option not allowed by report: %s' % key) try: data, report_date = t.get_action('report_data_get')({}, {'id': report_name, 'options': options}) except t.ObjectNotFound: t.abort(404) except t.NotAuthorized: t.abort(401) if format and format != 'html': ensure_data_is_dicts(data) anonymise_user_names(data, organization=options.get('organization')) if format == 'csv': try: key = t.get_action('report_key_get')({}, {'id': report_name, 'options': options}) except t.NotAuthorized: t.abort(401) filename = 'report_%s.csv' % key t.response.headers['Content-Type'] = 'application/csv' t.response.headers['Content-Disposition'] = str('attachment; filename=%s' % (filename)) return make_csv_from_dicts(data['table']) elif format == 'json': t.response.headers['Content-Type'] = 'application/json' data['generated_at'] = report_date return json.dumps(data) else: t.abort(400, 'Format not known - try html, json or csv') are_some_results = bool(data['table'] if 'table' in data else data) # A couple of context variables for legacy genshi reports c.data = data c.options = options return t.render('report/view.html', extra_vars={ 'report': report, 'report_name': report_name, 'data': data, 'report_date': report_date, 'options': options, 'options_html': options_html, 'report_template': report['template'], 'are_some_results': are_some_results})
def piwik(self): return tk.render_snippet('snippets/piwik.html', dict( piwik_site_id = self.piwik_site_id, piwik_network_location = urlparse.urlsplit(self.piwik_url)[1] if self.piwik_url is not None else None, ))
def snippet(template_name, data=None): ''' This function is used to load html snippets into pages. keywords can be used to pass parameters into the snippet rendering ''' return tk.render_snippet(template_name, data)
def render(self, name_prefix, data={}): tpl = self.get_template() tpl_vars = self.prepare_template_vars(name_prefix, data) markup = toolkit.render_snippet(tpl, tpl_vars) return markup
def get_content_type_comments_badge(dataset_name, content_type='dataset'): comments_count = get_comment_count_for_dataset(dataset_name, content_type) return render_snippet('snippets/count_badge.html', {'count': comments_count})