diff options
| author | Bryan Newbold <bnewbold@robocracy.org> | 2019-04-02 15:33:36 -0700 | 
|---|---|---|
| committer | Bryan Newbold <bnewbold@robocracy.org> | 2019-04-02 15:33:36 -0700 | 
| commit | 4bbdfce35d6682cac197961c13ea82bb66658d8b (patch) | |
| tree | 617e21afafa84ff339d935cc9ed025ee3b163d90 | |
| parent | 4671f21ba969b48a0490457c296d9b585b64c055 (diff) | |
| download | fatcat-4bbdfce35d6682cac197961c13ea82bb66658d8b.tar.gz fatcat-4bbdfce35d6682cac197961c13ea82bb66658d8b.zip | |
refactor editing routes into separate file
| -rw-r--r-- | python/fatcat_web/__init__.py | 2 | ||||
| -rw-r--r-- | python/fatcat_web/editing_routes.py | 170 | ||||
| -rw-r--r-- | python/fatcat_web/routes.py | 165 | 
3 files changed, 171 insertions, 166 deletions
| diff --git a/python/fatcat_web/__init__.py b/python/fatcat_web/__init__.py index 3f3824e1..7d62bb5f 100644 --- a/python/fatcat_web/__init__.py +++ b/python/fatcat_web/__init__.py @@ -49,7 +49,7 @@ else:      print("No privileged token found")      priv_api = None -from fatcat_web import routes, auth, cors, forms +from fatcat_web import routes, editing_routes, auth, cors, forms  gitlab_bp = create_flask_blueprint(Gitlab, oauth, auth.handle_oauth)  app.register_blueprint(gitlab_bp, url_prefix='/auth/gitlab') diff --git a/python/fatcat_web/editing_routes.py b/python/fatcat_web/editing_routes.py new file mode 100644 index 00000000..dda0bc6f --- /dev/null +++ b/python/fatcat_web/editing_routes.py @@ -0,0 +1,170 @@ + +import os +import json +from flask import Flask, render_template, send_from_directory, request, \ +    url_for, abort, g, redirect, jsonify, session, flash, Response +from flask_login import login_required + +from fatcat_client import Editgroup +from fatcat_client.rest import ApiException +from fatcat_tools.transforms import * +from fatcat_web import app, api, auth_api, priv_api +from fatcat_web.auth import handle_token_login, handle_logout, load_user, handle_ia_xauth +from fatcat_web.cors import crossdomain +from fatcat_web.search import * +from fatcat_web.forms import * + + +### Views ################################################################### + +@app.route('/container/<ident>/edit', methods=['GET']) +def container_edit_view(ident): +    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)) + +@app.route('/creator/<ident>/edit', methods=['GET']) +def creator_edit_view(ident): +    try: +        entity = api.get_creator(ident) +    except ApiException as ae: +        abort(ae.status) +    return render_template('entity_edit.html') + +@app.route('/file/<ident>/edit', methods=['GET']) +def file_edit_view(ident): +    try: +        entity = api.get_file(ident) +    except ApiException as ae: +        abort(ae.status) +    return render_template('entity_edit.html') + +@app.route('/fileset/<ident>/edit', methods=['GET']) +def fileset_edit_view(ident): +    try: +        entity = api.get_fileset(ident) +    except ApiException as ae: +        abort(ae.status) +    return render_template('entity_edit.html') + +@app.route('/webcapture/<ident>/edit', methods=['GET']) +def webcapture_edit_view(ident): +    try: +        entity = api.get_webcapture(ident) +    except ApiException as ae: +        abort(ae.status) +    return render_template('entity_edit.html') + +# XXX: figure out CSRF stuff for local dev +@app.route('/release/create', methods=['GET', 'POST']) +@login_required +@app.csrf.exempt +def release_create(): +    form = ReleaseEntityForm(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_release(entity, editgroup_id=eg.editgroup_id) +            # redirect to new release +            return redirect('/release/{}'.format(edit.ident)) +        elif form.errors: +            print("user form errors: {}".format(form.errors)) +            print("didn't validate...") +    elif len(form.contribs) == 0: +        form.contribs.append_entry() +    if not form.is_submitted(): +        editgroup_id = session.get('active_editgroup_id', None) +        form.editgroup_id.data = editgroup_id +    return render_template('release_create.html', +        form=form, editgroup_id=editgroup_id) + +# XXX: figure out CSRF stuff for local dev +@login_required +@app.csrf.exempt +@app.route('/release/<ident>/edit', methods=['GET', 'POST']) +def release_edit(ident): +    # TODO: prev_rev interlock +    # TODO: factor out editgroup active/creation stuff +    try: +        entity = api.get_release(ident) +    except ApiException as ae: +        abort(ae.status) +    form = ReleaseEntityForm(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_release(entity.ident, entity, +                editgroup_id=eg.editgroup_id) +            # redirect to release revision +            # TODO: release_rev_view +            return redirect('/release/{}'.format(edit.ident)) +        elif form.errors: +            print("user form errors (didn't validate): {}".format(form.errors)) +    else: +        form = ReleaseEntityForm.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('release_edit.html', +        form=form, editgroup_id=editgroup_id, entity=entity) + +@app.route('/work/create', methods=['GET']) +def work_create_view(): +    return abort(404) + +@app.route('/work/<ident>/edit', methods=['GET']) +def work_edit_view(ident): +    try: +        entity = api.get_work(ident) +    except ApiException as ae: +        abort(ae.status) +    return render_template('entity_edit.html') diff --git a/python/fatcat_web/routes.py b/python/fatcat_web/routes.py index 2bfb9025..ed9abf0b 100644 --- a/python/fatcat_web/routes.py +++ b/python/fatcat_web/routes.py @@ -12,7 +12,6 @@ from fatcat_web import app, api, auth_api, priv_api  from fatcat_web.auth import handle_token_login, handle_logout, load_user, handle_ia_xauth  from fatcat_web.cors import crossdomain  from fatcat_web.search import * -from fatcat_web.forms import *  ### Views ################################################################### @@ -31,43 +30,6 @@ def container_history(ident):          entity=entity,          history=history) -@app.route('/container/<ident>/edit', methods=['GET']) -def container_edit_view(ident): -    try: -        entity = api.get_container(ident) -    except ApiException as ae: -        abort(ae.status) -    return render_template('entity_edit.html') - -#@app.route('/container/<ident>/edit', methods=['POST']) -#def container_edit(ident): -#    raise NotImplemented() -#    params = dict() -#    for k in request.form: -#        if k.startswith('container_'): -#            params[k[10:]] = request.form[k] -#    edit = api.update_container(params=params) -#    return redirect("/container/{}".format(edit.ident)) -#    # else: -#    #return render_template('container_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)) -  @app.route('/container/lookup', methods=['GET'])  def container_lookup():      extid = None @@ -121,14 +83,6 @@ def creator_history(ident):          entity=entity,          history=history) -@app.route('/creator/<ident>/edit', methods=['GET']) -def creator_edit_view(ident): -    try: -        entity = api.get_creator(ident) -    except ApiException as ae: -        abort(ae.status) -    return render_template('entity_edit.html') -  @app.route('/creator/lookup', methods=['GET'])  def creator_lookup():      for key in ('orcid', 'wikidata_qid'): @@ -169,14 +123,6 @@ def file_history(ident):          entity=entity,          history=history) -@app.route('/file/<ident>/edit', methods=['GET']) -def file_edit_view(ident): -    try: -        entity = api.get_file(ident) -    except ApiException as ae: -        abort(ae.status) -    return render_template('entity_edit.html') -  @app.route('/file/lookup', methods=['GET'])  def file_lookup():      for key in ('md5', 'sha1', 'sha256'): @@ -223,14 +169,6 @@ def fileset_history(ident):          entity=entity,          history=history) -@app.route('/fileset/<ident>/edit', methods=['GET']) -def fileset_edit_view(ident): -    try: -        entity = api.get_fileset(ident) -    except ApiException as ae: -        abort(ae.status) -    return render_template('entity_edit.html') -  @app.route('/fileset/lookup', methods=['GET'])  def fileset_lookup():      raise NotImplementedError @@ -268,14 +206,6 @@ def webcapture_history(ident):          entity=entity,          history=history) -@app.route('/webcapture/<ident>/edit', methods=['GET']) -def webcapture_edit_view(ident): -    try: -        entity = api.get_webcapture(ident) -    except ApiException as ae: -        abort(ae.status) -    return render_template('entity_edit.html') -  @app.route('/webcapture/lookup', methods=['GET'])  def webcapture_lookup():      raise NotImplementedError @@ -313,44 +243,6 @@ def release_lookup():          abort(ae.status)      return redirect('/release/{}'.format(resp.ident)) -# XXX: figure out CSRF stuff for local dev -@app.route('/release/create', methods=['GET', 'POST']) -@login_required -@app.csrf.exempt -def release_create(): -    form = ReleaseEntityForm(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_release(entity, editgroup_id=eg.editgroup_id) -            # redirect to new release -            return redirect('/release/{}'.format(edit.ident)) -        elif form.errors: -            print("user form errors: {}".format(form.errors)) -            print("didn't validate...") -    elif len(form.contribs) == 0: -        form.contribs.append_entry() -    if not form.is_submitted(): -        editgroup_id = session.get('active_editgroup_id', None) -        form.editgroup_id.data = editgroup_id -    return render_template('release_create.html', -        form=form, editgroup_id=editgroup_id) -  @app.route('/release/<ident>/history', methods=['GET'])  def release_history(ident):      try: @@ -364,51 +256,6 @@ def release_history(ident):          entity=entity,          history=history) -# XXX: figure out CSRF stuff for local dev -@login_required -@app.csrf.exempt -@app.route('/release/<ident>/edit', methods=['GET', 'POST']) -def release_edit(ident): -    # TODO: prev_rev interlock -    # TODO: factor out editgroup active/creation stuff -    try: -        entity = api.get_release(ident) -    except ApiException as ae: -        abort(ae.status) -    form = ReleaseEntityForm(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_release(entity.ident, entity, -                editgroup_id=eg.editgroup_id) -            # redirect to release revision -            # TODO: release_rev_view -            return redirect('/release/{}'.format(edit.ident)) -        elif form.errors: -            print("user form errors (didn't validate): {}".format(form.errors)) -    else: -        form = ReleaseEntityForm.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('release_edit.html', -        form=form, editgroup_id=editgroup_id, entity=entity) -  @app.route('/release/<ident>', methods=['GET'])  def release_view(ident):      try: @@ -433,10 +280,6 @@ def release_view(ident):      return render_template('release_view.html', release=entity,          authors=authors, container=container) -@app.route('/work/create', methods=['GET']) -def work_create_view(): -    return abort(404) -  @app.route('/work/<ident>/history', methods=['GET'])  def work_history(ident):      try: @@ -450,14 +293,6 @@ def work_history(ident):          entity=entity,          history=history) -@app.route('/work/<ident>/edit', methods=['GET']) -def work_edit_view(ident): -    try: -        entity = api.get_work(ident) -    except ApiException as ae: -        abort(ae.status) -    return render_template('entity_edit.html') -  @app.route('/work/<ident>', methods=['GET'])  def work_view(ident):      try: | 
