From e0c25f15597a7440f57cd0c14c75790a76e308e9 Mon Sep 17 00:00:00 2001 From: "Daniel W. Steinbrook" Date: Sun, 30 Jul 2023 05:25:14 -0400 Subject: [PATCH] Use local filesystem cache with PostGIS backend --- app/postgis.py | 9 ++++++++- app/server.py | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/app/postgis.py b/app/postgis.py index 6765303..172b90c 100644 --- a/app/postgis.py +++ b/app/postgis.py @@ -10,6 +10,7 @@ from psycopg2.extras import NamedTupleCursor import sentry_sdk +from cache import CompressedJSONCache from overpass import ZOOM_DEFAULT @@ -23,11 +24,17 @@ class PostgisClient: The server is assumed to already be populated, including having the soundscape_tile function installed. """ - def __init__(self, server): + def __init__(self, server, cache_dir, cache_days, cache_size): self.server = server + self.cache = CompressedJSONCache(cache_dir, cache_days, cache_size) @sentry_sdk.trace async def query(self, x, y): + response = await self.cache.get(f"{x}_{y}", lambda: self.uncached_query(x, y)) + return response + + @sentry_sdk.trace + async def uncached_query(self, x, y): try: async with aiopg.connect(self.server) as conn: async with conn.cursor(cursor_factory=NamedTupleCursor) as cursor: diff --git a/app/server.py b/app/server.py index e3d3f7d..fcf73ce 100644 --- a/app/server.py +++ b/app/server.py @@ -12,7 +12,7 @@ import logging logger=logging.getLogger(__name__) -# workaround for aiohttp on WIndows (https://stackoverflow.com/a/69195609) +# workaround for aiohttp on Windows (https://stackoverflow.com/a/69195609) import sys, asyncio if sys.version_info >= (3, 8) and sys.platform.lower().startswith("win"): asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) @@ -53,7 +53,7 @@ def backend_client(backend_url, user_agent, cache_dir, cache_days, cache_size): backend_url, user_agent, cache_dir, cache_days, cache_size ) elif url_parts.scheme in ('postgis', 'postgres'): - return PostgisClient(backend_url) + return PostgisClient(backend_url, cache_dir, cache_days, cache_size) else: raise ValueError("Unrecognized protocol %r" % url_parts.scheme)