From 680d244a98b2a2b2d6b4ce4d020c46b748dab7bf Mon Sep 17 00:00:00 2001 From: Timofey Arkhangelskiy <timarkh@gmail.com> Date: Fri, 2 Dec 2022 23:05:43 +0100 Subject: [PATCH] Introduce all necessary paths, parameters and enumerators --- .gitignore | 1 + main.py | 60 +++++++++++++++++++++++++++++++++++++++++++++++++- notes.txt | 3 +++ static/gitkeep | 0 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 notes.txt create mode 100644 static/gitkeep diff --git a/.gitignore b/.gitignore index 768f3c4..2c997de 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 71ae75d..7ecba96 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 0000000..689cfb4 --- /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 0000000..e69de29 -- GitLab