28 lines
927 B
Python
28 lines
927 B
Python
"""Short-lived, cross-worker sales snapshots invalidated by imports and product edits."""
|
|
import hashlib
|
|
from datetime import date
|
|
|
|
from services import simple_cache
|
|
from services.cache import _data_version_signature
|
|
|
|
|
|
def sales_snapshot(products, build):
|
|
version = _data_version_signature()
|
|
fingerprint = hashlib.sha256(repr(products).encode('utf-8')).hexdigest()
|
|
token = (version, fingerprint, date.today())
|
|
key = 'spot-sales-snapshot-v3'
|
|
try:
|
|
entry = simple_cache.get(key)
|
|
except OSError:
|
|
entry = None
|
|
if entry is not None and entry['token'] == token:
|
|
return entry['result']
|
|
result = build(products)
|
|
# Never publish an old snapshot under a newly imported data version.
|
|
if _data_version_signature() == version:
|
|
try:
|
|
simple_cache.set(key, {'token': token, 'result': result}, ttl=60)
|
|
except OSError:
|
|
pass
|
|
return result
|