def test_parts(self): # build test sets full_count = 47988 one_part_count = 15996 test_sets = {} dom = DictOfMask("?l?d,1,3") for i in range(full_count): part_key = i / one_part_count + 1 if part_key not in test_sets.keys(): test_sets[part_key] = dom.get() else: dom.get() for i in range(1, 4): counter = 0 dom = DictOfMask("?l?d,1,3", 3, i) assert one_part_count == dom.second_border - dom.first_border while True: phrase = dom.get() if phrase is None: break counter += 1 assert one_part_count == counter
def write_mask_variants(self, mask, base_fh): """ Write in file variants names generated by mask :param mask: :param base_fh: :return: """ dom = DictOfMask(mask, 0, 0) while True: line = dom.get() if line is None: break gens = ContentDiscoveryNameGenerator.gen_exts_variants( line, self.exts) for gen in gens: base_fh.write(gen + "\n") del dom
class CombineGenerator(object): """ Class for generate and work with masks """ mask = None template = None mask_generator = None dict_generator = None first_border = 0 second_border = 0 lines_count = 0 current_counter = 0 current_dict_line = None def __init__(self, mask, dict_file, parts, part, template): if not template.count("%m%"): raise WSException( "Template '{0}' not contains %m% (mask) marker ".format( template)) if not template.count("%d%"): raise WSException( "Template '{0}' not contains %d% (dict) marker ".format( template)) if not os.path.exists(dict_file): raise WSException("Dict '{0}' not exists ".format(dict_file)) self.template = template self.dict_generator = FileGenerator(dict_file) self.next_dict_line() self.mask = mask self.mask_generator = DictOfMask(mask) self.lines_count = (self.dict_generator.lines_count * self.template.count("%d%")) * \ (self.mask_generator.all_objects_count * self.template.count("%m%")) if parts and part: one_part_count = int(self.lines_count / parts) self.first_border = one_part_count * (part - 1) self.second_border = one_part_count * part while self.current_counter < self.first_border: self.get() def _get(self): """ Get next combine item """ mask = self.get_next_mask() if mask is None: self.next_dict_line() if self.current_dict_line is None: return None self.mask_generator = DictOfMask(self.mask) mask = self.get_next_mask() return self.template.replace("%m%", mask).replace("%d%", self.current_dict_line) def get(self): """ Get next combine item and up counters """ if self.second_border and self.current_counter >= self.second_border: return None to_return = self._get() self.current_counter += 1 return to_return def get_next_mask(self): """ Get next mask string from mask generator """ return self.mask_generator.get() def next_dict_line(self): """ Set next string from dict generator """ self.current_dict_line = self.dict_generator.get() def get_dict_current_line(self): """ Get next line from dict and get next if need """ if not len(self.current_dict_line): self.next_dict_line() return self.current_dict_line