File: command.py

package info (click to toggle)
python-docxcompose 1.4.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,100 kB
  • sloc: python: 2,336; makefile: 14; xml: 5; sh: 3
file content (55 lines) | stat: -rw-r--r-- 1,735 bytes parent folder | download | duplicates (3)
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)