Start move to FastAPI

This commit is contained in:
april
2023-12-20 09:51:50 -06:00
parent 1f275ec195
commit f8ecc028c7
9 changed files with 469 additions and 219 deletions

View File

@@ -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)