Mercurial > hg > decoupage
annotate decoupage/templates.py @ 109:7cb236c32d0b
[templates] --cwd requires no argument
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Fri, 07 Jul 2017 08:49:54 -0700 |
parents | 6b79c13bb42b |
children |
rev | line source |
---|---|
3
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
2 |
83 | 3 """ |
4 functionality related to templates | |
5 """ | |
6 | |
91
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
7 import argparse |
3
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
8 import os |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
9 import sys |
91
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
10 from .index import index |
3
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
11 from pkg_resources import iter_entry_points |
8 | 12 from pkg_resources import resource_filename |
3
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
13 |
103
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
14 |
3
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
15 def template_dirs(): |
103
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
16 """ |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
17 returns set of registered template directories |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
18 from `decoupage.formatters` setuptools entrypoint |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
19 """ |
91
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
20 |
3
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
21 template_dirs = set() |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
22 for formatter in iter_entry_points('decoupage.formatters'): |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
23 try: |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
24 formatter.load() |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
25 except: |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
26 continue |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
27 template_dir = resource_filename(formatter.module_name, 'templates') |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
28 if os.path.isdir(template_dir): |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
29 template_dirs.add(template_dir) |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
30 return template_dirs |
83 | 31 |
32 | |
8 | 33 def templates(): |
103
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
34 """return all registered templates""" |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
35 |
8 | 36 templates = [] |
37 for directory in template_dirs(): | |
83 | 38 templates.extend([os.path.join(directory, filename) |
8 | 39 for filename in os.listdir(directory) |
40 if filename.endswith('.html')]) | |
41 return templates | |
42 | |
103
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
43 |
91
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
44 def template_dict(): |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
45 """return a dict of templates""" |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
46 return {os.path.basename(template):template for template in templates()} |
83 | 47 |
103
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
48 |
3
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
49 def main(args=sys.argv[1:]): |
91
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
50 """CLI""" |
83 | 51 |
91
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
52 # parse command line |
103
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
53 description = """list and output available templates. |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
54 If no argument is given list all full paths to templates. |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
55 If `template` is provided, output its contents. |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
56 """ |
91
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
57 parser = argparse.ArgumentParser(description=description) |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
58 parser.add_argument('template', nargs='?', |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
59 help="output this template") |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
60 parser.add_argument('-o', '--output', dest='output', |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
61 help="output to file or directory or stdout") |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
62 parser.add_argument('--cwd', dest='cwd', |
109
7cb236c32d0b
[templates] --cwd requires no argument
Jeff Hammel <k0scist@gmail.com>
parents:
103
diff
changeset
|
63 action='store_true', default=False, |
91
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
64 help="output to current working directory") |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
65 options = parser.parse_args(args) |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
66 |
103
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
67 # validate options |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
68 if options.cwd: |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
69 if options.output: |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
70 parser.error("Overspecified: `--cwd` cannot be used with `--output`") |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
71 options.output = os.getcwd() |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
72 |
91
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
73 # retrieve templates |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
74 _templates = template_dict() |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
75 |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
76 template = options.template |
103
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
77 if not template: |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
78 # list templates and return |
91
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
79 for template in templates(): |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
80 print (template) |
103
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
81 return |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
82 |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
83 # look up template |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
84 if not template.endswith('.html'): |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
85 template += '.html' |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
86 filename = _templates.get(template) |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
87 if not filename: |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
88 parser.error("Template '{}' not in {}".format(template, ', '.join(sorted(_templates.keys())))) |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
89 content = open(filename, 'r').read() |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
90 |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
91 # divine output |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
92 output = options.output |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
93 if output: |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
94 if os.path.isdir(output): |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
95 output = os.path.join(output, 'index.html') |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
96 with open(output, 'w') as f: |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
97 f.write(content) |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
98 else: |
6b79c13bb42b
untangle `decoupage-templates` console script + minor cleanup + version bump
Jeff Hammel <k0scist@gmail.com>
parents:
91
diff
changeset
|
99 print (content) |
3
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
100 |
83 | 101 |
3
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
102 if __name__ == '__main__': |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
103 main() |