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