diff --git a/.gitignore b/.gitignore index 768f3c4a7c141002b7c2b628be09d8c9154552e4..2c997de6baa6fba62d14427e943e0797ad56e023 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,7 @@ docs/_build *.rar *.gz *.docx +*.pdf *.min.css.map *.min.js.map query_log.txt \ No newline at end of file diff --git a/main.py b/main.py index 71ae75dafd0ea60a0795bb54e65755c5c77c0c1e..7ecba967c217433e15941e96e0ac8d6f632186aa 100644 --- a/main.py +++ b/main.py @@ -1,10 +1,34 @@ -from fastapi import FastAPI, Request +from fastapi import FastAPI, Request, Query from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates from fastapi.encoders import jsonable_encoder from fastapi.responses import JSONResponse import json import uvicorn +from enum import Enum + + +class CorpPlatform(str, Enum): + tsakorpus = 'tsakorpus' + annis = 'annis' + litterae = 'litterae' + + +class Operation(str, Enum): + explain = 'explain' + searchRetrieve = 'searchRetrieve' + scan = 'scan' + + +class SRUVersion(str, Enum): + v1_2 = '1.2' + v2_0 = '2.0' + + +class QueryType(str, Enum): + # Query language (parameter used since SRU 2.0) + fcs = 'fcs' + cql = 'cql' # Contextual Query Language; default app = FastAPI() @@ -17,6 +41,40 @@ def root(): return {"message": "Hello World"} +@app.get('/fcs-endpoint/{platform}/{corpusID}') +def endpoint( + platform: CorpPlatform, + corpusID: str, + operation: Operation = Operation.explain, + version: SRUVersion = SRUVersion.v2_0, + queryType: QueryType = QueryType.fcs, + query: str = '', + xFcsEndpointDescription: str = Query( + default='', + alias='x-fcs-endpoint-description' + ), + xFcsContext: str = Query( + default='', + alias='x-fcs-context' + ), + xFcsDataviews: str = Query( + default='', + alias='x-fcs-dataviews' + ), + xFcsRewritesAllowed: str = Query( + default='', + alias='x-fcs-rewrites-allowed' + ) + ): + if platform == CorpPlatform.annis: + return {'platform': 'annis', 'operation': operation, 'version': version} + elif platform == CorpPlatform.litterae: + return {'platform': 'litterae', 'operation': operation, 'version': version} + elif platform == CorpPlatform.tsakorpus: + return {'platform': 'tsakorpus', 'operation': operation, 'version': version} + return + + if __name__ == '__main__': uvicorn.run( 'main:app', diff --git a/notes.txt b/notes.txt new file mode 100644 index 0000000000000000000000000000000000000000..689cfb4b2a2385259d2f4fb0f3797bb89d1c8ac7 --- /dev/null +++ b/notes.txt @@ -0,0 +1,3 @@ +p. 10: "Send explain request without version and operation parameter" -- but an explain request has to have the operation parameter with 'explain' as its value + +p. 14: x-cmd-resource-info parameter present in the query example, but never explained (mentioned in some 2013 slides on FCS; should now probably be x-fcs-endpoint-description) \ No newline at end of file diff --git a/static/gitkeep b/static/gitkeep new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391