main.py 2.31 KB
import re
import logging

from typing import Any, Union

from fastapi import FastAPI
from fastapi.middleware import Middleware
from starlette.responses import JSONResponse
from starlette.requests import HTTPConnection, Request

from starlette_context import context, plugins
from starlette_context.middleware import RawContextMiddleware

from starlette.middleware import Middleware
from starlette_caches.middleware import CacheMiddleware
from starlette_caches.rules import Rule

from presupuestov1 import cache, metrics
from presupuestov1.routers import (
    project,
    entity,
    classifier,
    classifier_income,
    daily,
    search,
    private_metrics,
)


app = FastAPI(
    title='MEFP presupuestosv1 API',
    middleware=[
        Middleware(
            RawContextMiddleware,
            plugins=(
                plugins.RequestIdPlugin(),
            )
        ),
        Middleware(
            CacheMiddleware,
            cache=cache.cache,
            rules=[
                Rule(match=re.compile(r"^/api/_metrics/.*"), ttl=0),
                Rule(match=re.compile(r"^/api/search/.*"), ttl=0),
                Rule(match=re.compile(r"^/api/programa_proyecto/.*"), ttl=0),
                Rule(match=re.compile(r'^/api/.+'), ttl=86400, status=200),
            ],
        ),
    ],
    root_path='/prespuesto/api'
)

app.include_router(entity.router_entidad)
app.include_router(entity.router_ubigeo)
app.include_router(entity.router_da)
app.include_router(classifier.router_objeto)
app.include_router(classifier.router_acteco)
app.include_router(classifier.router_finfun)
app.include_router(classifier_income.router_rubro)
app.include_router(classifier_income.router_organismo)
app.include_router(project.router)
# app.include_router(daily.router)
app.include_router(search.router)
app.include_router(private_metrics.router)

metrics.install(app)


# @app.on_event('startup')
# async def startup_event():
#     caches.set_config({
#         'default': {
#             'cache': 'aiocache.SimpleMemoryCache',
#             'serializer': {
#                 'class': 'aiocache.serializers.StringSerializer' # Cache raw text
#             }
#         }
#     })
#
# @app.on_event('shutdown')
# async def shutdown_event():
#     default_cache = caches.get('default')
#     if hasattr(default_cache, 'close'):
#         await default_cache.close()