def _build_stack(cls, child): content = [(child.name, cls._get_valid_attrs(child))] parent = child while True: grand_parent = parent.findParent() if not grand_parent: break children = grand_parent.findAll(parent.name, cls._get_valid_attrs(parent), recursive=False) for i, c in enumerate(children): if c == parent: content.insert(0, (grand_parent.name, cls._get_valid_attrs(grand_parent), i)) break if grand_parent.name == 'html': break parent = grand_parent wanted_attr = getattr(child, 'wanted_attr', None) is_full_url = getattr(child, 'is_full_url', False) stack = dict(content=content, wanted_attr=wanted_attr, is_full_url=is_full_url) stack['stack_id'] = 'rule_' + get_random_str(4) return stack
def _build_stack(cls, child, url): content = [(child.name, cls._get_valid_attrs(child))] parent = child while True: grand_parent = parent.findParent() if not grand_parent: break children = grand_parent.findAll(parent.name, cls._get_valid_attrs(parent), recursive=False) for i, c in enumerate(children): if c == parent: content.insert(0, (grand_parent.name, cls._get_valid_attrs(grand_parent), i)) break if grand_parent.name == 'html': break parent = grand_parent wanted_attr = getattr(child, 'wanted_attr', None) is_full_url = getattr(child, 'is_full_url', False) is_non_rec_text = getattr(child, 'is_non_rec_text', False) stack = dict(content=content, wanted_attr=wanted_attr, is_full_url=is_full_url, is_non_rec_text=is_non_rec_text) stack['url'] = url if is_full_url else '' stack['hash'] = hashlib.sha256(str(stack).encode('utf-8')).hexdigest() stack['stack_id'] = 'rule_' + get_random_str(4) return stack
def _build_stack(cls, child, url): content = [(child.name, cls._get_valid_attrs(child))] parent = child while True: grand_parent = parent.findParent() if not grand_parent: break children = grand_parent.findAll( parent.name, cls._get_valid_attrs(parent), recursive=False ) for i, c in enumerate(children): if c == parent: content.insert( 0, (grand_parent.name, cls._get_valid_attrs(grand_parent), i) ) break if grand_parent.name == "html": break parent = grand_parent wanted_attr = getattr(child, "wanted_attr", None) is_full_url = getattr(child, "is_full_url", False) is_non_rec_text = getattr(child, "is_non_rec_text", False) stack = dict( content=content, wanted_attr=wanted_attr, is_full_url=is_full_url, is_non_rec_text=is_non_rec_text, ) stack["url"] = url if is_full_url else "" stack["hash"] = hashlib.sha256(str(stack).encode("utf-8")).hexdigest() stack["stack_id"] = "rule_" + get_random_str(4) return stack