@@ -0,0 +1,29 @@
|
||||
"""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})
|
||||
Reference in New Issue
Block a user