diff options
| author | Bryan Newbold <bnewbold@robocracy.org> | 2019-01-17 10:44:38 -0800 | 
|---|---|---|
| committer | Bryan Newbold <bnewbold@robocracy.org> | 2019-01-17 10:44:38 -0800 | 
| commit | 24e7a7038f9f0c827a11282a5cc646117ffdfb9b (patch) | |
| tree | 40227dbd1a2b652bad24c9d71f8027c20ef1b7d1 /python | |
| parent | 3ad702e413c084590505cff16f9532b236718049 (diff) | |
| parent | 0a8c9a5e07213276617f06b0379a166e7fd1c100 (diff) | |
| download | fatcat-24e7a7038f9f0c827a11282a5cc646117ffdfb9b.tar.gz fatcat-24e7a7038f9f0c827a11282a5cc646117ffdfb9b.zip | |
Merge branch 'citation-efficiency'
Manually merged conflict in:
- ./TODO
Diffstat (limited to 'python')
| -rw-r--r-- | python/fatcat_web/auth.py | 5 | ||||
| -rw-r--r-- | python/fatcat_web/templates/release_view.html | 2 | ||||
| -rw-r--r-- | python/tests/citation_efficiency.py | 113 | 
3 files changed, 118 insertions, 2 deletions
| diff --git a/python/fatcat_web/auth.py b/python/fatcat_web/auth.py index 8035cbe5..03964c92 100644 --- a/python/fatcat_web/auth.py +++ b/python/fatcat_web/auth.py @@ -90,7 +90,10 @@ def handle_ia_xauth(email, password):              'secret': Config.IA_XAUTH_CLIENT_SECRET,          })      if resp.status_code == 401 or (not resp.json().get('success')): -        flash("Internet Archive email/password didn't match: {}".format(resp.json()['values']['reason'])) +        try: +            flash("Internet Archive email/password didn't match: {}".format(resp.json()['values']['reason'])) +        except: +            print("IA XAuth fail: {}".format(resp.content))          return render_template('auth_ia_login.html', email=email), resp.status_code      elif resp.status_code != 200:          flash("Internet Archive login failed (internal error?)") diff --git a/python/fatcat_web/templates/release_view.html b/python/fatcat_web/templates/release_view.html index fd86b7c9..4e24b281 100644 --- a/python/fatcat_web/templates/release_view.html +++ b/python/fatcat_web/templates/release_view.html @@ -143,7 +143,7 @@ Raw Object:  {% endif %}  <br> -{% if release.refs.size != 0 %} +{% if release.refs != None and release.refs.size != 0 %}  <h3>References</h3>  This release citing other releases.  <ol> diff --git a/python/tests/citation_efficiency.py b/python/tests/citation_efficiency.py new file mode 100644 index 00000000..fe5006cc --- /dev/null +++ b/python/tests/citation_efficiency.py @@ -0,0 +1,113 @@ + +import json +import pytest +from copy import copy + +from fatcat_client import * +from fatcat_client.rest import ApiException +from fixtures import * + + +def test_citation_indexing(api): +    # indexing is consistent and reacts to change + +    eg = quick_eg(api) +    r1 = ReleaseEntity(title="the target") +    r1.refs = [ +        ReleaseRef(key="first", title="the first title"), +        ReleaseRef(key="second", title="the second title"), +        ReleaseRef(key="third", title="a third title"), +    ] +    r1 = api.get_release(api.create_release(r1, editgroup_id=eg.editgroup_id).ident) +    api.accept_editgroup(eg.editgroup_id) + +    assert r1.refs[0].index == 0 +    assert r1.refs[0].key == "first" +    assert r1.refs[1].index == 1 +    assert r1.refs[1].key == "second" +    assert r1.refs[2].index == 2 +    assert r1.refs[2].key == "third" + +    r1.refs.pop(1) +    eg = quick_eg(api) +    api.update_release(r1.ident, r1, editgroup_id=eg.editgroup_id) +    api.accept_editgroup(eg.editgroup_id) +    r1 = api.get_release(r1.ident) + +    assert r1.refs[0].index == 0 +    assert r1.refs[0].key == "first" +    assert r1.refs[1].index == 1 +    assert r1.refs[1].key == "third" + +def test_citation_targets(api): +    # invariant to linking citations +    # also, updates work + +    eg = quick_eg(api) +    r1 = ReleaseEntity(title="the target") +    r1 = api.get_release(api.create_release(r1, editgroup_id=eg.editgroup_id).ident) +    r2 = ReleaseEntity(title="the citer") +    r2.refs = [ +        ReleaseRef(key="first", title="something else"), +        ReleaseRef(key="second", title="the target title"), +    ] +    r2 = api.get_release(api.create_release(r2, editgroup_id=eg.editgroup_id).ident) +    api.accept_editgroup(eg.editgroup_id) + +    eg = quick_eg(api) +    r2.refs[1].target_release_id = r1.ident +    api.update_release(r2.ident, r2, editgroup_id=eg.editgroup_id) +    api.accept_editgroup(eg.editgroup_id) +    r2 = api.get_release(r2.ident) +    assert r2.refs[0].key == "first" +    assert r2.refs[1].key == "second" +    assert r2.refs[0].index == 0 # TODO: one-indexing? +    assert r2.refs[1].index == 1 +    assert r2.refs[0].target_release_id == None +    assert r2.refs[1].target_release_id == r1.ident +    assert len(r2.refs) == 2 + +def test_citation_empty_array(api): +    # distinction between empty array (no citations) and no array (hidden) + +    r1 = ReleaseEntity(title="citation null") +    r2 = ReleaseEntity(title="citation empty array") +    r1.refs = None +    r2.refs = [] + +    eg = quick_eg(api) +    r1 = api.get_release(api.create_release(r1, editgroup_id=eg.editgroup_id).ident) +    r2 = api.get_release(api.create_release(r2, editgroup_id=eg.editgroup_id).ident) +    api.accept_editgroup(eg.editgroup_id) + +    print(r1.refs) +    print(r2.refs) +    assert r1.refs == [] +    assert r1.refs == r2.refs + +    r1b = api.get_release(r1.ident, hide="refs") +    assert r1b.refs == None + +def test_citation_encoding(api): +    # escape-only changes (eg, \u1234 whatever for ASCII) + +    r1 = ReleaseEntity(title="citation encoding") +    title = "title-unicode \\u0050 \\\" " +    container = "container-unicode ☃︎ ä ö ü スティー" +    extra = extra={'a': 1, 'b': 2, 'ö': 3} +    locator = "p123" +    r1.refs = [ +        ReleaseRef(key="1", year=1923, title=title, container_name=container, +            extra=extra, locator=locator), +        ReleaseRef(key="2"), +    ] + +    eg = quick_eg(api) +    r1 = api.get_release(api.create_release(r1, editgroup_id=eg.editgroup_id).ident) +    api.accept_editgroup(eg.editgroup_id) + +    assert title == r1.refs[0].title +    assert container == r1.refs[0].container_name +    assert extra == r1.refs[0].extra +    assert locator == r1.refs[0].locator + | 
