Mercurial > hg > decoupage
annotate decoupage/templates.py @ 91:4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Sat, 29 Mar 2014 17:17:21 -0700 |
parents | 78139c3cecfa |
children | 6b79c13bb42b |
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 |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
14 def template_dirs(): |
91
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
15 """registered template directories""" |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
16 |
3
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
17 template_dirs = set() |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
18 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
|
19 try: |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
20 formatter.load() |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
21 except: |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
22 continue |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
23 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
|
24 if os.path.isdir(template_dir): |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
25 template_dirs.add(template_dir) |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
26 return template_dirs |
83 | 27 |
28 | |
8 | 29 def templates(): |
91
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
30 """templates""" |
8 | 31 templates = [] |
32 for directory in template_dirs(): | |
83 | 33 templates.extend([os.path.join(directory, filename) |
8 | 34 for filename in os.listdir(directory) |
35 if filename.endswith('.html')]) | |
36 return templates | |
37 | |
91
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
38 def template_dict(): |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
39 """return a dict of templates""" |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
40 return {os.path.basename(template):template for template in templates()} |
83 | 41 |
3
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
42 def main(args=sys.argv[1:]): |
91
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
43 """CLI""" |
83 | 44 |
91
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
45 # parse command line |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
46 description = 'list and output available templates' |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
47 parser = argparse.ArgumentParser(description=description) |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
48 parser.add_argument('template', nargs='?', |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
49 help="output this template") |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
50 parser.add_argument('-o', '--output', dest='output', |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
51 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
|
52 # TODO |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
53 parser.add_argument('--cwd', dest='cwd', |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
54 help="output to current working directory") |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
55 options = parser.parse_args(args) |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
56 |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
57 # retrieve templates |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
58 _templates = template_dict() |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
59 |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
60 template = options.template |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
61 if template: |
83 | 62 |
91
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
63 # look up template |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
64 if not template.endswith('.html'): |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
65 template = template + '.html' |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
66 filename = _templates.get(template) |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
67 if filename is None: |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
68 parser.error("Template '{}' not in {}".format(template, ', '.join(sorted(_templates.keys())))) |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
69 content = open(filename, 'r').read() |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
70 |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
71 # divine output |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
72 output = options.output |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
73 if output: |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
74 if os.path.isdir(output): |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
75 output = os.path.join(output, 'index.html') |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
76 with open(output, 'w') as f: |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
77 f.write(content) |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
78 |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
79 directory = os.path.dirname(os.path.abspath(output)) |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
80 ini = os.path.join(directory, 'index.ini') |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
81 if not os.path.exists(ini): |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
82 pass |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
83 # TODO: output directory contents to ini |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
84 # if specified |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
85 |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
86 else: |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
87 print (content) |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
88 |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
89 else: |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
90 # list templates |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
91 for template in templates(): |
4a9c5cf9fec9
STUB: decoupage/templates.py decoupage/index.py
Jeff Hammel <k0scist@gmail.com>
parents:
83
diff
changeset
|
92 print (template) |
3
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
93 |
83 | 94 |
3
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
95 if __name__ == '__main__': |
ea5a5ef8ae2e
add stub for template printing; does not work yet
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
96 main() |