Example #1
0
 def after_update(self, context, data_dict):
     # FIXME: flash_success makes no sense if this was an API call
     # consider moving this to an overridden controller method instead
     if context.get('allow_state_change') and data_dict.get(
             'state') == 'active':
         h.flash_success(
             _("Your record %s has been saved.") % data_dict['id'])
     return data_dict
Example #2
0
    def package_undelete(self, pkg_id):
        h.flash_success(
            _('<strong>Note</strong><br> The record has been restored.'),
            allow_html=True)

        lc = LocalCKAN(username=c.user)
        lc.action.package_patch(id=pkg_id, state='active')

        return h.redirect_to(controller='package', action='read', id=pkg_id)
Example #3
0
 def resource_edit(self, id, resource_id, data=None, errors=None,
                   error_summary=None):
     try:
         return super(CanadaDatasetController, self).resource_edit(
             id, resource_id, data, errors, error_summary)
     except HTTPFound:
         h.flash_success(_(u'Resource updated.'))
         # resource read page is unfinished, return to dataset page
         h.redirect_to(controller='package', action='read', id=id)
Example #4
0
 def resource_edit(self, id, resource_id, data=None, errors=None,
                   error_summary=None):
     try:
         return super(CanadaDatasetController, self).resource_edit(
             id, resource_id, data, errors, error_summary)
     except HTTPFound:
         h.flash_success(_(u'Resource updated.'))
         # resource read page is unfinished, return to dataset page
         h.redirect_to(controller='package', action='read', id=id)
Example #5
0
 def after_update(self, context, data_dict):
     # FIXME: flash_success makes no sense if this was an API call
     # consider moving this to an overridden controller method instead
     if context.get('allow_state_change') and data_dict.get(
             'state') == 'active':
         h.flash_success(
             _("Your record %s has been saved.")
             % data_dict['id']
         )
     return data_dict
Example #6
0
 def edit(self, id, data=None, errors=None, error_summary=None):
     try:
         return super(CanadaDatasetController,
                      self).edit(id, data, errors, error_summary)
     except HTTPFound:
         if c.pkg_dict['type'] == 'prop':
             h.flash_success(
                 _(u'The status has been added / updated for this suggested  dataset. This update will be reflected on open.canada.ca shortly.'
                   ))
         raise
Example #7
0
    def package_delete(self, pkg_id):
        h.flash_success(_(
            '<strong>Note</strong><br> The dataset has been removed from'
            ' the Open Government Portal. <br/> The record may re-appear'
            ' if it is re-harvested or updated. Please ensure that the'
            ' record is deleted and purged from the source catalogue in'
            ' order to prevent it from reappearing.'),
                        allow_html=True)
        lc = LocalCKAN(username=c.user)
        lc.action.package_delete(id=pkg_id)

        return h.redirect_to(controller='package', action='search')
Example #8
0
    def package_undelete(self, pkg_id):
        h.flash_success(_(
            '<strong>Note</strong><br> The record has been restored.'),
            allow_html=True
        )

        lc = LocalCKAN(username=c.user)
        lc.action.package_patch(
            id=pkg_id,
            state='active'
        )

        return h.redirect_to(
            controller='package',
            action='read',
            id=pkg_id
        )
Example #9
0
    def package_delete(self, pkg_id):
        h.flash_success(_(
            '<strong>Note</strong><br> The dataset has been removed from'
            ' the Open Government Portal. <br/> The record may re-appear'
            ' if it is re-harvested or updated. Please ensure that the'
            ' record is deleted and purged from the source catalogue in'
            ' order to prevent it from reappearing.'
            ),
            allow_html=True
        )
        lc = LocalCKAN(username=c.user)
        lc.action.package_delete(id=pkg_id)

        return h.redirect_to(
            controller='package',
            action='search'
        )
Example #10
0
    def logged_in(self):
        # we need to set the language via a redirect

        # Lang is not being retrieved properly by the Babel i18n lib in
        # this redirect, so using this clunky workaround for now.
        lang = session.pop('lang', None)
        if lang is None:
            came_from = request.params.get('came_from', '')
            if came_from.startswith('/fr'):
                lang = 'fr'
            else:
                lang = 'en'

        session.save()

        # we need to set the language explicitly here or the flash
        # messages will not be translated.
        i18n.set_lang(lang)

        if c.user:
            context = None
            data_dict = {'id': c.user}

            user_dict = get_action('user_show')(context, data_dict)

            h.flash_success(
                _('<strong>Note</strong><br>{0} is now logged in').format(
                    user_dict['display_name']
                ),
                allow_html=True
            )

            notice_no_access()

            return h.redirect_to(
                controller='ckanext.canada.controller:CanadaController',
                action='home',
                locale=lang)
        else:
            h.flash_error(_('Login failed. Bad username or password.'))
            return h.redirect_to(
                controller='user',
                action='login', locale=lang
            )
Example #11
0
    def logged_in(self):
        # we need to set the language via a redirect

        # Lang is not being retrieved properly by the Babel i18n lib in
        # this redirect, so using this clunky workaround for now.
        lang = session.pop('lang', None)
        if lang is None:
            came_from = request.params.get('came_from', '')
            if came_from.startswith('/fr'):
                lang = 'fr'
            else:
                lang = 'en'

        session.save()

        # we need to set the language explicitly here or the flash
        # messages will not be translated.
        i18n.set_lang(lang)

        if c.user:
            context = None
            data_dict = {'id': c.user}

            user_dict = get_action('user_show')(context, data_dict)

            h.flash_success(
                _('<strong>Note</strong><br>{0} is now logged in').format(
                    user_dict['display_name']
                ),
                allow_html=True
            )

            notice_no_access()

            return h.redirect_to(
                controller='ckanext.canada.controller:CanadaController',
                action='home',
                locale=lang)
        else:
            h.flash_error(_('Login failed. Bad username or password.'))
            return h.redirect_to(
                controller='user',
                action='login', locale=lang
            )
Example #12
0
    def create_travela(self, id, resource_id):
        lc = LocalCKAN(username=c.user)
        pkg = lc.action.package_show(id=id)
        res = lc.action.resource_show(id=resource_id)
        org = lc.action.organization_show(id=pkg['owner_org'])
        dataset = lc.action.recombinant_show(
            dataset_type='travela', owner_org=org['name'])

        chromo = h.recombinant_get_chromo('travela')
        data = {}
        data_prev = {}
        form_data = {}
        for f in chromo['fields']:
            dirty = request.params.getone(f['datastore_id'])
            data[f['datastore_id']] = canonicalize(dirty, f['datastore_type'], False)
            if f['datastore_id'] + '_prev' in request.params:
                 data_prev[f['datastore_id']] = request.params.getone(f['datastore_id'] + '_prev')
                 form_data[f['datastore_id'] + '_prev'] = data_prev[f['datastore_id']]

        form_data.update(data)

        def error(errors):
            return render('recombinant/resource_edit.html',
                extra_vars={
                    'create_errors': errors,
                    'create_data': form_data,
                    'delete_errors': [],
                    'dataset': dataset,
                    'resource': res,
                    'organization': org,
                    'filters': {},
                    'action': 'edit'})

        try:
            year = int_validator(data['year'], None)
        except Invalid:
            year = None

        if not year:
            return error({'year': [_(u'Invalid year')]})

        response = lc.action.datastore_search(resource_id=resource_id,
            filters={'year': data['year']})
        if response['records']:
            return error({'year': [_(u'Data for this year has already been entered')]})

        response = lc.action.datastore_search(resource_id=resource_id,
            filters={'year': year - 1})
        if response['records']:
            prev = response['records'][0]
            errors = {}
            for p in data_prev:
                if prev[p] != data_prev[p] and prev[p]:
                    errors[p + '_prev'] = [_(u'Does not match previous data "%s"') % prev[p]]
            if errors:
                return error(errors)
        else:
            lc.action.datastore_upsert(resource_id=resource_id,
                method='insert',
                records=[dict(data_prev, year=year - 1)])
            h.flash_success(_("Record for %d added.") % (year - 1))

        lc.action.datastore_upsert(resource_id=resource_id,
            method='insert',
            records=[data])

        h.flash_success(_("Record for %d added.") % year)

        redirect(h.url_for(
            controller='ckanext.recombinant.controller:UploadController',
            action='preview_table',
            resource_name=res['name'],
            owner_org=org['name'],
            ))
Example #13
0
    def create_travela(self, id, resource_id):
        lc = LocalCKAN(username=c.user)
        pkg = lc.action.package_show(id=id)
        res = lc.action.resource_show(id=resource_id)
        org = lc.action.organization_show(id=pkg['owner_org'])
        dataset = lc.action.recombinant_show(dataset_type='travela',
                                             owner_org=org['name'])

        chromo = h.recombinant_get_chromo('travela')
        data = {}
        data_prev = {}
        form_data = {}
        for f in chromo['fields']:
            dirty = request.params.getone(f['datastore_id'])
            data[f['datastore_id']] = canonicalize(dirty, f['datastore_type'],
                                                   False)
            if f['datastore_id'] + '_prev' in request.params:
                data_prev[f['datastore_id']] = request.params.getone(
                    f['datastore_id'] + '_prev')
                form_data[f['datastore_id'] +
                          '_prev'] = data_prev[f['datastore_id']]

        form_data.update(data)

        def error(errors):
            return render('recombinant/resource_edit.html',
                          extra_vars={
                              'create_errors': errors,
                              'create_data': form_data,
                              'delete_errors': [],
                              'dataset': dataset,
                              'resource': res,
                              'organization': org,
                              'filters': {},
                              'action': 'edit'
                          })

        try:
            year = int_validator(data['year'], None)
        except Invalid:
            year = None

        if not year:
            return error({'year': [_(u'Invalid year')]})

        response = lc.action.datastore_search(resource_id=resource_id,
                                              filters={'year': data['year']})
        if response['records']:
            return error(
                {'year': [_(u'Data for this year has already been entered')]})

        response = lc.action.datastore_search(resource_id=resource_id,
                                              filters={'year': year - 1})
        if response['records']:
            prev = response['records'][0]
            errors = {}
            for p in data_prev:
                if prev[p] != data_prev[p]:
                    errors[p + '_prev'] = [
                        _(u'Does not match previous data "%s"') % prev[p]
                    ]
            if errors:
                return error(errors)
        else:
            lc.action.datastore_upsert(
                resource_id=resource_id,
                method='insert',
                records=[dict(data_prev, year=year - 1)])
            h.flash_success(_("Record for %d added.") % (year - 1))

        lc.action.datastore_upsert(resource_id=resource_id,
                                   method='insert',
                                   records=[data])

        h.flash_success(_("Record for %d added.") % year)

        redirect(
            h.url_for(
                controller='ckanext.recombinant.controller:UploadController',
                action='preview_table',
                resource_name=res['name'],
                owner_org=org['name'],
            ))