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
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')
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'))
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'))
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
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')
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))
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']
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
# 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: