-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.py
More file actions
36 lines (25 loc) · 1.07 KB
/
server.py
File metadata and controls
36 lines (25 loc) · 1.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from flask import Flask, jsonify
from flask.wrappers import Response
from flask_pydantic import validate
from app.app import get_item_listing
from app.types import BaseQueryModel, CronQueryModel, DatetimeQueryModel
from config import config
from json_feed.types import JsonFeedTopLevel
app: Flask = Flask(import_name=__name__)
app.config.update({"JSONIFY_MIMETYPE": "application/feed+json"})
def generate_response(query: BaseQueryModel) -> Response:
config.logger.debug(msg=query) # log values
output: JsonFeedTopLevel = get_item_listing(query)
return jsonify(output)
# handle a single journey
@app.route(rule="/", methods=["GET"])
@app.route(rule="/journey", methods=["GET"])
@validate(response_by_alias=True)
def process_listing(query: DatetimeQueryModel) -> Response:
return generate_response(query)
# handle repeated journeys using a cron schedule expression
@app.route(rule="/cron", methods=["GET"])
@validate(response_by_alias=True)
def process_cron(query: CronQueryModel) -> Response:
return generate_response(query)
app.run(host="0.0.0.0", use_reloader=False)