def views(package_type, id, resource_id): package_type = _get_package_type(id) context = { u'model': model, u'session': model.Session, u'user': g.user, u'for_view': True, u'auth_user_obj': g.userobj } data_dict = {u'id': id} try: check_access(u'package_update', context, data_dict) except NotAuthorized: return base.abort( 403, _(u'User %r not authorized to edit %s') % (g.user, id) ) # check if package exists try: pkg_dict = get_action(u'package_show')(context, data_dict) pkg = context[u'package'] except (NotFound, NotAuthorized): return base.abort(404, _(u'Dataset not found')) try: resource = get_action(u'resource_show')(context, {u'id': resource_id}) views = get_action(u'resource_view_list')( context, { u'id': resource_id } ) except NotFound: return base.abort(404, _(u'Resource not found')) except NotAuthorized: return base.abort(403, _(u'Unauthorized to read resource %s') % id) _setup_template_variables(context, {u'id': id}, package_type=package_type) # TODO: remove g.pkg_dict = pkg_dict g.pkg = pkg g.resource = resource g.views = views return base.render( u'package/resource_views.html', { u'pkg_dict': pkg_dict, u'pkg': pkg, u'resource': resource, u'views': views } )
def get(self, package_type, data=None, errors=None, error_summary=None): self._check_auth() data = data or self._clean_request_form() errors = errors or {} error_summary = error_summary or {} data['group_id'] = toolkit.request.params.get('group') or\ toolkit.request.form.get('groups__0__id') stage = ['active'] if data.get('state', '').startswith('draft'): stage = ['active', 'complete'] form_snippet = self.package_form form_vars = { 'data': data, 'errors': errors, 'error_summary': error_summary, 'action': 'new', 'stage': stage, 'dataset_type': package_type, } toolkit.c.pkg = None toolkit.c.pkg_dict = None context = self._get_context() _setup_template_variables(context, {}, package_type=package_type) new_template = _get_pkg_template(u'new_template', package_type) return toolkit.render( new_template, extra_vars={ u'form_vars': form_vars, u'form_snippet': form_snippet, u'dataset_type': package_type, u'resources_json': json.dumps(data.get('resources', [])), u'errors_json': json.dumps(errors), }, )
def get(self, package_type, id, resource_id, view_id=None, post_extra=None): context, extra_vars = self._prepare(id, resource_id) to_preview = extra_vars[u'to_preview'] if post_extra: extra_vars.update(post_extra) package_type = _get_package_type(id) data = extra_vars[u'data'] if u'data' in extra_vars else None if data and u'view_type' in data: view_type = data.get(u'view_type') else: view_type = request.args.get(u'view_type') # view_id exists only when updating if view_id: if not data or not view_type: try: view_data = get_action(u'resource_view_show')( context, { u'id': view_id }) view_type = view_data[u'view_type'] if data: data.update(view_data) else: data = view_data except (NotFound, NotAuthorized): return base.abort(404, _(u'View not found')) # might as well preview when loading good existing view if not extra_vars[u'errors']: to_preview = True data[u'view_type'] = view_type view_plugin = lib_datapreview.get_view_plugin(view_type) if not view_plugin: return base.abort(404, _(u'View Type Not found')) _setup_template_variables(context, {u'id': id}, package_type=package_type) data_dict = { u'package': extra_vars[u'pkg_dict'], u'resource': extra_vars[u'resource'], u'resource_view': data } view_template = view_plugin.view_template(context, data_dict) form_template = view_plugin.form_template(context, data_dict) extra_vars.update({ u'form_template': form_template, u'view_template': view_template, u'data': data, u'to_preview': to_preview, u'datastore_available': plugins.plugin_loaded(u'datastore') }) extra_vars.update( view_plugin.setup_template_variables(context, data_dict) or {}) extra_vars.update(data_dict) if view_id: return base.render(u'package/edit_view.html', extra_vars) return base.render(u'package/new_view.html', extra_vars)
def get( self, package_type, id, resource_id, view_id=None, post_extra=None ): context, extra_vars = self._prepare(id, resource_id) to_preview = extra_vars[u'to_preview'] if post_extra: extra_vars.update(post_extra) package_type = _get_package_type(id) view_type = None # view_id exists only when updating if view_id: try: old_data = get_action(u'resource_view_show')( context, { u'id': view_id } ) data = extra_vars[u'data'] or old_data view_type = old_data.get(u'view_type') # might as well preview when loading good existing view if not extra_vars[u'errors']: to_preview = True except (NotFound, NotAuthorized): return base.abort(404, _(u'View not found')) view_type = view_type or request.args.get(u'view_type') data[u'view_type'] = view_type view_plugin = lib_datapreview.get_view_plugin(view_type) if not view_plugin: return base.abort(404, _(u'View Type Not found')) _setup_template_variables( context, {u'id': id}, package_type=package_type ) data_dict = { u'package': extra_vars[u'pkg_dict'], u'resource': extra_vars[u'resource'], u'resource_view': data } view_template = view_plugin.view_template(context, data_dict) form_template = view_plugin.form_template(context, data_dict) extra_vars.update({ u'form_template': form_template, u'view_template': view_template, u'data': data, u'to_preview': to_preview, u'datastore_available': plugins.plugin_loaded(u'datastore') }) extra_vars.update( view_plugin.setup_template_variables(context, data_dict) or {} ) extra_vars.update(data_dict) if view_id: return base.render(u'package/edit_view.html', extra_vars) return base.render(u'package/new_view.html', extra_vars)
def package_history(id: str, activity_id: str) -> Union[Response, str]: context = cast( Context, { "model": model, "session": model.Session, "user": tk.g.user, "for_view": True, "auth_user_obj": tk.g.userobj, }, ) data_dict = {"id": id, "include_tracking": True} # check if package exists try: pkg_dict = tk.get_action("package_show")(context, data_dict) pkg = context["package"] except (tk.ObjectNotFound, tk.NotAuthorized): return tk.abort(404, tk._("Dataset not found")) # if the user specified a package id, redirect to the package name if ( data_dict["id"] == pkg_dict["id"] and data_dict["id"] != pkg_dict["name"] ): return tk.h.redirect_to( "activity.package_history", id=pkg_dict["name"], activity_id=activity_id, ) tk.g.pkg_dict = pkg_dict tk.g.pkg = pkg # NB templates should not use g.pkg, because it takes no account of # activity_id # view an 'old' version of the package, as recorded in the # activity stream try: activity = tk.get_action("activity_show")( context, {"id": activity_id, "include_data": True} ) except tk.ObjectNotFound: tk.abort(404, tk._("Activity not found")) except tk.NotAuthorized: tk.abort(403, tk._("Unauthorized to view activity data")) current_pkg = pkg_dict try: pkg_dict = activity["data"]["package"] except KeyError: tk.abort(404, tk._("Dataset not found")) if "id" not in pkg_dict or "resources" not in pkg_dict: log.info( "Attempt to view unmigrated or badly migrated dataset " "{} {}".format(id, activity_id) ) tk.abort( 404, tk._("The detail of this dataset activity is not available") ) if pkg_dict["id"] != current_pkg["id"]: log.info( "Mismatch between pkg id in activity and URL {} {}".format( pkg_dict["id"], current_pkg["id"] ) ) # the activity is not for the package in the URL - don't allow # misleading URLs as could be malicious tk.abort(404, tk._("Activity not found")) # The name is used lots in the template for links, so fix it to be # the current one. It's not displayed to the user anyway. pkg_dict["name"] = current_pkg["name"] # Earlier versions of CKAN only stored the package table in the # activity, so add a placeholder for resources, or the template # will crash. pkg_dict.setdefault("resources", []) # can the resources be previewed? for resource in pkg_dict["resources"]: resource_views = tk.get_action("resource_view_list")( context, {"id": resource["id"]} ) resource["has_views"] = len(resource_views) > 0 package_type = pkg_dict["type"] or "dataset" _setup_template_variables(context, {"id": id}, package_type=package_type) return tk.render( "package/history.html", { "dataset_type": package_type, "pkg_dict": pkg_dict, "pkg": pkg, }, )