aboutsummaryrefslogtreecommitdiffstats
path: root/python/fatcat_web/editing_routes.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/fatcat_web/editing_routes.py')
-rw-r--r--python/fatcat_web/editing_routes.py106
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: