30 lines
990 B
Python
30 lines
990 B
Python
"""Role cache persistence; cache identity never supplies musical randomness."""
|
|
import json
|
|
|
|
import generator.cache
|
|
import generator.fretboard
|
|
import generator.validation
|
|
|
|
ENTRYPOINTS = ('generator.composition',)
|
|
|
|
def code_key():
|
|
return generator.cache.fingerprint(generator.cache.source_identity(ENTRYPOINTS))
|
|
|
|
def restore(path, key):
|
|
if path is None or not path.is_file() or path.is_symlink():
|
|
return None
|
|
try:
|
|
entry = json.loads(path.read_text())
|
|
value = entry['result']
|
|
if entry['key'] == key and entry['digest'] == generator.cache.fingerprint(value):
|
|
generator.validation.validate_document(value['document'])
|
|
generator.fretboard.validate_document(value['document'])
|
|
return {**value, 'cache_hit': True}
|
|
except (OSError, ValueError, KeyError, TypeError):
|
|
pass
|
|
return None
|
|
|
|
def store(path, key, value):
|
|
if path is not None:
|
|
generator.cache.write_json(path, {'key': key, 'digest': generator.cache.fingerprint(value), 'result': value})
|