From 155ddf243a3ac17bf3b2c7b581a3750d8d4bd55b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Wed, 7 Jun 2017 17:06:26 +0200 Subject: [PATCH] Partial revert of "Added @project_view() decorator to reduce duplicated code." This reverts parts of commit 0cf96e47e84590a4c540f0cf118a76c05a41710b. The decorator is still there, and it's used by new code (also in Flamenco), but it's not used by pre-existing code. --- pillar/web/projects/routes.py | 76 ++++++++++++++++++++++++++--------- 1 file changed, 58 insertions(+), 18 deletions(-) diff --git a/pillar/web/projects/routes.py b/pillar/web/projects/routes.py index eb77c2f2..ea940e8f 100644 --- a/pillar/web/projects/routes.py +++ b/pillar/web/projects/routes.py @@ -102,9 +102,18 @@ def index(): @blueprint.route('//jstree') -@project_view() -def jstree(project): +def jstree(project_url): """Entry point to view a project as JSTree""" + api = system_util.pillar_api() + + try: + project = Project.find_one({ + 'projection': {'_id': 1}, + 'where': {'url': project_url} + }, api=api) + except ResourceNotFound: + raise wz_exceptions.NotFound('No such project') + return jsonify(items=jstree_get_children(None, project._id)) @@ -247,17 +256,19 @@ def home_jstree(): @blueprint.route('//') -@project_view() -def view(project: Project): +def view(project_url): """Entry point to view a project""" if request.args.get('format') == 'jstree': log.warning('projects.view(%r) endpoint called with format=jstree, ' 'redirecting to proper endpoint. URL is %s; referrer is %s', - project.url, request.url, request.referrer) - return redirect(url_for('projects.jstree', project_url=project.url)) + project_url, request.url, request.referrer) + return redirect(url_for('projects.jstree', project_url=project_url)) api = system_util.pillar_api() + project = find_project_or_404(project_url, + embedded={'header_node': 1}, + api=api) # Load the header video file, if there is any. header_video_file = None @@ -447,9 +458,12 @@ def find_project_or_404(project_url, embedded=None, api=None): @blueprint.route('//search') -@project_view() -def search(project: Project): +def search(project_url): """Search into a project""" + api = system_util.pillar_api() + project = find_project_or_404(project_url, api=api) + project.picture_square = utils.get_file(project.picture_square, api=api) + project.picture_header = utils.get_file(project.picture_header, api=api) return render_template('nodes/search.html', project=project, @@ -458,9 +472,15 @@ def search(project: Project): @blueprint.route('//edit', methods=['GET', 'POST']) @login_required -@project_view() -def edit(project: Project): +def edit(project_url): api = system_util.pillar_api() + # Fetch the Node or 404 + try: + project = Project.find_one({'where': {'url': project_url}}, api=api) + # project = Project.find(project_url, api=api) + except ResourceNotFound: + abort(404) + utils.attach_project_pictures(project, api) form = ProjectForm( project_id=project._id, name=project.name, @@ -523,9 +543,17 @@ def find_extension_pages() -> typing.List[pillar.extension.PillarExtension]: @blueprint.route('//edit/node-type') @login_required -@project_view() -def edit_node_types(project: Project): +def edit_node_types(project_url): api = system_util.pillar_api() + # Fetch the project or 404 + try: + project = Project.find_one({ + 'where': '{"url" : "%s"}' % (project_url)}, api=api) + except ResourceNotFound: + return abort(404) + + utils.attach_project_pictures(project, api) + return render_template('projects/edit_node_types.html', api=api, ext_pages=find_extension_pages(), @@ -534,10 +562,15 @@ def edit_node_types(project: Project): @blueprint.route('//e/node-type/', methods=['GET', 'POST']) @login_required -@project_view() -def edit_node_type(project: Project, node_type_name): +def edit_node_type(project_url, node_type_name): api = system_util.pillar_api() - + # Fetch the Node or 404 + try: + project = Project.find_one({ + 'where': '{"url" : "%s"}' % (project_url)}, api=api) + except ResourceNotFound: + return abort(404) + utils.attach_project_pictures(project, api) node_type = project.get_node_type(node_type_name) form = NodeTypeForm() if form.validate_on_submit(): @@ -578,9 +611,14 @@ def edit_node_type(project: Project, node_type_name): @blueprint.route('//edit/sharing', methods=['GET', 'POST']) @login_required -@project_view() -def sharing(project: Project): +def sharing(project_url): api = system_util.pillar_api() + # Fetch the project or 404 + try: + project = Project.find_one({ + 'where': '{"url" : "%s"}' % (project_url)}, api=api) + except ResourceNotFound: + return abort(404) # Fetch users that are part of the admin group users = project.get_users(api=api) @@ -596,7 +634,7 @@ def sharing(project: Project): elif action == 'remove': user = project.remove_user(user_id, api=api) except ResourceNotFound: - log.info('/p/%s/edit/sharing: User %s not found', project.url, user_id) + log.info('/p/%s/edit/sharing: User %s not found', project_url, user_id) return jsonify({'_status': 'ERROR', 'message': 'User %s not found' % user_id}), 404 @@ -604,6 +642,8 @@ def sharing(project: Project): user['avatar'] = utils.gravatar(user['email']) return jsonify(user) + utils.attach_project_pictures(project, api) + return render_template('projects/sharing.html', api=api, project=project,