1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
from argparse import ArgumentParser
from docx import Document
from docxcompose.composer import Composer
import os.path
import sys
def setup_parser():
parser = ArgumentParser(
description='compose multiple docx files into one file.')
parser.add_argument('master',
help='path to master template that defines styles, '
'headings and so on')
parser.add_argument('files', nargs='+',
help='path to one or more word-files to be appended '
'to the master template',
metavar='file')
parser.add_argument('-o', '--output-document', dest='ouput_document',
default='composed.docx',
help='path to the output file', metavar='file')
return parser
def require_valid_file(parser, path):
if not os.path.isfile(path):
parser.error(message='file not found {}'.format(path))
def parse_args(parser, args):
parsed_args = parser.parse_args(args=args)
require_valid_file(parser, parsed_args.master)
for file_path in parsed_args.files:
require_valid_file(parser, file_path)
return parsed_args
def compose_files(parser, parsed_args):
composer = Composer(Document(parsed_args.master))
for slave_path in parsed_args.files:
composer.append(Document(slave_path))
composer.save(parsed_args.ouput_document)
parser.exit(message='successfully composed file at {}\n'.format(
parsed_args.ouput_document))
def main(args=None):
if args is None:
args = sys.argv[1:]
parser = setup_parser()
parsed_args = parse_args(parser, args)
compose_files(parser, parsed_args)
|