diff options
author | Bryan Newbold <bnewbold@robocracy.org> | 2019-06-05 13:27:18 -0700 |
---|---|---|
committer | Bryan Newbold <bnewbold@robocracy.org> | 2019-06-05 13:27:18 -0700 |
commit | 805a8b1001754fb8397e539dbc15a6cfd65661f2 (patch) | |
tree | a1108a2e2a26ba6f92c51eea7c8227f3ef1f4d08 /python | |
parent | 84c38d29fc4c7d0dd2e61a5ee9d57ee0a87a61e3 (diff) | |
download | fatcat-805a8b1001754fb8397e539dbc15a6cfd65661f2.tar.gz fatcat-805a8b1001754fb8397e539dbc15a6cfd65661f2.zip |
release lookup view
Diffstat (limited to 'python')
-rw-r--r-- | python/fatcat_web/routes.py | 29 | ||||
-rw-r--r-- | python/fatcat_web/templates/home.html | 1 | ||||
-rw-r--r-- | python/fatcat_web/templates/release_lookup.html | 140 | ||||
-rw-r--r-- | python/tests/web_entity_views.py | 2 |
4 files changed, 162 insertions, 10 deletions
diff --git a/python/fatcat_web/routes.py b/python/fatcat_web/routes.py index 1a743b7b..5fef1b96 100644 --- a/python/fatcat_web/routes.py +++ b/python/fatcat_web/routes.py @@ -1,8 +1,8 @@ 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 import Flask, render_template, make_response, send_from_directory, \ + request, url_for, abort, g, redirect, jsonify, session, flash, Response from flask_login import login_required from flask_wtf.csrf import CSRFError @@ -223,14 +223,25 @@ def release_lookup(): 'arxiv', 'core', 'ark', 'mag'): if request.args.get(key): extid = key - break + extid_value = request.args.get(extid) + if extid_value: + extid_value = extid_value.strip() + break if extid is None: - abort(400) - try: - resp = api.lookup_release(**{extid: request.args.get(extid)}) - except ApiException as ae: - app.log.info(ae) - abort(ae.status) + return render_template('release_lookup.html') + try: + resp = api.lookup_release(**{extid: extid_value}) + except ApiException as ae: + if ae.status == 404 or ae.status == 400: + return make_response( + render_template('release_lookup.html', + lookup_key=extid, + lookup_value=extid_value, + lookup_error=ae.status), + ae.status) + else: + app.log.info(ae) + abort(ae.status) return redirect('/release/{}'.format(resp.ident)) @app.route('/release/<ident>/history', methods=['GET']) diff --git a/python/fatcat_web/templates/home.html b/python/fatcat_web/templates/home.html index 809a859f..23563f07 100644 --- a/python/fatcat_web/templates/home.html +++ b/python/fatcat_web/templates/home.html @@ -66,6 +66,7 @@ indexing (aka, linking together of pre-prints and final copies). <i class="search icon"></i> <input type="text" placeholder="DOI" name="doi" aria-label="lookup paper by DOI"> </div> + <br><a href="/release/lookup">Other Identifiers</a> </form> <tr><td><b>Container</b> <br>journal or serial diff --git a/python/fatcat_web/templates/release_lookup.html b/python/fatcat_web/templates/release_lookup.html new file mode 100644 index 00000000..0495da36 --- /dev/null +++ b/python/fatcat_web/templates/release_lookup.html @@ -0,0 +1,140 @@ +{% extends "base.html" %} + +{% macro lookup_form(key, example, lookup_key, lookup_value, lookup_error) -%} +<form class="ui form" role="search" action="/release/lookup" method="get"> + <div class="ui form"> + <div class="field {% if key == lookup_key %}{% if lookup_error == 400 %}error{% elif lookup_error == 404 %}warning{% endif %}{% endif %}"> + {% if key == lookup_key and lookup_error == 400 %} + <div class="ui pointing below red label"> + Not correct syntax. Expected, eg, {{ example }} + </div> + {% endif %} + <div class="ui action input big fluid"> + <input type="text" placeholder="{% if example %}eg, {{ example }}{% endif %}" name="{{ key }}" value="{% if key == lookup_key %}{{ lookup_value }}{% endif %}" aria-label="{{ key }} lookup"> + <button class="ui button">Go!</button> + </div> + </div> + </div> +</form> +{%- endmacro %} + +{% block body %} + +<h1>Lookup Release by Identifier</h1> + +{% if lookup_error == 400 %} +<div class="ui error message"> +<div class="header">400: Syntax Error</div> +<b>{{ lookup_key }}:{{ lookup_value }}</code></b> doesn't look right to us. See +below for details. +</div> +{% elif lookup_error == 404 %} +<div class="ui error message"> +<div class="header">404: Not Found</div> +Couldn't find a release with that identifier (<b><code>{{ lookup_key }}:{{ +lookup_value }}</code></b>). If you think it should be in the catalog, you could +search for an existing record missing that identifier, or create a new release +entity. +{% if lookup_key == "doi" %} +<p>You can check if it is a registered DOI by visiting: +<b><a href="https://doi.org/{{ lookup_value }}">https://doi.org/{{ lookup_value }}</a></b> +{% elif lookup_key == "pmcid" %} +<p>You can check if it is a real PMCID by visiting: +<b><a href="https://www.ncbi.nlm.nih.gov/pmc/articles/{{ lookup_value }}/">https://www.ncbi.nlm.nih.gov/pmc/articles/{{ lookup_value }}/</a></b> +{% else %} +{% endif %} +</div> +{% endif %} + +<div class="ui top attached segment"> + +<h2>DOI</h2> +<p><a href="https://en.wikipedia.org/wiki/Digital_object_identifier"> +Digital object identifer</a>: "it's not an identifier for a digital object, +it's a digital identifier for an object". Except they are pretty much all +digital objects. Fatcat doesn't include all DOIs (eg, for granular components +or TV shows), but it should for all complete research publications. DOIs are +generated by publishers, who pay a fee to registrars like Crossref, Datacite, +or JALC. +{{ lookup_form("doi", "10.1234/abc.5489", lookup_key, lookup_value, lookup_error) }} +<i> Don't include a URL like "http://dx.doi.org/"</i> + +</div> +<div class="ui attached segment"> + +<h2>PubMed</h2> +<p><a href="https://en.wikipedia.org/wiki/PubMed">PubMed/MEDLINE</a> is a +catalog of biomedical publications. Catalog updates are published frequently, +and may include deletions. Fatcat currently is only updated with new entries, +it does not delete PMIDs. PubMed is edited by a large staff of trained +catalogers, and has strict inclusion criteria for journals. +{{ lookup_form("pmid", "823835", lookup_key, lookup_value, lookup_error) }} +<br> + +<p><a href="https://en.wikipedia.org/wiki/PubMed_Central#PMCID">PubMed Central +Identifiers (PMCID)</a> reference works deposited in the US (or European) PMC +repositories. Not all works with a PMCID have a PMID. PMCIDs can be versioned +(eg, with a trailing ".2"), but these are rare and most Fatcat releases only +have the non-versioned PMCID. +{{ lookup_form("pmcid", "PMC93932", lookup_key, lookup_value, lookup_error) }} +<i> Include the "PMC" prefix.</i> + +</div> +<div class="ui attached segment"> + +<h2>Wikidata QID</h2> +<p><a href="https://en.wikipedia.org/wiki/Wikidata#Items">Wikidata</a> is the +structured, machine-readable database that complements Wikipedia. Entities, +which can include bibliographic entities like books and papers, are identified +by a "QID". Fatcat also links container (journal) and creator (author) entities +to Wikidata by QID. Anybody can edit Wikidata and create QIDs. +{{ lookup_form("wikidata_qid", "Q94324", lookup_key, lookup_value, lookup_error) }} +<i> Include the "Q" prefix.</i> + +</div> +<div class="ui attached segment"> + +<h2>ARK</h2> +<p><a href="https://en.wikipedia.org/wiki/Archival_Resource_Key">Archival +Resource Keys</a> are no-cost, distributed identifiers based on URLs. Mostly +used by archival systems (as opposed to publishers or repositories). +{{ lookup_form("ark", "ark:2349/sddd92", lookup_key, lookup_value, lookup_error) }} +<i> Only the identifier part (starting with "ark:"), not the full URL.</i> + +</div> +<div class="ui attached segment"> + +<h2>ISBN</h2> +<p><a href="https://en.wikipedia.org/wiki/International_Standard_Book_Number"> +International Standard Book Number</a>, assigned to specific published versions +of a book (including ebooks). +{{ lookup_form("isbn13", "978-3-16-148410-0", lookup_key, lookup_value, lookup_error) }} +<i> Canonical ISBN-13 number (not ISBN-9), with hyphens</i> + +</div> +<div class="ui attached segment"> + +<h2>arXiv</h2> +<p><a href="https://arxiv.org/help/arxiv_identifier">arXiv identifiers</a> are +generated for works deposited in the free arxiv.org pre-print repository. +Identifiers are generated for each version of a work, eg ending in "v3". Fatcat +releases must be versioned; if you don't know the version you can always lookup +"v1" and then look for other releases under the same work. +{{ lookup_form("arxiv", "0706.0001v1 or math-GT/0309136v2", lookup_key, lookup_value, lookup_error) }} +<i> Old and new style supported, but version always required for exact lookups.</i> + +</div> +<div class="ui attached bottom segment"> + +<h2>JSTOR</h2> +<p><a href="https://en.wikipedia.org/wiki/JSTOR#Content">JSTOR identifiers</a> +are numbers internally assigned to works archived on +<a href="https://jstor.org">jstor.org</a>. Many works also have a DOI with the +number after a <code>10.2307/</code> prefix, but not all works have such a DOI. +Fatcat mostly has JSTOR identifiers for works in the "Early Journal +Collection", which are in the public domain. +{{ lookup_form("jstor", "92492", lookup_key, lookup_value, lookup_error) }} + +</div> + +{% endblock %} diff --git a/python/tests/web_entity_views.py b/python/tests/web_entity_views.py index 1adf3fdf..ba1b9f0a 100644 --- a/python/tests/web_entity_views.py +++ b/python/tests/web_entity_views.py @@ -80,7 +80,7 @@ def test_lookups(app): assert rv.status_code == 404 rv = app.get('/release/lookup') - assert rv.status_code == 400 + assert rv.status_code == 200 rv = app.get('/release/lookup?doi=10.123/abc') assert rv.status_code == 302 rv = app.get('/release/lookup?doi=10.123%2Fabc') |