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