leveldir

Multi-level directory structure data stores in python3
git clone git://git.defalsify.org/python-leveldir.git
Log | Files | Refs | LICENSE

base.py (1419B)


      1 # standard imports
      2 import os
      3 import stat
      4 
      5 
      6 class LevelDir:
      7 
      8     def __init__(self, root_path, levels, entry_length):
      9         self.path = root_path
     10         self.levels = levels 
     11         self.entry_length = entry_length
     12         fi = None
     13         self.__prepare_directory(self.path)
     14 
     15         self.__verify_directory()
     16 
     17         self.master_file = os.path.join(self.path, '.master')
     18 
     19 
     20     def have(self, k):
     21         fp = self.to_filepath(k)
     22         try:
     23             os.stat(fp)
     24         except FileNotFoundError:
     25             return False
     26         return True
     27 
     28 
     29     def __verify_directory(self):
     30         fi = os.stat(self.path)
     31         if not stat.S_ISDIR(fi.st_mode):
     32             raise ValueError('{} is not a directory'.format(self.path))
     33         #f = os.listdir(self.path)
     34         #os.listdir(self.path)
     35         #f.close()
     36         return True
     37 
     38 
     39     def count(self):
     40         fi = os.stat(self.master_file)
     41         c = fi.st_size / self.entry_length
     42         r = int(c)
     43         if r != c: # TODO: verify valid for check if evenly divided
     44             raise IndexError('master file not aligned')
     45         return r
     46 
     47 
     48     @classmethod
     49     def __prepare_directory(cls, path):
     50         os.makedirs(path, exist_ok=True)
     51         state_file = os.path.join(path, '.master')
     52         try:
     53             os.stat(state_file)
     54         except FileNotFoundError:
     55             f = open(state_file, 'w')
     56             f.close()
     57         return state_file