from copy import copy, deepcopy from splitter import Branch as BranchImpl from splitter import Splitter as SplitterImpl class SplitterValidator(object): def __init__(self, parser, filter_validator): self.splitter = copy(parser.splitter) self.branches = deepcopy(parser.branches) self.branch_ids = filter_validator.branches_ids self.filter_impl = filter_validator.impl self.br_name_to_br = {} self.impl = self.create_impl() def sort_branches(self): id_to_branch = dict(zip(self.branch_ids.values(), self.branch_ids.keys())) sorted_br = [id_to_branch[k] for k in sorted(id_to_branch.keys())] return sorted_br def create_impl(self): br_names = self.sort_branches() branches = [BranchImpl(name) for name in br_names]# Actual branch instances are being initiated name_to_br = dict(zip(br_names, branches))# These instances are being mapped to the corresponding names, i.e. A, B self.br_name_to_br = name_to_br return SplitterImpl(name_to_br, self.filter_impl)