You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
1006 B
35 lines
1006 B
import os
|
|
|
|
from .base import BaseStorageBackend, StorageDict
|
|
|
|
|
|
class DiskBackend(BaseStorageBackend):
|
|
def __init__(self, config):
|
|
self.format = config.get('format', 'json')
|
|
self.path = config.get('path', 'storage') + '.' + self.format
|
|
self.storage = StorageDict()
|
|
|
|
@staticmethod
|
|
def get_format_functions(fmt):
|
|
if fmt == 'json':
|
|
from json import loads, dumps
|
|
return (loads, dumps)
|
|
elif fmt == 'yaml':
|
|
from pyyaml import load, dump
|
|
return (load, dump)
|
|
raise Exception('Unsupported format type {}'.format(fmt))
|
|
|
|
def load(self):
|
|
if not os.path.exists(self.path):
|
|
return
|
|
|
|
decode, _ = self.get_format_functions(self.format)
|
|
|
|
with open(self.path, 'r') as f:
|
|
self.storage = decode(f.read())
|
|
|
|
def dump(self):
|
|
_, encode = self.get_format_functions(self.format)
|
|
|
|
with open(self.path, 'w') as f:
|
|
f.write(encode(self.storage))
|
|
|