コード例 #1
0
ファイル: dataio.py プロジェクト: sececter/pyhwp
 def print_to_logger(self, logger):
     e = self
     logger.error('ParseError: %s', e)
     logger.error('Caused by: %s', repr(e.cause))
     logger.error('Path: %s', e.path)
     if e.treegroup is not None:
         logger.error('Treegroup: %s', e.treegroup)
     if e.record:
         logger.error('Record: %s', e.record['seqno'])
         logger.error('Record Payload:')
         for line in dumpbytes(e.record['payload'], True):
             logger.error('  %s', line)
     logger.error('Problem Offset: at %d (=0x%x)', e.offset, e.offset)
     if self.binevents:
         logger.error('Binary Parse Events:')
         from hwp5.bintype import log_events
         for ev, item in log_events(self.binevents, logger.error):
             pass
     logger.error('Model Stack:')
     for level, c in enumerate(reversed(e.parse_stack_traces)):
         model = c['model']
         if isinstance(model, StructType):
             logger.error('  %s', model)
             parsed_members = c['parsed']
             for member in parsed_members:
                 offset = member.get('offset', 0)
                 offset_end = member.get('offset_end', 1)
                 name = member['name']
                 value = member['value']
                 logger.error('    %06x:%06x: %s = %s',
                              offset, offset_end - 1, name, value)
             logger.error('    %06x:      : %s', c['offset'], c['member'])
             pass
         else:
             logger.error('  %s%s', ' ' * level, c)
コード例 #2
0
ファイル: dataio.py プロジェクト: yarang/pyhwp
 def print_to_logger(self, logger):
     e = self
     logger.error('ParseError: %s', e)
     logger.error('Caused by: %s', repr(e.cause))
     logger.error('Path: %s', e.path)
     if e.treegroup is not None:
         logger.error('Treegroup: %s', e.treegroup)
     if e.record:
         logger.error('Record: %s', e.record['seqno'])
         logger.error('Record Payload:')
         for line in dumpbytes(e.record['payload'], True):
             logger.error('  %s', line)
     logger.error('Problem Offset: at %d (=0x%x)', e.offset, e.offset)
     if self.binevents:
         logger.error('Binary Parse Events:')
         from hwp5.bintype import log_events
         for ev, item in log_events(self.binevents, logger.error):
             pass
     logger.error('Model Stack:')
     for level, c in enumerate(reversed(e.parse_stack_traces)):
         model = c['model']
         if isinstance(model, StructType):
             logger.error('  %s', model)
             parsed_members = c['parsed']
             for member in parsed_members:
                 offset = member.get('offset', 0)
                 offset_end = member.get('offset_end', 1)
                 name = member['name']
                 value = member['value']
                 logger.error('    %06x:%06x: %s = %s',
                              offset, offset_end - 1, name, value)
             logger.error('    %06x:      : %s', c['offset'], c['member'])
             pass
         else:
             logger.error('  %s%s', ' ' * level, c)
コード例 #3
0
ファイル: dataio.py プロジェクト: rethink-kmaroney/pyhwp
    def print_to_logger(self, logger):
        e = self
        logger.error("ParseError: %s", e)
        logger.error("Caused by: %s", repr(e.cause))
        logger.error("Path: %s", e.path)
        if e.treegroup is not None:
            logger.error("Treegroup: %s", e.treegroup)
        if e.record:
            logger.error("Record: %s", e.record["seqno"])
            logger.error("Record Payload:")
            for line in dumpbytes(e.record["payload"], True):
                logger.error("  %s", line)
        logger.error("Problem Offset: at %d (=0x%x)", e.offset, e.offset)
        if self.binevents:
            logger.error("Binary Parse Events:")
            from hwp5.bintype import log_events

            for ev, item in log_events(self.binevents, logger.error):
                pass
        logger.error("Model Stack:")
        for level, c in enumerate(reversed(e.parse_stack_traces)):
            model = c["model"]
            if isinstance(model, StructType):
                logger.error("  %s", model)
                parsed_members = c["parsed"]
                for member in parsed_members:
                    offset = member.get("offset", 0)
                    offset_end = member.get("offset_end", 1)
                    name = member["name"]
                    value = member["value"]
                    logger.error("    %06x:%06x: %s = %s", offset, offset_end - 1, name, value)
                logger.error("    %06x:      : %s", c["offset"], c["member"])
                pass
            else:
                logger.error("  %s%s", " " * level, c)
コード例 #4
0
ファイル: find.py プロジェクト: sececter/pyhwp
    def print_model(model):
        printable_model = dict(model, type=model['type'].__name__)
        print fmt % printable_model
        if dump:
            from hwp5.binmodel import model_to_json
            print model_to_json(model, sort_keys=True, indent=2)

            def print_log(fmt, *args):
                print fmt % args
            from hwp5.bintype import log_events
            list(log_events(model['binevents'], print_log))
コード例 #5
0
ファイル: find.py プロジェクト: yarang/pyhwp
    def print_model(model):
        printable_model = dict(model, type=model['type'].__name__)
        print fmt % printable_model
        if dump:
            from hwp5.binmodel import model_to_json
            print model_to_json(model, sort_keys=True, indent=2)

            def print_log(fmt, *args):
                print fmt % args

            from hwp5.bintype import log_events
            list(log_events(model['binevents'], print_log))
コード例 #6
0
ファイル: find.py プロジェクト: ParanScreen/dimidisk-hwp
def main(args):
    filenames = args['<hwp5files>']
    from hwp5.dataio import ParseError
    from hwp5.binmodel import Hwp5File

    conditions = []
    if args['--model']:
        def with_model_name(model):
            return args['--model'] == model['type'].__name__
        conditions.append(with_model_name)

    if args['--tag']:
        tag = args['--tag']
        try:
            tag = int(tag)
        except ValueError:
            pass
        else:
            from hwp5.tagids import tagnames
            tag = tagnames[tag]

        def with_tag(model):
            return model['tagname'] == tag
        conditions.append(with_tag)

    if args['--incomplete']:
        def with_incomplete(model):
            return 'unparsed' in model
        conditions.append(with_incomplete)

    def flat_models(hwp5file, **kwargs):
        for model in hwp5file.docinfo.models(**kwargs):
            model['stream'] = 'DocInfo'
            yield model

        for section in hwp5file.bodytext:
            for model in hwp5file.bodytext[section].models(**kwargs):
                model['stream'] = 'BodyText/'+section
                yield model

    for filename in filenames:
        try:
            hwp5file = Hwp5File(filename)

            def with_filename(models):
                for model in models:
                    model['filename'] = filename
                    yield model

            models = flat_models(hwp5file)
            models = with_filename(models)

            for model in models:
                if all(condition(model) for condition in conditions):
                    print '%s:%s(%s): %s' % (model['filename'],
                                             model['stream'],
                                             model['seqno'],
                                             model['type'].__name__)
                    if args['--dump']:
                        from hwp5.binmodel import model_to_json
                        print model_to_json(model, sort_keys=True, indent=2)
                        def print_log(fmt, *args):
                            print fmt % args
                        from hwp5.bintype import log_events
                        list(log_events(model['binevents'], print_log))
        except ParseError, e:
            from hwp5.proc import logger
            logger.error('---- On processing %s:', filename)
            e.print_to_logger(logger)