def main(args): from hwp5.dataio import ParseError filenames = filenames_from_args(args) conditions = list(conditions_from_args(args)) conditions_match = lambda m: all(condition(m) for condition in conditions) filter_conditions = partial(ifilter, conditions_match) print_model = printer_from_args(args) for filename in filenames: try: models = hwp5file_models(filename) models = filter_conditions(models) for model in models: print_model(model) except ParseError, e: from hwp5.proc import logger logger.error('---- On processing %s:', filename) e.print_to_logger(logger)
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)