aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBryan Newbold <bnewbold@robocracy.org>2019-06-05 13:27:18 -0700
committerBryan Newbold <bnewbold@robocracy.org>2019-06-05 13:27:18 -0700
commit805a8b1001754fb8397e539dbc15a6cfd65661f2 (patch)
treea1108a2e2a26ba6f92c51eea7c8227f3ef1f4d08
parent84c38d29fc4c7d0dd2e61a5ee9d57ee0a87a61e3 (diff)
downloadfatcat-805a8b1001754fb8397e539dbc15a6cfd65661f2.tar.gz
fatcat-805a8b1001754fb8397e539dbc15a6cfd65661f2.zip
release lookup view
-rw-r--r--python/fatcat_web/routes.py29
-rw-r--r--python/fatcat_web/templates/home.html1
-rw-r--r--python/fatcat_web/templates/release_lookup.html140
-rw-r--r--python/tests/web_entity_views.py2
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>&nbsp; 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>&nbsp; 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>&nbsp; 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>&nbsp; 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>&nbsp; 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>&nbsp; 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')