From d53256bcd7ab393c08bfdaa800e1b94d203f097b Mon Sep 17 00:00:00 2001 From: Untone Date: Tue, 4 Jun 2024 08:10:57 +0300 Subject: [PATCH] exc-mw --- resolvers/reader.py | 5 +++-- services/exception.py | 17 +++++++++++++++++ services/logger.py | 10 +--------- services/search.py | 3 ++- 4 files changed, 23 insertions(+), 12 deletions(-) create mode 100644 services/exception.py diff --git a/resolvers/reader.py b/resolvers/reader.py index b234b2cd..2beeedad 100644 --- a/resolvers/reader.py +++ b/resolvers/reader.py @@ -21,7 +21,6 @@ def query_shouts(): select(Shout) .options(joinedload(Shout.authors), joinedload(Shout.topics)) .where(and_(Shout.published_at.is_not(None), Shout.deleted_at.is_(None))) - ) @@ -314,7 +313,9 @@ async def load_shouts_search(_, _info, text, limit=50, offset=0): if result: logger.debug(result) logger.debug(len(result)) - for [shout,] in result: + for [ + shout, + ] in result: # logger.debug(shout) shout.score = scores[f"{shout.id}"] shouts.append(shout) diff --git a/services/exception.py b/services/exception.py new file mode 100644 index 00000000..dbe4c30c --- /dev/null +++ b/services/exception.py @@ -0,0 +1,17 @@ +import logging + +from starlette.middleware.base import BaseHTTPMiddleware +from starlette.responses import JSONResponse + +logger = logging.getLogger("exception") +logging.basicConfig(level=logging.DEBUG) + + +class ExceptionHandlerMiddleware(BaseHTTPMiddleware): + async def dispatch(self, request, call_next): + try: + response = await call_next(request) + return response + except Exception as exc: + logger.exception(exc) + return JSONResponse({"detail": "An error occurred. Please try again later."}, status_code=500) diff --git a/services/logger.py b/services/logger.py index 55acd73c..d45606fc 100644 --- a/services/logger.py +++ b/services/logger.py @@ -66,15 +66,7 @@ root_logger = logging.getLogger() root_logger.setLevel(logging.DEBUG) root_logger.addHandler(stream) -ignore_logs = [ - "_trace", - "httpx", - "_client", - "_trace.atrace", - "aiohttp", - "_client", - "base" -] +ignore_logs = ["_trace", "httpx", "_client", "_trace.atrace", "aiohttp", "_client", "base"] for lgr in ignore_logs: loggr = logging.getLogger(lgr) loggr.setLevel(logging.INFO) diff --git a/services/search.py b/services/search.py index 3eff5a46..c16270a8 100644 --- a/services/search.py +++ b/services/search.py @@ -180,7 +180,8 @@ class SearchService: size=limit, from_=offset, _source=False, - _source_excludes=["title", "body", "subtitle", "media", "lead", "_index"]) + _source_excludes=["title", "body", "subtitle", "media", "lead", "_index"], + ) hits = search_response["hits"]["hits"] results = [{"id": hit["_id"], "score": hit["_score"]} for hit in hits]