Пример #1
0
 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 ''
Пример #3
0
    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
Пример #4
0
 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))
Пример #5
0
 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
     }))
Пример #6
0
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 ""
Пример #7
0
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))
Пример #8
0
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)
Пример #9
0
 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)
Пример #11
0
    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)
Пример #12
0
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 ""
Пример #13
0
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 ''
Пример #14
0
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)
Пример #15
0
def get_comments_badge(datarequest_id):
    return tk.render_snippet(
        "datarequests/snippets/badge.html",
        {"comments_count": get_comments_number(datarequest_id)},
    )
Пример #16
0
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)})
Пример #18
0
 def render_siteimprove(self):
     return toolkit.render_snippet(
         'siteimprove/snippets/tracker.html')
Пример #19
0
 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)
Пример #20
0
    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')
Пример #21
0
    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)
Пример #22
0
    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')
Пример #23
0
    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})
Пример #24
0
 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,
         ))
Пример #25
0
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)
Пример #26
0
 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
Пример #27
0
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})