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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
Jeff Hammel <jhammel@mozilla.com>
parents: 8
diff changeset
3 """
Jeff Hammel <jhammel@mozilla.com>
parents: 8
diff changeset
4 functionality related to templates
Jeff Hammel <jhammel@mozilla.com>
parents: 8
diff changeset
5 """
Jeff Hammel <jhammel@mozilla.com>
parents: 8
diff changeset
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
16d41af2d8ef add ability to print templates
k0s <k0scist@gmail.com>
parents: 7
diff changeset
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
Jeff Hammel <jhammel@mozilla.com>
parents: 8
diff changeset
31
Jeff Hammel <jhammel@mozilla.com>
parents: 8
diff changeset
32
8
16d41af2d8ef add ability to print templates
k0s <k0scist@gmail.com>
parents: 7
diff changeset
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
16d41af2d8ef add ability to print templates
k0s <k0scist@gmail.com>
parents: 7
diff changeset
36 templates = []
16d41af2d8ef add ability to print templates
k0s <k0scist@gmail.com>
parents: 7
diff changeset
37 for directory in template_dirs():
83
Jeff Hammel <jhammel@mozilla.com>
parents: 8
diff changeset
38 templates.extend([os.path.join(directory, filename)
8
16d41af2d8ef add ability to print templates
k0s <k0scist@gmail.com>
parents: 7
diff changeset
39 for filename in os.listdir(directory)
16d41af2d8ef add ability to print templates
k0s <k0scist@gmail.com>
parents: 7
diff changeset
40 if filename.endswith('.html')])
16d41af2d8ef add ability to print templates
k0s <k0scist@gmail.com>
parents: 7
diff changeset
41 return templates
16d41af2d8ef add ability to print templates
k0s <k0scist@gmail.com>
parents: 7
diff changeset
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
Jeff Hammel <jhammel@mozilla.com>
parents: 8
diff changeset
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
Jeff Hammel <jhammel@mozilla.com>
parents: 8
diff changeset
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
Jeff Hammel <jhammel@mozilla.com>
parents: 8
diff changeset
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()