diff options
Diffstat (limited to 'python/fatcat_web/editing_routes.py')
-rw-r--r-- | python/fatcat_web/editing_routes.py | 106 |
1 files changed, 81 insertions, 25 deletions
diff --git a/python/fatcat_web/editing_routes.py b/python/fatcat_web/editing_routes.py index dda0bc6f..4d06f6cd 100644 --- a/python/fatcat_web/editing_routes.py +++ b/python/fatcat_web/editing_routes.py @@ -17,33 +17,89 @@ from fatcat_web.forms import * ### Views ################################################################### -@app.route('/container/<ident>/edit', methods=['GET']) -def container_edit_view(ident): +# XXX: figure out CSRF stuff for local dev +@app.route('/container/create', methods=['GET', 'POST']) +@login_required +@app.csrf.exempt +def container_create(): + form = ContainerEntityForm(csrf_enabled=False) # XXX: + if form.is_submitted(): + if form.validate_on_submit(): + # API on behalf of user + user_api = auth_api(session['api_token']) + if form.editgroup_id.data: + # TODO: error handling + eg = user_api.get_editgroup(form.editgroup_id.data) + else: + # if no editgroup, create one from description + eg = user_api.create_editgroup( + Editgroup(description=form.editgroup_description.data or None)) + # set this session editgroup_id + session['active_editgroup_id'] = eg.editgroup_id + print(eg.editgroup_id) # XXX: debug + flash('Started new editgroup <a href="/editgroup/{}">{}</a>' \ + .format(eg.editgroup_id, eg.editgroup_id)) + # no merge or anything hard to do; just create the entity + entity = form.to_entity() + edit = user_api.create_container(entity, editgroup_id=eg.editgroup_id) + # redirect to new entity + return redirect('/container/{}'.format(edit.ident)) + elif form.errors: + print("user form errors: {}".format(form.errors)) + print("didn't validate...") + if not form.is_submitted(): + editgroup_id = session.get('active_editgroup_id', None) + form.editgroup_id.data = editgroup_id + return render_template('container_create.html', + form=form, editgroup_id=editgroup_id) + +# XXX: figure out CSRF stuff for local dev +@login_required +@app.csrf.exempt +@app.route('/container/<ident>/edit', methods=['GET', 'POST']) +def container_edit(ident): + # TODO: prev_rev interlock + # TODO: factor out editgroup active/creation stuff try: entity = api.get_container(ident) except ApiException as ae: abort(ae.status) - return render_template('entity_edit.html') - -@app.route('/container/create', methods=['GET']) -@login_required -def container_create_view(): - return render_template('container_create.html') - -@app.route('/container/create', methods=['POST']) -@login_required -def container_create(): - raise NotImplementedError - params = dict() - for k in request.form: - if k.startswith('container_'): - params[k[10:]] = request.form[k] - container = None - #edit = api.create_container(container, params=params) - #return redirect("/container/{}".format(edit.ident)) + form = ContainerEntityForm(csrf_enabled=False) # XXX: + if form.is_submitted(): + if form.validate_on_submit(): + # API on behalf of user + user_api = auth_api(session['api_token']) + if form.editgroup_id.data: + # TODO: error handling + eg = user_api.get_editgroup(form.editgroup_id.data) + else: + # if no editgroup, create one from description + eg = user_api.create_editgroup( + Editgroup(description=form.editgroup_description.data or None)) + # set this session editgroup_id + session['active_editgroup_id'] = eg.editgroup_id + print(eg.editgroup_id) # XXX: debug + flash('Started new editgroup <a href="/editgroup/{}">{}</a>' \ + .format(eg.editgroup_id, eg.editgroup_id)) + # all the tricky logic is in the update method + form.update_entity(entity) + edit = user_api.update_container(entity.ident, entity, + editgroup_id=eg.editgroup_id) + # redirect to entity revision + # TODO: container_rev_view + return redirect('/container/{}'.format(edit.ident)) + elif form.errors: + print("user form errors (didn't validate): {}".format(form.errors)) + else: + form = ContainerEntityForm.from_entity(entity) + if not form.is_submitted(): + editgroup_id = session.get('active_editgroup_id', None) + form.editgroup_id.data = editgroup_id + return render_template('container_edit.html', + form=form, editgroup_id=editgroup_id, entity=entity) @app.route('/creator/<ident>/edit', methods=['GET']) -def creator_edit_view(ident): +def creator_edit(ident): try: entity = api.get_creator(ident) except ApiException as ae: @@ -51,7 +107,7 @@ def creator_edit_view(ident): return render_template('entity_edit.html') @app.route('/file/<ident>/edit', methods=['GET']) -def file_edit_view(ident): +def file_edit(ident): try: entity = api.get_file(ident) except ApiException as ae: @@ -59,7 +115,7 @@ def file_edit_view(ident): return render_template('entity_edit.html') @app.route('/fileset/<ident>/edit', methods=['GET']) -def fileset_edit_view(ident): +def fileset_edit(ident): try: entity = api.get_fileset(ident) except ApiException as ae: @@ -67,7 +123,7 @@ def fileset_edit_view(ident): return render_template('entity_edit.html') @app.route('/webcapture/<ident>/edit', methods=['GET']) -def webcapture_edit_view(ident): +def webcapture_edit(ident): try: entity = api.get_webcapture(ident) except ApiException as ae: @@ -144,7 +200,7 @@ def release_edit(ident): form.update_entity(entity) edit = user_api.update_release(entity.ident, entity, editgroup_id=eg.editgroup_id) - # redirect to release revision + # redirect to entity revision # TODO: release_rev_view return redirect('/release/{}'.format(edit.ident)) elif form.errors: |