Exemplo n.º 1
0
    def test_edit(self):
        CreateTestData.create_arbitrary(
            {u'name':u'name_before',
             u'title':u'title_before',
             u'url':u'testurl',
             u'resources':[{'url':'dlu1', 'format':'tf1'},
                           ],
             u'notes':u'testnotes',
             u'version':u'testversion',
             u'tags':['one', 'two'],
             u'license':'gpl-3.0',
             u'extras':{'key1':'value1', 'key2':'value2'},
             }
            )

        pkg = model.Package.by_name(u'name_before')
        fs = ckan.forms.get_standard_fieldset(is_admin=False, user_editable_groups=[])
        data =  ckan.forms.add_to_package_dict(
                ckan.forms.get_package_dict(pkg=pkg, fs=fs, user_editable_groups=[]), self.params,
                    pkg.id)
        fs = fs.bind(pkg, data=data)
        pkg2 = PackageSaver()._preview_pkg(fs, u'name_before', pkg.id)
        self._check_preview_pkg(pkg2, self.params)

        # Check nothing has changed in the model
        assert model.Package.by_name(u'name_before')
        assert not model.Package.by_name(u'name_after')
        assert not model.Tag.by_name(u'three')
        resources = model.Session.query(model.Resource).filter_by(url=u'dlu2c').first()
        assert resources is None, resources
Exemplo n.º 2
0
    def test_new(self):
        fs = ckan.forms.get_standard_fieldset(is_admin=False, user_editable_groups=[])
        data = ckan.forms.add_to_package_dict(
            ckan.forms.get_package_dict(fs=fs, user_editable_groups=[]), self.params)
        fs = fs.bind(model.Package, data=data)
        pkg = PackageSaver()._preview_pkg(fs, '', '')

        self._check_preview_pkg(pkg, self.params)
        assert not model.Package.by_name(u'testname')
Exemplo n.º 3
0
class PackageFormalchemyController(PackageController):
    def __init__(self):
        self.extensions = PluginImplementations(IPackageController)

    def new(self):
        c.error = ''
        is_admin = self.authorizer.is_sysadmin(c.user)
        # Check access control for user to create a package.
        try:
            context = {'model': model, 'user': c.user or c.author}
            check_access('package_create', context)
        except NotAuthorized:
            abort(401, _('Unauthorized to create a package'))
        # Get the name of the package form.
        try:
            fs = self._get_package_fieldset(is_admin=is_admin)
        except ValueError, e:
            abort(400, e)
        if 'save' in request.params:
            if not request.params.has_key('log_message'):
                abort(400, ('Missing parameter: log_message'))
            log_message = request.params['log_message']
        record = model.Package
        if request.params.has_key('save'):
            fs = fs.bind(record,
                         data=dict(request.params) or None,
                         session=model.Session)
            try:
                PackageSaver().commit_pkg(fs, log_message, c.author, client=c)
                pkgname = fs.name.value

                pkg = model.Package.by_name(pkgname)
                admins = []
                if c.user:
                    user = model.User.by_name(c.user)
                    if user:
                        admins = [user]
                model.setup_default_user_roles(pkg, admins)
                for item in self.extensions:
                    item.create(pkg)
                model.repo.commit_and_remove()

                self._form_save_redirect(pkgname, 'new')
            except ValidationException, error:
                fs = error.args[0]
                c.form = self._render_edit_form(fs,
                                                request.params,
                                                clear_session=True)
                return render('package/new.html')
            except KeyError, error:
                abort(400,
                      ('Missing parameter: %s' % error.args).encode('utf8'))
Exemplo n.º 4
0
class PackageFormalchemyController(PackageController):
    def new(self):
        c.error = ''
        api_url = config.get('ckan.api_url', '/').rstrip('/')
        c.package_create_slug_api_url = api_url + h.url_for(
            controller='api', action='create_slug')
        is_admin = self.authorizer.is_sysadmin(c.user)
        # Check access control for user to create a package.
        auth_for_create = self.authorizer.am_authorized(
            c, model.Action.PACKAGE_CREATE, model.System())
        if not auth_for_create:
            abort(401, _('Unauthorized to create a package'))
        # Get the name of the package form.
        try:
            fs = self._get_package_fieldset(is_admin=is_admin)
        except ValueError, e:
            abort(400, e)
        if 'save' in request.params or 'preview' in request.params:
            if not request.params.has_key('log_message'):
                abort(400, ('Missing parameter: log_message'))
            log_message = request.params['log_message']
        record = model.Package
        if request.params.has_key('save'):
            fs = fs.bind(record,
                         data=dict(request.params) or None,
                         session=model.Session)
            try:
                PackageSaver().commit_pkg(fs, log_message, c.author, client=c)
                pkgname = fs.name.value

                pkg = model.Package.by_name(pkgname)
                admins = []
                if c.user:
                    user = model.User.by_name(c.user)
                    if user:
                        admins = [user]
                model.setup_default_user_roles(pkg, admins)
                for item in self.extensions:
                    item.create(pkg)
                model.repo.commit_and_remove()

                self._form_save_redirect(pkgname, 'new')
            except ValidationException, error:
                fs = error.args[0]
                c.form = self._render_edit_form(fs,
                                                request.params,
                                                clear_session=True)
                return render('package/new.html')
            except KeyError, error:
                abort(400,
                      ('Missing parameter: %s' % error.args).encode('utf8'))
Exemplo n.º 5
0
    def setup_class(cls):
        PylonsTestCase.setup_class()
        HarvestFixture.setup_class()

        # prepare to render package page
        user = model.PSEUDO_USER__VISITOR
        c.pkg = model.Package.by_name(u'annakarenina')
        c.locale = 'en'
        c.body_class = 'hide-sidebar'
        c.controller = 'package'
        c.action = 'read'
        c.user = user
        c.is_preview = False
        c.hide_welcome_message = False
        context = {
            'model': model,
            'session': model.Session,
            'user': c.user,
            'package': c.pkg
        }
        c.pkg_dict = get_action('package_show')(context, {'id': c.pkg.id})

        # inject a mock-routes_dict into the environ in order
        # that the template can be rendered correctly.
        # See 'ckan/templates/layout_base.html'
        # (This is also fixed in ckan 1.5.1)
        import pylons
        pylons.request.environ.update({
            'pylons.routes_dict': {
                'action': 'test-action',
                'controller': 'test-package::',
            }
        })

        # Render package view page
        # (filter should not be called on this occasion)
        PackageSaver().render_package(c.pkg_dict, context)
        cls.pkg_page = render('package/read.html')

        # Expected URLs
        harvest_object_id = c.pkg.extras.get('harvest_object_id')
        cls.harvest_xml_url = '/api/2/rest/harvestobject/%s/xml' % harvest_object_id
        cls.harvest_html_url = '/api/2/rest/harvestobject/%s/html' % harvest_object_id
Exemplo n.º 6
0
    def comments(self, id):
        context = {'model': model, 'session': model.Session,
                   'user': c.user or c.author, 'extras_as_string': True,
                   'schema': self._form_to_db_schema()}

        #check if package exists
        try:
            c.pkg_dict = get_action('package_show')(context, {'id':id})
            c.pkg = context['package']
        except NotFound:
            abort(404, _('Package not found'))
        except NotAuthorized:
            abort(401, _('Unauthorized to read package %s') % id)

        # used by disqus plugin
        c.current_package_id = c.pkg.id

        #render the package
        PackageSaver().render_package(c.pkg_dict)
        return render('package/comments.html')
Exemplo n.º 7
0
    def comments(self, id):
        package_type = self._get_package_type(id)
        context = {
            'model': model,
            'session': model.Session,
            'user': c.user or c.author,
            'extras_as_string': True
        }

        #check if package exists
        try:
            c.pkg_dict = get_action('package_show')(context, {'id': id})
            c.pkg = context['package']
        except NotFound:
            abort(404, _('Dataset not found'))
        except NotAuthorized:
            abort(401, _('Unauthorized to read package %s') % id)

        # used by disqus plugin
        c.current_package_id = c.pkg.id

        #render the package
        PackageSaver().render_package(c.pkg_dict)
        return render(self._comments_template(package_type))
Exemplo n.º 8
0
        response.set_cookie('hide_welcome_message', '1',
                            max_age=3600)  #(make cross-site?)

        # used by disqus plugin
        c.current_package_id = c.pkg.id

        if config.get('rdf_packages'):
            accept_header = request.headers.get('Accept', '*/*')
            for content_type, exts in negotiate(autoneg_cfg, accept_header):
                if "html" not in exts:
                    rdf_url = '%s%s.%s' % (config['rdf_packages'], c.pkg.id,
                                           exts[0])
                    redirect(rdf_url, code=303)
                break

        PackageSaver().render_package(c.pkg_dict, context)
        return render('package/read.html')

    def comments(self, id):
        context = {
            'model': model,
            'session': model.Session,
            'user': c.user or c.author,
            'extras_as_string': True,
            'schema': self._form_to_db_schema()
        }

        #check if package exists
        try:
            c.pkg_dict = get_action('package_show')(context, {'id': id})
            c.pkg = context['package']
Exemplo n.º 9
0
        except ValueError, e:
            abort(400, e)
        if 'save' in request.params:
            if not request.params.has_key('log_message'):
                abort(400, ('Missing parameter: log_message'))
            log_message = request.params['log_message']

            # id is the name (pre-edited state)
            pkgname = id
            params = dict(request.params)  # needed because request is nested
            # multidict which is read only
            fs = fs.bind(pkg, data=params or None)
            try:
                for item in self.extensions:
                    item.edit(fs.model)
                PackageSaver().commit_pkg(fs, log_message, c.author, client=c)
                # do not use package name from id, as it may have been edited
                pkgname = fs.name.value
                self._form_save_redirect(pkgname, 'edit')
            except ValidationException, error:
                fs = error.args[0]
                c.form = self._render_edit_form(fs,
                                                request.params,
                                                clear_session=True)
                return render('package/edit.html')
            except KeyError, error:
                abort(400, 'Missing parameter: %s' % error.args)
        else:
            # edit
            c.pkgname = pkg.name
            c.pkgtitle = pkg.title
Exemplo n.º 10
0
            # ensure all fields specified in params (formalchemy needs this on bind)
            from ckan.forms import add_to_package_dict, get_package_dict

            data = add_to_package_dict(get_package_dict(fs=fs), request.params)
            fs = fs.bind(model.Package, data=data, session=model.Session)

        else:
            fs = fs.bind(session=model.Session)
        #if 'preview' in request.params:
        #    c.preview = ' '
        c.form = self._render_edit_form(fs, request.params, clear_session=True)
        if 'preview' in request.params:
            c.is_preview = True
            try:
                PackageSaver().render_preview(fs,
                                              log_message=log_message,
                                              author=c.author,
                                              client=c)
                c.preview = h.literal(render('package/read_core.html'))
            except ValidationException, error:
                fs = error.args[0]
                c.form = self._render_edit_form(fs,
                                                request.params,
                                                clear_session=True)
                return render('package/new.html')
        return render('package/new.html')

    def edit(self, id=None):  # allow id=None to allow posting
        # TODO: refactor to avoid duplication between here and new
        c.error = ''
        c.pkg = pkg = model.Package.get(id)
        if pkg is None: