diff --git a/controller/app.py b/controller/app.py index 828d5dc..748c796 100644 --- a/controller/app.py +++ b/controller/app.py @@ -31,14 +31,13 @@ ENCODE_REGEX = re.compile(r"\^[ds]\d+") SOLR_TIMEOUT = int(os.getenv("SOLR_TIMEOUT", 10)) -# Initialize DeCS decoder -decs = DecodDeCS() - @asynccontextmanager async def lifespan(app: FastAPI): app.state.client = httpx.AsyncClient() + app.state.decs = DecodDeCS() # Initialize DeCS decoder yield await app.state.client.aclose() + await app.state.decs.close() app = FastAPI(lifespan=lifespan) @@ -193,7 +192,7 @@ async def search( # Run regular expression and decode if found thesaurus codes if ENCODE_REGEX.search(result): logger.info(f"Applying decod for language {lang}") - result = decs.decode(result, lang) + result = app.state.decs.decode(result, lang) # Remove subfields marks of non decoded descriptors result = re.sub(r"(\^d)", "", result) @@ -228,6 +227,6 @@ async def healthcheck( } result = await send_post_command(query_map, search_url) - result = decs.decode(result, lang) + result = app.state.decs.decode(result, lang) return JSONResponse(content=json.loads(result), headers={"Cache-Control": "no-cache"}) diff --git a/controller/decode_decs.py b/controller/decode_decs.py index 2529160..b124524 100644 --- a/controller/decode_decs.py +++ b/controller/decode_decs.py @@ -7,6 +7,10 @@ def __init__(self, redis_host='iahx_controller_cache', redis_port=6379, redis_db self.redis_client = redis.Redis(host=redis_host, port=redis_port, db=redis_db) self.REGEX = re.compile(r"(\^[ds])(\d+)") # Pre-compile regex pattern + def close(self): + if self.redis_client: + self.redis_client.close() + def decode(self, text, lang): """ Decode a given string by replacing ^d or ^s codes with their corresponding descriptors from Redis.