Browse Source

BaseStorage: subclasses must use init_data() to set data

The setter for BaseStorage.data has been removed.
Helge Jung 9 years ago
parent
commit
3b0be38d61
2 changed files with 15 additions and 11 deletions
  1. 9 6
      ffstatus/basestorage.py
  2. 6 5
      ffstatus/storage.py

+ 9 - 6
ffstatus/basestorage.py

@@ -40,13 +40,16 @@ class BaseStorage(object):
         """Contains the data handled by this storage."""
         return self.__data
 
-    @data.setter
-    def data(self, value):
+    def init_data(self, data):
         """setter for data property"""
-        logging.debug('Setting new storage data (old=%d/new=%d items).',
-                      len(self.__data) if self.__data is not None else 0,
-                      len(value) if value is not None else 0)
-        self.__data = value
+        if self.__data is not None:
+            msg = 'Tried to initialize storage data a second time.'
+            logging.error(msg)
+            raise Exception(msg)
+
+        logging.debug('Setting initial storage data (%d items).',
+                      len(data) if data is not None else 0)
+        self.__data = data
 
     def open(self):
         """

+ 6 - 5
ffstatus/storage.py

@@ -7,6 +7,7 @@ import os
 
 from .basestorage import BaseStorage
 
+
 class Storage(BaseStorage):
     """Provides file-based persistency for BaseStorage"""
 
@@ -21,9 +22,10 @@ class Storage(BaseStorage):
 
     def open(self):
         self.storage_file = open(self.storage_filename, 'a+b')
+        loaded_data = {}
         try:
             self.storage_file.seek(0, os.SEEK_SET)
-            self.data = pickle.load(self.storage_file)
+            loaded_data = pickle.load(self.storage_file)
 
         except EOFError:
             self.logger.warn('The storage file was empty. I\'ll assume this is the first start with this storage directory.')
@@ -35,9 +37,8 @@ class Storage(BaseStorage):
             ))
             raise err
 
-        if self.data is None:
-            self.data = {}
-        self.logger.info('Opened storage with ' + str(len(self.data)) + ' entries.')
+        self.logger.info('Opened storage with %d entries.', len(loaded_data))
+        self.init_data(loaded_data)
 
     def save(self):
         if self.storage_file is None:
@@ -52,4 +53,4 @@ class Storage(BaseStorage):
         self.save()
         self.storage_file.close()
         self.storage_file = None
-        self.data = None
+        BaseStorage.close(self)