diff options
Diffstat (limited to 'python/fatcat_web')
-rw-r--r-- | python/fatcat_web/entity_helpers.py | 15 | ||||
-rw-r--r-- | python/fatcat_web/search.py | 43 | ||||
-rw-r--r-- | python/fatcat_web/templates/container_view.html | 6 | ||||
-rw-r--r-- | python/fatcat_web/templates/entity_macros.html | 77 | ||||
-rw-r--r-- | python/fatcat_web/templates/release_search.html | 77 |
5 files changed, 137 insertions, 81 deletions
diff --git a/python/fatcat_web/entity_helpers.py b/python/fatcat_web/entity_helpers.py index b36307a1..d6a6eb26 100644 --- a/python/fatcat_web/entity_helpers.py +++ b/python/fatcat_web/entity_helpers.py @@ -3,7 +3,7 @@ from flask import abort from fatcat_client.rest import ApiException from fatcat_tools.transforms import * from fatcat_web import app, api -from fatcat_web.search import get_elastic_container_stats +from fatcat_web.search import get_elastic_container_stats, get_elastic_container_random_releases from fatcat_web.hacks import strip_extlink_xml, wayback_suffix def enrich_container_entity(entity): @@ -12,12 +12,13 @@ def enrich_container_entity(entity): if entity.state == "active": entity._es = container_to_elasticsearch(entity, force_bool=False) entity._stats = None - if entity.issnl: - try: - entity._stats = get_elastic_container_stats(entity.ident, issnl=entity.issnl) - except Exception as e: - app.log.error(e) - pass + try: + entity._stats = get_elastic_container_stats(entity.ident, issnl=entity.issnl) + #if entity._stats['total'] > 0: + entity._random_releases = get_elastic_container_random_releases(entity.ident) + except Exception as e: + app.log.error(e) + pass return entity def enrich_creator_entity(entity): diff --git a/python/fatcat_web/search.py b/python/fatcat_web/search.py index 446a851a..94246329 100644 --- a/python/fatcat_web/search.py +++ b/python/fatcat_web/search.py @@ -6,6 +6,7 @@ the formal API) TODO: ELASTICSEARCH_*_INDEX should probably be factored out and just hard-coded """ +import datetime import requests from flask import abort, flash from fatcat_web import app @@ -242,3 +243,45 @@ def get_elastic_container_stats(ident, issnl=None): } return stats + +def get_elastic_container_random_releases(ident, limit=5): + """ + Returns a list of releases from the container. + """ + + assert limit > 0 and limit <= 100 + + query = { + "size": int(limit), + "sort": [ + { "in_web": {"order": "desc"} }, + { "release_date": {"order": "desc"} }, + ], + "query": { + "bool": { + "must": [ + { "term": { "container_id": ident } }, + { "range": { "release_year": { "lte": datetime.datetime.today().year } } }, + ], + }, + }, + } + resp = requests.get( + "{}/fatcat_release/_search".format(app.config['ELASTICSEARCH_BACKEND']), + json=query, + params=dict(request_cache="true")) + # TODO: abort() + #print(resp.json()) + resp.raise_for_status() + resp = resp.json() + print(resp) + hits = [h['_source'] for h in resp['hits']['hits']] + for h in hits: + # Handle surrogate strings that elasticsearch returns sometimes, + # probably due to mangled data processing in some pipeline. + # "Crimes against Unicode"; production workaround + for key in h: + if type(h[key]) is str: + h[key] = h[key].encode('utf8', 'ignore').decode('utf8') + + return hits diff --git a/python/fatcat_web/templates/container_view.html b/python/fatcat_web/templates/container_view.html index c2731db2..ac304e95 100644 --- a/python/fatcat_web/templates/container_view.html +++ b/python/fatcat_web/templates/container_view.html @@ -33,6 +33,12 @@ </div> </div> </form> + +{% if container._random_releases %} +<h3>Example Publications</h3> +{% for random_release in container._random_releases %} + {{ entity_macros.release_search_result_row(random_release) }} +{% endfor %} {% endif %} </div> diff --git a/python/fatcat_web/templates/entity_macros.html b/python/fatcat_web/templates/entity_macros.html index 0e3943dd..6124630c 100644 --- a/python/fatcat_web/templates/entity_macros.html +++ b/python/fatcat_web/templates/entity_macros.html @@ -144,3 +144,80 @@ </div> </form> {%- endmacro %} + +{% macro release_search_result_row(paper) -%} +<div> + <h4 style="margin-top: 1em; margin-bottom: 0px; font-size: 1.1em;"> + <a href="/release/{{ paper.ident }}" style="color: #2224c7;"> + {% if paper.title %} + {{ paper.title[:512] }} + {% if paper.title|length > 512 %}...{% endif %} + {% else %} + [blank] + {% endif %} + </a> + </h4> + {% if paper.best_pdf_url %} + <div style="float: right; padding: 4px;"> + <a href="{{ paper.best_pdf_url }}" class="ui violet tag label"><i class="file icon"></i>fulltext</a> + </div> + {% endif %} + {# + <h5 style="margin-top: 4px; margin-bottom: 4px; font-size: 1em;">{{ ", ".join(paper.contrib_names[:12]) }} + {% if paper.contrib_names|length > 12 %}<i>(+{{ paper.contrib_names|length - 12 }} others)</i>{% endif %} + </h5> + #} + {% if paper.contrib_names %} + <div style="margin-top: 0px; margin-bottom: 0px; font-size: 1em;"> + <b> + {{ ", ".join(paper.contrib_names[:12]) }} + {% if paper.contrib_names|length > 12 %}<i>(+{{ paper.contrib_names|length - 12 }} others)</i>{% endif %} + </b> + </div> + {% endif %} + {% if paper.release_year %} + {{ paper.release_year }} + {% endif %} + {% if paper.release_type %} + {% if paper.release_type in ("article-journal", "paper-conference") %} + <span class="ui black basic label small">{{ paper.release_type }}</span> + {% elif paper.release_type in ("book") %} + <span class="ui brown basic label small">{{ paper.release_type }}</span> + {% else %} + <span class="ui grey basic label small">{{ paper.release_type }}</span> + {% endif %} + {% endif %} + {% if paper.withdrawn_status %} + <span class="ui red label small">{{ paper.withdrawn_status }}</span> + {% endif %} + {% if paper.release_stage and paper.release_stage != "published" %} + <span class="ui pink basic label small">{{ paper.release_stage }}</span> + {% elif not paper.release_stage %} + <span class="ui red basic label small">unknown</span> + {% endif %} + {% if paper.container_name %} + {% if paper.container_id %} + <a href="/container/{{ paper.container_id }}" style="color: black;">{{ paper.container_name }}</a> + {% else %} + {{ paper.container_name }} + {% endif %} + {% if paper.container_is_oa %}<i class="icon unlock orange small"></i>{% endif %} + {% endif %} + {% if paper.doi or paper.pmid or paper.arxiv_id or paper.jstor_id %} + <br> + {% endif %} + {% if paper.doi %} + <a href="https://doi.org/{{paper.doi }}" style="color: green;">doi:{{ paper.doi }}</a> + {% endif %} + {% if paper.pmid %} + <a href="https://www.ncbi.nlm.nih.gov/pubmed/{{paper.pmid }}" style="color: green;">pmid:{{ paper.pmid }}</a> + {% endif %} + {% if paper.arxiv_id %} + <a href="https://arxiv.org/abs/{{paper.arxiv_id }}" style="color: green;">arXiv:{{ paper.arxiv_id }}</a> + {% endif %} + {% if False %} {# XXX: elastic release work grouping searches #} + <br> + <a href="/work/{{ paper.work_id }}"><i class="sitemap icon"></i> and 5 other versions of the same work!</a> + {% endif %} +</div> +{% endmacro %} diff --git a/python/fatcat_web/templates/release_search.html b/python/fatcat_web/templates/release_search.html index 59411c62..7d6b0443 100644 --- a/python/fatcat_web/templates/release_search.html +++ b/python/fatcat_web/templates/release_search.html @@ -1,3 +1,4 @@ +{% import "entity_macros.html" as entity_macros %} {% extends "base.html" %} {% block title %} @@ -8,6 +9,7 @@ {% endif %} {% endblock %} + {% block fullmain %} <div class="ui vertical stripe segment" style="background-color: #EEE; padding-top: 4.5em;"> @@ -36,80 +38,7 @@ {% if found.results %} <i>Showing top {{ found.count_returned }} out of {{ found.count_found }} results for: <code>{{ found.query.q }}</code></i> {% for paper in found.results %} -<div> - <h4 style="margin-top: 1em; margin-bottom: 0px; font-size: 1.1em;"> - <a href="/release/{{ paper.ident }}" style="color: #2224c7;"> - {% if paper.title %} - {{ paper.title[:512] }} - {% if paper.title|length > 512 %}...{% endif %} - {% else %} - [blank] - {% endif %} - </a> - </h4> - {% if paper.best_pdf_url %} - <div style="float: right; padding: 4px;"> - <a href="{{ paper.best_pdf_url }}" class="ui violet tag label"><i class="file icon"></i>fulltext</a> - </div> - {% endif %} - {# - <h5 style="margin-top: 4px; margin-bottom: 4px; font-size: 1em;">{{ ", ".join(paper.contrib_names[:12]) }} - {% if paper.contrib_names|length > 12 %}<i>(+{{ paper.contrib_names|length - 12 }} others)</i>{% endif %} - </h5> - #} - {% if paper.contrib_names %} - <div style="margin-top: 0px; margin-bottom: 0px; font-size: 1em;"> - <b> - {{ ", ".join(paper.contrib_names[:12]) }} - {% if paper.contrib_names|length > 12 %}<i>(+{{ paper.contrib_names|length - 12 }} others)</i>{% endif %} - </b> - </div> - {% endif %} - {% if paper.release_year %} - {{ paper.release_year }} - {% endif %} - {% if paper.release_type %} - {% if paper.release_type in ("article-journal", "paper-conference") %} - <span class="ui black basic label small">{{ paper.release_type }}</span> - {% elif paper.release_type in ("book") %} - <span class="ui brown basic label small">{{ paper.release_type }}</span> - {% else %} - <span class="ui grey basic label small">{{ paper.release_type }}</span> - {% endif %} - {% endif %} - {% if paper.withdrawn_status %} - <span class="ui red label small">{{ paper.withdrawn_status }}</span> - {% endif %} - {% if paper.release_stage and paper.release_stage != "published" %} - <span class="ui pink basic label small">{{ paper.release_stage }}</span> - {% elif not paper.release_stage %} - <span class="ui red basic label small">unknown</span> - {% endif %} - {% if paper.container_name %} - {% if paper.container_id %} - <a href="/container/{{ paper.container_id }}" style="color: black;">{{ paper.container_name }}</a> - {% else %} - {{ paper.container_name }} - {% endif %} - {% if paper.container_is_oa %}<i class="icon unlock orange small"></i>{% endif %} - {% endif %} - {% if paper.doi or paper.pmid or paper.arxiv_id or paper.jstor_id %} - <br> - {% endif %} - {% if paper.doi %} - <a href="https://doi.org/{{paper.doi }}" style="color: green;">doi:{{ paper.doi }}</a> - {% endif %} - {% if paper.pmid %} - <a href="https://www.ncbi.nlm.nih.gov/pubmed/{{paper.pmid }}" style="color: green;">pmid:{{ paper.pmid }}</a> - {% endif %} - {% if paper.arxiv_id %} - <a href="https://arxiv.org/abs/{{paper.arxiv_id }}" style="color: green;">arXiv:{{ paper.arxiv_id }}</a> - {% endif %} - {% if False %} {# XXX: elastic release work grouping searches #} - <br> - <a href="/work/{{ paper.work_id }}"><i class="sitemap icon"></i> and 5 other versions of the same work!</a> - {% endif %} -</div> + {{ entity_macros.release_search_result_row(paper) }} {% endfor %} {% if found.results|length > 8 %} <br> |