def soft_exit(exitcode=0, msg=''): """ Simple exit method with pause """ if exitcode and msg: logging.error(msg) elif msg: logging.info(msg) logging.debug(f'ExitCode: {exitcode}\nExitMessage {msg}') print('\nPress any key to exit...') getch() sys.exit(exitcode)
def get_node_next_ids(self, node): """ Returns list of destination node ids """ ids = [] for s in node.xpath('./descendant::DestinationNodeName'): ids.append(s.text) ids.sort() logging.debug(f"({node.tag}) {node.attrib['name']} → {ids}") if len(ids) == 0: logging.debug(f'No next ids found for {node}') return ids
def remove_node(self, cur_node, nametag='', pos=''): """ Removes nodes from cur_node by tag and position or cur_node itself """ removed = [] if nametag: nodes = self.get_nodes_by_tag(cur_node, nametag, pos) for n in nodes: logging.debug(f'Remove node {n} by condition {cur_node}|{nametag}|{pos}') n.getparent().remove(n) removed.append(n) else: logging.debug(f'Remove node {cur_node.tag}') cur_node.getparent().remove(cur_node) removed.append(cur_node) return removed
def magic_converter(self, encode=True, to_real_xml=True, parse_raw=True, sort_camp=True, wrap_camp=True): """ Convering raw dummy xml from Decision Services to cool and smart xml format ``` @params encode : bool - changing encoding to UTF-8 and removing ascii codes to_real_xml : bool - removing meta data parse_raw : bool - parsing xml and modify format sort_camp : bool - sorting xml nodes by id wrap_camp : bool - wrapping group of nodes with StrategyNode ``` """ logging.info('CISParser: start magic processing') logging.debug(f"Parametrs: \n{'-'*20} \ \nencode : {encode} \ \nto_real_xml : {to_real_xml} \ \nparse_raw : {parse_raw} \ \nsort_camp : {sort_camp} \n{'-'*20} \ \nwrap_camp : {wrap_camp} \n{'-'*20}") for file in self.files: logging.info(f'Process: {file}') if encode: logging.info('Start encoding utf-8 unescape=False') uencode.encode(file, 'utf-8', unescape=False) if to_real_xml: self.to_real_xml(file) if parse_raw: self.parse_raw_xml(file) if sort_camp: logging.info(f'Sorting campaign {file}') self.sort_campaign(self.start_node) logging.info(f'Sorted!') if wrap_camp: self.wrap_campaign(self.start_node) self.save_xml(self.tree, file) if encode: logging.info('Start encoding utf-8 unescape=True') uencode.encode(file, 'utf-8', unescape=True) logging.info(f"Processed {file}! \n{'-'*100}") logging.info('CISParser: magic processing ended!') logging.add_footnote(logging)
def rewrite_file(filename, data, codec='utf-8', comment=''): """ Rewrites file with data """ logging.debug(f'Rewriting {filename} with new data {comment}') with open(filename, 'w', encoding=codec) as tmpfile: tmpfile.write(data)
def swap_nodes(self, node_1, node_2): """ Swaps nodes places """ logging.debug(f'Swap nodes: {node_1.tag} ↔ {node_2.tag}') node_1.addnext(deepcopy(node_2)) node_2.addnext(node_1) self.remove_node(node_2)
def clean_meta_names(self): """ Cleans meta names if exists human readable attribute """ logging.debug('Remove all meta names') for elem in self.tree.xpath('//*[@name and @displayName]'): del elem.attrib['name']