Pella86

Untitled

Jul 31st, 2017
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.07 KB | None | 0 0
  1. from os.path import isfile, join, split, splitext
  2. from os import listdir
  3. import pickle
  4.  
  5. #==============================================================================
  6. # # Helper functions
  7. #==============================================================================
  8.  
  9. def get_pathname(path):
  10.     ''' Little function to split the path in path, name, extension'''
  11.     path, nameext = split(path)
  12.     name, ext = splitext(nameext)
  13.     return path, name, ext
  14.  
  15. #==============================================================================
  16. # # Databases
  17. #==============================================================================
  18.  
  19. class Data:
  20.    
  21.     def __init__(self, dataid, data):
  22.         self.id = dataid
  23.         self._data = data
  24.         self.hasChanged = True
  25.    
  26.     def getData(self):
  27.         return self._data
  28.    
  29.     def setData(self, data):
  30.         self._data = data
  31.         self.hasChanged = True
  32.        
  33.     def __str__(self):
  34.         sid = ""
  35.         if len(self.id) > 10:
  36.             sid = self.id[:10]
  37.         else:
  38.             sid = self.id
  39.         return "data id: {0} | mod {2} | data: {1}".format(sid, self._data, self.hasChanged)
  40.    
  41.  
  42. class Database:
  43.    
  44.     def __init__(self, dbfolder):
  45.         self.dbfolder = dbfolder
  46.         self.database = {}
  47.        
  48.     def keys(self):
  49.         return self.database.keys()
  50.    
  51.     def items(self):
  52.         return self.database.items()
  53.    
  54.     def values(self):
  55.         return self.database.values()
  56.    
  57.     def isNew(self, data):
  58.         if data.id in self.database:
  59.             return False
  60.         print("data not in database, so is new")
  61.         return True
  62.    
  63.     def getData(self, dataid):
  64.         return self.database[dataid]
  65.    
  66.     def setData(self, data):
  67.         self.database[data.id] = data
  68.  
  69.    
  70.     def addData(self, data):
  71.         self.database[data.id] = data
  72.    
  73.     def loadDb(self):
  74.         # for file in folder if extension is pickle load
  75.         names = [join(self.dbfolder, f) for f in listdir(self.dbfolder)]
  76.        
  77.         tmp_db = {}
  78.         c = 0
  79.         for name in names:
  80.             _ , _ , ext = get_pathname(name)
  81.             if ext == ".pickle" and isfile(name):
  82.                
  83.                 with open(name, 'rb') as f:
  84.                     data = pickle.load(f)
  85.                 tmp_db[data.id] = data
  86.                 c += 1
  87.            
  88.         print("Loaded", c, "items")
  89.         self.database = tmp_db
  90.    
  91.     def saveDb(self):
  92.         # write the whole database again
  93.        
  94.         for data in self.database.values():
  95.             filename = self.dbfolder + str(data.id) + ".pickle"
  96.             with open(filename, 'wb') as f:
  97.                 pickle.dump(data, f)
  98.    
  99.     def updateDb(self):
  100.         # save only the ones that have changed
  101.         for data in self.database.values():
  102.             if data.hasChanged:
  103.                 filename = self.dbfolder + str(data.id) + ".pickle"
  104.                 with open(filename, 'wb') as f:
  105.                     pickle.dump(data, f)
  106.                 data.hasChanged = False
Advertisement
Add Comment
Please, Sign In to add comment