Select Git revision

Arkhangelskiy, Timofey authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
main.py 2.50 KiB
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
from common.query_parser import QueryParser
from common.enums import *
from common.diagnostics import Diagnostic
from common.config import ResourceConfig
import json
import os
import re
import uvicorn
rxExt = re.compile('\\.[^.]*$')
app = FastAPI()
app.mount('/static', StaticFiles(directory='static'), name='static')
templates = Jinja2Templates(directory='static')
app.qp = QueryParser()
app.configs = {}
i = 0
for fname in os.listdir('config'):
if not fname.lower().endswith('.json'):
continue
i += 1
fnameFull = os.path.join('config', fname)
fnameNoExt = rxExt.sub('', fname)
app.configs[fnameNoExt] = ResourceConfig(fnameFull)
@app.get('/')
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'
)
):
diagnostics = app.qp.validate_query(operation, version, queryType, query,
xFcsEndpointDescription, xFcsContext,
xFcsDataviews, xFcsRewritesAllowed)
if any(d.is_fatal() for d in diagnostics):
return '\n'.join(str(d) for d in diagnostics)
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',
host='0.0.0.0',
port=5000,
reload=True
)