Start move to FastAPI
This commit is contained in:
82
api/app.py
82
api/app.py
@@ -2,66 +2,58 @@ import json
|
||||
import os
|
||||
from datetime import timedelta, datetime, timezone
|
||||
|
||||
from flask import Flask
|
||||
import uvicorn
|
||||
|
||||
from fastapi import FastAPI
|
||||
|
||||
from mongoengine import connect
|
||||
from flask_jwt_extended import create_access_token, get_jwt, get_jwt_identity, JWTManager
|
||||
|
||||
from routes.flights import flights_api
|
||||
from routes.users import users_api
|
||||
from routes.utils import create_admin_user
|
||||
from database.utils import create_admin_user
|
||||
|
||||
# Initialize Flask app
|
||||
api = Flask(__name__)
|
||||
|
||||
# Register route blueprints
|
||||
api.register_blueprint(users_api)
|
||||
api.register_blueprint(flights_api)
|
||||
app = FastAPI()
|
||||
|
||||
# Set JWT key from environment variable
|
||||
try:
|
||||
api.config["JWT_SECRET_KEY"] = os.environ["TAILFIN_DB_KEY"]
|
||||
except KeyError:
|
||||
api.logger.error("Please set 'TAILFIN_DB_KEY' environment variable")
|
||||
exit(1)
|
||||
# try:
|
||||
# app.config["JWT_SECRET_KEY"] = os.environ["TAILFIN_JWT_KEY"]
|
||||
# except KeyError:
|
||||
# app.logger.error("Please set 'TAILFIN_JWT_KEY' environment variable")
|
||||
# exit(1)
|
||||
|
||||
# Set JWT keys to expire after 1 hour
|
||||
api.config["JWT_ACCESS_TOKEN_EXPIRES"] = timedelta(hours=1)
|
||||
# app.config["JWT_ACCESS_TOKEN_EXPIRES"] = timedelta(hours=1)
|
||||
|
||||
# Initialize JWT manager
|
||||
jwt = JWTManager(api)
|
||||
# jwt = JWTManager(app)
|
||||
|
||||
# Connect to MongoDB
|
||||
connect('tailfin')
|
||||
|
||||
|
||||
@api.after_request
|
||||
def refresh_expiring_jwts(response):
|
||||
"""
|
||||
Refresh/reissue JWTs that are near expiry following each request containing a JWT
|
||||
|
||||
:param response: Response given by previous request
|
||||
:return: Original response with refreshed JWT
|
||||
"""
|
||||
try:
|
||||
exp_timestamp = get_jwt()["exp"]
|
||||
now = datetime.now(timezone.utc)
|
||||
target_timestamp = datetime.timestamp(now + timedelta(minutes=30))
|
||||
if target_timestamp > exp_timestamp:
|
||||
api.logger.info("Refreshing expiring JWT")
|
||||
access_token = create_access_token(identity=get_jwt_identity())
|
||||
data = response.get_json()
|
||||
if type(data) is dict:
|
||||
data["access_token"] = access_token
|
||||
response.data = json.dumps(data)
|
||||
return response
|
||||
except (RuntimeError, KeyError):
|
||||
# No valid JWT, return original response
|
||||
api.logger.info("No valid JWT, cannot refresh expiry")
|
||||
return response
|
||||
|
||||
|
||||
|
||||
# @app.after_request
|
||||
# def refresh_expiring_jwts(response):
|
||||
# """
|
||||
# Refresh/reissue JWTs that are near expiry following each request containing a JWT
|
||||
#
|
||||
# :param response: Response given by previous request
|
||||
# :return: Original response with refreshed JWT
|
||||
# """
|
||||
# try:
|
||||
# exp_timestamp = get_jwt()["exp"]
|
||||
# now = datetime.now(timezone.utc)
|
||||
# target_timestamp = datetime.timestamp(now + timedelta(minutes=30))
|
||||
# if target_timestamp > exp_timestamp:
|
||||
# app.logger.info("Refreshing expiring JWT")
|
||||
# access_token = create_access_token(identity=get_jwt_identity())
|
||||
# data = response.get_json()
|
||||
# if type(data) is dict:
|
||||
# data["access_token"] = access_token
|
||||
# response.data = json.dumps(data)
|
||||
# return response
|
||||
# except (RuntimeError, KeyError):
|
||||
# # No valid JWT, return original response
|
||||
# app.logger.info("No valid JWT, cannot refresh expiry")
|
||||
# return response
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
@@ -69,4 +61,4 @@ if __name__ == '__main__':
|
||||
create_admin_user()
|
||||
|
||||
# Start the app
|
||||
api.run()
|
||||
uvicorn.run("fastapi_code:app", reload=True)
|
||||
|
Reference in New Issue
Block a user