def __get_child_id(self, dir_id, item_name): ikey = Key(Key.KT_ADDR, dir_id, self.__hash(item_name)) i_ids = [] ret_id = None i_addr_list_raw = self.__get_raw_value(ikey) if not i_addr_list_raw: raise PathException('key %s does not found' % ikey) for i_id in AddressItems.iter_item_ids(i_addr_list_raw): i_ids.append(i_id) if len(i_ids) == 0: raise PathException('No childlen found for key %s' % ikey) if len(i_ids) > 1: for i_id in i_ids: item_md = self.__get_item_md(i_id) if to_str(item_md.name) == to_str(item_name): ret_id = i_id break else: ret_id = i_ids[0] if ret_id is None: raise PathException('No child "%s" found in dir with id %s' % (item_name, dir_id)) return ret_id
def __get_child_id(self, dir_id, item_name): ikey = Key(Key.KT_ADDR, dir_id, self.__hash(item_name)) i_ids = [] ret_id = None i_addr_list_raw = self.__get_raw_value(ikey) if not i_addr_list_raw: raise PathException('key %s does not found'%ikey) for i_id in AddressItems.iter_item_ids(i_addr_list_raw): i_ids.append(i_id) if len(i_ids) == 0: raise PathException('No childlen found for key %s'%ikey) if len(i_ids) > 1: for i_id in i_ids: item_md = self.__get_item_md(i_id) if to_str(item_md.name) == to_str(item_name): ret_id = i_id break else: ret_id = i_ids[0] if ret_id is None: raise PathException('No child "%s" found in dir with id %s'%(item_name, dir_id)) return ret_id
def __exists(self, item_md): a_key = Key(Key.KT_ADDR, item_md.parent_dir_id, self.__hash(item_md.name)) addr_st_raw = self.__get_raw_value(a_key) if not addr_st_raw: return False for i_id in AddressItems.iter_item_ids(addr_st_raw): i_md = self.__get_item_md(i_id) if to_str(i_md.name) == to_str(item_md.name): return True return False
def __update_addr_item(self, old_item_md, new_item_md): if to_str(old_item_md.name) != to_str(new_item_md.name): new_key = Key(Key.KT_ADDR, new_item_md.parent_dir_id, self.__hash(new_item_md.name)) old_key = Key(Key.KT_ADDR, old_item_md.parent_dir_id, self.__hash(old_item_md.name)) self.__update_addr(old_key, old_item_md.item_id, new_key) if old_item_md.parent_dir_id != new_item_md.parent_dir_id: old_dir_md = self.__get_item_md(old_item_md.parent_dir_id) self.__remove_addr_child(old_dir_md, old_item_md.item_id) new_dir_md = self.__get_item_md(new_item_md.parent_dir_id) self.__append_addr_child(new_dir_md, old_item_md.item_id)
def dump(self, recursive=False): self.validate() fname = to_str(self.name) fname_len = len(fname) if fname_len < 1 or fname_len > MAX_B: raise MDValidationError('File name length should be in range [1..%s], but "%s" occured'%(MAX_B, fname)) dump = struct.pack(self.HDR_STRUCT, AbstractMetadataObject.MOL_FILE, fname_len, self.item_id, \ self.size, self.replica_count, self.parent_dir_id, self.create_date, int(self.is_local)) dump += fname for chunk in self.chunks: ch_dump = chunk.dump() dump += '%s%s'%(chr(len(ch_dump)), ch_dump) return dump
def dump(self, recursive=False): self.validate() fname = to_str(self.name) fname_len = len(fname) if fname_len < 1 or fname_len > MAX_B: raise MDValidationError( 'File name length should be in range [1..%s], but "%s" occured' % (MAX_B, fname)) dump = struct.pack(self.HDR_STRUCT, AbstractMetadataObject.MOL_FILE, fname_len, self.item_id, \ self.size, self.replica_count, self.parent_dir_id, self.create_date, int(self.is_local)) dump += fname for chunk in self.chunks: ch_dump = chunk.dump() dump += '%s%s' % (chr(len(ch_dump)), ch_dump) return dump
def dump(self, recursive=False): self.validate() dname = to_str(self.name) dname_len = len(dname) if dname_len < 1 or dname_len > MAX_B: raise MDValidationError('Directory name length should be in range [1..%s], but "%s" occured'%(MAX_B, dname)) dump = struct.pack(self.HDR_STRUCT, AbstractMetadataObject.MOL_DIR, dname_len, self.item_id, \ self.parent_dir_id, self.create_date, self.last_modify_date) dump += dname if recursive: for dir_item in self.content.values(): for item in dir_item: im_dump = item.dump(recursive) dump += '%s%s'%(struct.pack(self.ITEM_HDR_STRUCT, len(im_dump), int(item.is_file())), im_dump) return dump
def dump(self, recursive=False): self.validate() dname = to_str(self.name) dname_len = len(dname) if dname_len < 1 or dname_len > MAX_B: raise MDValidationError( 'Directory name length should be in range [1..%s], but "%s" occured' % (MAX_B, dname)) dump = struct.pack(self.HDR_STRUCT, AbstractMetadataObject.MOL_DIR, dname_len, self.item_id, \ self.parent_dir_id, self.create_date, self.last_modify_date) dump += dname if recursive: for dir_item in self.content.values(): for item in dir_item: im_dump = item.dump(recursive) dump += '%s%s' % (struct.pack( self.ITEM_HDR_STRUCT, len(im_dump), int( item.is_file())), im_dump) return dump