コード例 #1
0
ファイル: CISParser.py プロジェクト: solesensei/GlowByteCode
 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)
コード例 #2
0
ファイル: CISParser.py プロジェクト: solesensei/GlowByteCode
 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
コード例 #3
0
ファイル: CISParser.py プロジェクト: solesensei/GlowByteCode
 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
コード例 #4
0
ファイル: CISParser.py プロジェクト: solesensei/GlowByteCode
    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)
コード例 #5
0
ファイル: CISParser.py プロジェクト: solesensei/GlowByteCode
 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)
コード例 #6
0
ファイル: CISParser.py プロジェクト: solesensei/GlowByteCode
 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)
コード例 #7
0
ファイル: CISParser.py プロジェクト: solesensei/GlowByteCode
 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']