summaryrefslogtreecommitdiffstats
path: root/fatcat_scholar/web.py
Commit message (Collapse)AuthorAgeFilesLines
* web: remove remaining async endpoints with template renderingBryan Newbold2022-08-121-6/+6
| | | | | | | | This makes all remaining HTML endpoints (which use jinja templates) synchronous, not async, meaning they render in a threadpool. This is a sanity change to reduce the chance of hard-to-debug concurrency issues with i18n and jinja2 templates.
* lint: f-string used where it didn't need to beBryan Newbold2022-08-121-1/+1
|
* web: refactor i18n template loadingBryan Newbold2022-08-121-72/+9
| | | | | | | | | | | | | | | This is an attempt to fix a bug with random HTML template escapes in production. I believe these are being caused by cross-request contamination of template state due to using globals to hold on to per-language jinja2 templates. I originally thought this might be a bug in the jinja2 i18n extension itself, and there may still be concurrency concerns there, but it seems like the proximal cause is the use of globals. This change probably has a negative performance impact, because the jinja2 environment is re-created on every request (though babel files are not reloaded on every request).
* start moving I18N language options to config fileBryan Newbold2022-08-121-20/+0
|
* rename fatcat_scholar.hacks to fatcat_scholar.web_hacksBryan Newbold2022-08-121-1/+1
|
* polish RSS feed generation, and add basic test coverageBryan Newbold2022-04-061-60/+62
|
* small tweaks to RSS feedBryan Newbold2022-03-251-1/+3
|
* initial implementation of RSS search feedsBryan Newbold2022-03-251-0/+59
| | | | UI integration needs work
* i18n templates are a global, so capitalizeBryan Newbold2022-03-011-8/+8
|
* web: update docs for LangPrefixBryan Newbold2022-01-111-4/+6
|
* codespell fixesBryan Newbold2021-11-241-1/+1
|
* make fmt (black 21.9b0)Bryan Newbold2021-10-271-7/+19
|
* re-style imports (isort) on all core python filesBryan Newbold2021-10-271-16/+15
|
* mark TODOs inlineBryan Newbold2021-10-121-0/+2
|
* web: access_redirect_fallback mechanismBryan Newbold2021-07-261-66/+160
| | | | | | | | | | | | This adds a helper code path that "tries harder" to find an access link, by querying the fatcat API directly to look for any file from any release associated with the work. If it finds a match, it does the redirect as usual (but does log the incident). If no match can be found, there is now a more helpful access-specific 404 error page. If the *work* is a 404, the generic error page is shown.
* update access redirect URL endpointsBryan Newbold2021-06-111-32/+51
|
* lint: ignore mypy on some template importsBryan Newbold2021-06-021-2/+2
|
* web: fixes to access redirect endpointsBryan Newbold2021-05-191-1/+6
|
* enable Greek (el) translation (still partial)Bryan Newbold2021-05-181-0/+1
|
* iterate on PDF redirect linksBryan Newbold2021-05-171-31/+34
|
* enable initial Korean (ko) web interface translationBryan Newbold2021-04-301-0/+1
|
* web: sitemap.xml servingBryan Newbold2021-04-291-0/+6
|
* iterate on access redirects and landing page implementationBryan Newbold2021-04-271-0/+1
| | | | Small code refactors and minimal test coverage
* web: initial implementation of work landing page and citation_pdf_url access ↵Bryan Newbold2021-04-231-2/+90
| | | | | | | | | | | | redirect The initial intent is to have something that can be used by indexing services to pull the citation_pdf_url meta tag and bounce to a direct IA PDF access URL. For now the landing page stubs are just formatted as SERP results. Presumbably these will get re-styled at some point and include citation graph links, etc.
* change health check from .exists(index) to .mapping(index)Bryan Newbold2021-04-061-2/+2
| | | | | | | | | | | | In cases where the cluser leader node is unavilable, the health check was returning false even when the local node had full shard replicas and could return requests. A refinement of this change would be to use the /<index>/_count API endpoint to ensure that the "failed" and "skipped" shard numbers are 0 (aka, "successful == total"). However, not sure where that endpoint is exposed in the elasticsearch-py API. the CatClient method doesn't seem right.
* make fmtBryan Newbold2021-03-291-1/+10
|
* don't use async endpoints for sync implementationsBryan Newbold2021-03-291-3/+3
| | | | | | | | | | Embarassingly, I didn't know this was an option in FastAPI! Knew that running `await` on a function that was internally doing blocking calls was really bad, but didn't know the framework had such a simple way to avoid the problem. This significantly resolves operational concerns with the current service.
* web and API health check endpointBryan Newbold2021-03-291-4/+6
| | | | | | Because scholar is primarily a search service, the endpoint does a pass-through health check to the elasticsearch backend (aka, es-public-proxy).
* web: small typosBryan Newbold2021-03-251-2/+14
| | | | Thanks for catching these gio
* implement additional translation languagesBryan Newbold2021-03-231-1/+14
|
* update to v0.2.0v0.2.0Bryan Newbold2021-03-231-1/+1
|
* web: respond to HTTP HEAD / (for uptime monitoring)Bryan Newbold2021-03-051-0/+7
| | | | | Proper HTTP HEAD support for all endpoints would be better, but don't want to break CORS stuff by hacking it.
* Revert undesirable changesChristian Clauss2021-02-231-4/+4
|
* Modernize Python syntax with pyupgrade --py38-plus **/*.pyChristian Clauss2021-02-231-4/+4
|
* fmt and lint fixes (including one actual bug)Bryan Newbold2021-02-151-2/+2
|
* allow simple GET CORS requestsBryan Newbold2021-02-111-0/+9
|
* api: handle null 'q' parameter on search endpointBryan Newbold2021-02-111-0/+2
|
* i18n: use babel.numbers.format_number() in web interfaceBryan Newbold2021-01-251-0/+2
|
* revert jinja2 i18n trimmed flag (not correct place)Bryan Newbold2021-01-221-2/+0
| | | | | This doesn't seem to be the right place to add this field, getting a type checking warning.
* jinja2: attempt to enable trans trimming by defaultBryan Newbold2021-01-221-0/+2
| | | | Not sure this is actually working
* add citation query feature (disabled by default)Bryan Newbold2021-01-191-3/+3
| | | | | | This is operationally complex (queries hit 3x backend services!), so not enabled by default. Will need more testing; possibly circuit-breaking. Though haproxy should provide some of that automatically at this point.
* lint: fix small bugs and type annotationsBryan Newbold2021-01-181-3/+3
|
* make fmtBryan Newbold2021-01-151-8/+13
|
* api: fix /search test, and mypy error on implementationBryan Newbold2021-01-151-11/+11
|
* api: add type annotations for /search responseBryan Newbold2021-01-141-4/+29
|
* fastapi: /favicon.ico handlerBryan Newbold2021-01-141-1/+5
| | | | | | | HTML responses in the browser should use the indicated path (/static/ia-favicon.ico), but some other responses fall through (like API docs, I think? or unhandled exceptions), so giving up and just handling this route. haproxy should cache if it gets lots of hits.
* fastapi: add basic error/exception handler and pageBryan Newbold2021-01-141-1/+30
|
* i18n: add web interface support for 'hr' (Croatian)Bryan Newbold2020-11-181-1/+1
| | | | Thanks to @milotype for starting this new translation on weblate!
* web: fix ngettext() i18n wrapperBryan Newbold2020-11-051-2/+2
|
* web: fix lang detection (include 'en')Bryan Newbold2020-10-281-1/+1
| | | | | If a user had any non-english language preference, was defaulting to that, even if 'en' had higher preference.