Skip to content

Commit

Permalink
Merge pull request #1181 from curiefense/fastapi-confserver-no-cache
Browse files Browse the repository at this point in the history
Fastapi confserver no cache
  • Loading branch information
Tzury Bar Yochay committed Mar 7, 2023
2 parents e448bf3 + d473c4a commit 52fb0a0
Show file tree
Hide file tree
Showing 8 changed files with 915 additions and 783 deletions.
1 change: 1 addition & 0 deletions curiefense/curieconf/server/app/main.py
Expand Up @@ -2,6 +2,7 @@
from curieconf.confserver.backend import Backends
import os


app.backend = Backends.get_backend(app, "git:///cf-persistent-config/confdb")
options = {}
val = os.environ.get("CURIECONF_TRUSTED_USERNAME_HEADER", None)
Expand Down
66 changes: 48 additions & 18 deletions curiefense/curieconf/server/curieconf/confserver/__init__.py
@@ -1,24 +1,53 @@
#! /usr/bin/env python3

import json
import os
import flask
from flask import Flask, current_app

from .backend import Backends
import uvicorn
import logging
from curieconf.confserver.v3 import api

from fastapi import FastAPI, Request, HTTPException
from fastapi.exceptions import RequestValidationError
from fastapi.responses import PlainTextResponse
from prometheus_fastapi_instrumentator import Instrumentator
from werkzeug.exceptions import HTTPException as WerkzeugHTTPException

app = FastAPI(docs_url=os.environ.get("SWAGGER_BASE_PATH", "/api/v3/"))
app.include_router(api.router)

from flask_cors import CORS
from prometheus_flask_exporter import PrometheusMetrics

@app.on_event("startup")
async def startup():
Instrumentator().instrument(app).expose(app)


## Import all versions
from .v3 import api as api_v3

app = Flask(__name__)
logging.basicConfig(
handlers=[logging.FileHandler("fastapi.log"), logging.StreamHandler()],
level=logging.INFO,
format="[%(asctime)s] {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s",
datefmt="%H:%M:%S",
)
logger = logging.getLogger("filters-maxmind")

CORS(app, resources={r"/*": {"origins": "*"}})

app.register_blueprint(
api_v3.api_bp, url_prefix=os.environ.get("SWAGGER_BASE_PATH", "/api/v3")
)
@app.exception_handler(RequestValidationError)
async def validation_exception_handler(request: Request, exc: RequestValidationError):
return PlainTextResponse(str(exc), status_code=409)


# this is catching flasks' "abort" from the gitbackend
@app.exception_handler(WerkzeugHTTPException)
async def werkzeug_exception_handler(request: Request, exc: WerkzeugHTTPException):
return PlainTextResponse(str(exc), status_code=exc.code)


@app.exception_handler(HTTPException)
async def http_exception_exception_handler(request: Request, exc: HTTPException):
return PlainTextResponse(str(exc.detail), status_code=exc.status_code)


def drop_into_pdb(app, exception):
Expand Down Expand Up @@ -58,16 +87,17 @@ def main(args=None):

options = parser.parse_args(args)

if options.pdb:
flask.got_request_exception.connect(drop_into_pdb)

metrics = PrometheusMetrics(app)
# TODO - find replacements for got_request_exception and prometheus_flask_exporter
# if options.pdb:
# flask.got_request_exception.connect(drop_into_pdb)
# metrics = PrometheusMetrics(app)

try:
with app.app_context():
current_app.backend = Backends.get_backend(app, options.dbpath)
current_app.options = options.__dict__
app.run(debug=options.debug, host=options.host, port=options.port)
app.backend = Backends.get_backend(app, options.dbpath)
app.options = options.__dict__
uvicorn.run(app, host=options.host, port=options.port)

# app.run(debug=options.debug, host=options.host, port=options.port)
finally:
pass

Expand Down
Expand Up @@ -376,9 +376,7 @@ def configs_update(self, config, data, actor=CURIE_AUTHOR):
if docname in addd:
doc = self.update_doc(doc, addd[docname])
if docname in deld:
deleid = {
eid for eid, val in deld[docname].items() if val is True
}
deleid = {entry["id"] for entry in deld[docname]}
doc = [entry for entry in doc if entry["id"] not in deleid]
self.add_document(docname, doc)
self.commit("Update config [%s]%s" % (config, renamed), actor=actor)
Expand Down

0 comments on commit 52fb0a0

Please sign in to comment.