storage.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  1. import cPickle as pickle
  2. import logging
  3. import os
  4. class Storage:
  5. data = None
  6. def __init__(self, storage_dir):
  7. self.logger = logging.getLogger('Storage')
  8. self.storage_dir = storage_dir
  9. self.logger.debug('Using storage at \'{0}\''.format(storage_dir))
  10. self.storage_file = open(os.path.join(storage_dir, 'storage.dat'), 'rwb')
  11. self.logger.debug('storage_file = ' + str(self.storage_file))
  12. try:
  13. self.data = pickle.load(self.storage_file)
  14. except EOFError:
  15. self.logger.info('The storage file was empty, I can handle this.')
  16. except Exception as err:
  17. self.logger.error('Loading the storage failed. Please resolve the error and/or remove the storage file \'{0}\': {1}'.format(self.storage_file, str(err)))
  18. raise err
  19. if self.data is None: self.data = {}
  20. self.logger.info('Opened storage with ' + str(len(self.data)) + ' entries.')
  21. def save(self):
  22. #self.storage_file.seek(0, os.SEEK_SET)
  23. #self.storage_file.truncate()
  24. pickle.dump(self.data, self.storage_file, protocol=2)
  25. #self.storage_file.flush()
  26. def close(self):
  27. self.save()
  28. self.storage_file.close()
  29. self.data = None