# uvicorn main:app --host=127.0.0.1 --port=8000 --reload from config.config import settings from fastapi import Depends, FastAPI, BackgroundTasks, Request from dependencies import get_query_token, get_token_header # from routers import items, users # from internal import admin from ops.common import common from ops.deploy import deploy from typing import Optional from scripts.common.redis import get_redis_pool import pdb from fastapi.logger import logger as fastapi_logger import logging tags_metadata = [ # { # "name": "common", # "description": "Operations with users. The **login** logic is also here.", # }, { "name": "common", "description": "Manage items. So _fancy_ they have their own docs.", "externalDocs": { "description": "Items external docs", "url": "https://fastapi.tiangolo.com/", }, }, ] app_log = None root = None LOGGING_CONFIG = { "version": 1, "disable_existing_loggers": False, "formatters": { "default": { "()": "uvicorn.logging.DefaultFormatter", "fmt": "%(asctime)s %(levelname)s %(name)s %(processName)s.%(threadName)s[%(process)d.%(thread)d]: %(message)s", "use_colors": None, }, "access": { "()": "uvicorn.logging.AccessFormatter", "fmt": '%(asctime)s %(levelname)s %(name)s %(processName)s.%(threadName)s[%(process)d.%(thread)d]: %(client_addr)s - "%(request_line)s" %(status_code)s', }, }, "handlers": { "default": { "formatter": "default", "class": "logging.StreamHandler", "stream": "ext://sys.stderr", }, "access": { "formatter": "access", "class": "logging.StreamHandler", "stream": "ext://sys.stdout", }, }, "loggers": { "": {"handlers": ["default"], "level": "INFO"}, "uvicorn.error": {"level": "INFO"}, "uvicorn.access": {"handlers": ["access"], "level": "INFO", "propagate": False}, }, } def init_log(): if settings.is_debug: LOGGING_CONFIG["loggers"] = { "": {"handlers": ["default"], "level": "DEBUG"}, "uvicorn.error": {"level": "DEBUG"}, "uvicorn.access": {"handlers": ["access"], "level": "DEBUG", "propagate": False}, } return LOGGING_CONFIG def create_app(): application = FastAPI(dependencies=[Depends(get_token_header)], openapi_tags=tags_metadata) application.include_router(common.router, prefix="/common") application.include_router(deploy.router, prefix="/deploy") init_log() return application app = create_app() @app.on_event("startup") async def startup_event(): app.state.redis = await get_redis_pool() @app.on_event("shutdown") async def shutdown_event(): app.state.redis.close() await app.state.redis.wait_close() @app.get("/") async def root(request: Request): redis_client = request.app.state.redis keys = await redis_client.get("online_devices") app_log.info("get keys was {0} with {1}".format(keys, request.url)) if keys: return {"message": "Hello Bigger Applications! {}".format(keys)} else: return {"message": "kajsk"} def write_log(message: str) -> True: with open("log.txt", mode="a") as log: log.write(message) return True def get_query(background_tasks: BackgroundTasks, q: Optional[str] = None): if q: message = f"found query:{q}\n" background_tasks.add_task(write_log, message) return q @app.post("/send-notification/{email}") async def send_notification(request: Request, email: str, background_tasks: BackgroundTasks, q: str = Depends(get_query)): # pdb.set_trace() redis_client = request.app.state.redis keys = await redis_client.get("online_devices") # print(keys) message = f"message to {email} \n" background_tasks.add_task(write_log, message) return {"message": "Message sent"} if __name__ == '__main__': import uvicorn uvicorn.run(app='main:app', host="127.0.0.1", port=8010, reload=True, debug=True, log_config=LOGGING_CONFIG)