mirror of
https://git.ianrenton.com/ian/spothole.git
synced 2026-08-05 18:11:41 +00:00
Refactor of caching & data storage part 1
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
import threading
|
||||
from datetime import timedelta
|
||||
|
||||
from requests_cache import CachedSession
|
||||
|
||||
# Cache for "semi-static" data retrieved from a URL. This is a layet of caching in addition to the normal caching of
|
||||
# spots, alerts and other data in the DataStore class. Its purpose is to avoid hitting remote endpoints frequently when
|
||||
# e.g. restarting Spothole many times during testing.
|
||||
_session = CachedSession("cache/semi_static_urls", expire_after=timedelta(days=1),
|
||||
allowable_codes=(200, 400, 401, 403, 404))
|
||||
_lock = threading.Lock()
|
||||
|
||||
|
||||
class _ThreadSafeSession:
|
||||
"""Wraps CachedSession with a lock to prevent concurrent SQLite access across threads. This allows a single object
|
||||
to be used freely across the application."""
|
||||
|
||||
def get(self, *args, **kwargs):
|
||||
with _lock:
|
||||
return _session.get(*args, **kwargs)
|
||||
|
||||
# Global object
|
||||
URL_DATA_CACHE = _ThreadSafeSession()
|
||||
Reference in New Issue
Block a user