Mercurial > hg > decoupage
comparison 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 |
comparison
equal
deleted
inserted
replaced
| 90:55719bcdc2c2 | 91:4a9c5cf9fec9 |
|---|---|
| 2 | 2 |
| 3 """ | 3 """ |
| 4 functionality related to templates | 4 functionality related to templates |
| 5 """ | 5 """ |
| 6 | 6 |
| 7 import argparse | |
| 7 import os | 8 import os |
| 8 import sys | 9 import sys |
| 9 from optparse import OptionParser | 10 from .index import index |
| 10 from pkg_resources import iter_entry_points | 11 from pkg_resources import iter_entry_points |
| 11 from pkg_resources import resource_filename | 12 from pkg_resources import resource_filename |
| 12 | 13 |
| 13 def template_dirs(): | 14 def template_dirs(): |
| 15 """registered template directories""" | |
| 16 | |
| 14 template_dirs = set() | 17 template_dirs = set() |
| 15 for formatter in iter_entry_points('decoupage.formatters'): | 18 for formatter in iter_entry_points('decoupage.formatters'): |
| 16 try: | 19 try: |
| 17 formatter.load() | 20 formatter.load() |
| 18 except: | 21 except: |
| 22 template_dirs.add(template_dir) | 25 template_dirs.add(template_dir) |
| 23 return template_dirs | 26 return template_dirs |
| 24 | 27 |
| 25 | 28 |
| 26 def templates(): | 29 def templates(): |
| 30 """templates""" | |
| 27 templates = [] | 31 templates = [] |
| 28 for directory in template_dirs(): | 32 for directory in template_dirs(): |
| 29 templates.extend([os.path.join(directory, filename) | 33 templates.extend([os.path.join(directory, filename) |
| 30 for filename in os.listdir(directory) | 34 for filename in os.listdir(directory) |
| 31 if filename.endswith('.html')]) | 35 if filename.endswith('.html')]) |
| 32 return templates | 36 return templates |
| 33 | 37 |
| 38 def template_dict(): | |
| 39 """return a dict of templates""" | |
| 40 return {os.path.basename(template):template for template in templates()} | |
| 34 | 41 |
| 35 def main(args=sys.argv[1:]): | 42 def main(args=sys.argv[1:]): |
| 43 """CLI""" | |
| 36 | 44 |
| 37 # comman line option parser | 45 # parse command line |
| 38 description = 'list available templates' | 46 description = 'list and output available templates' |
| 39 parser = OptionParser(description=description) | 47 parser = argparse.ArgumentParser(description=description) |
| 40 options, args = parser.parse_args(args) | 48 parser.add_argument('template', nargs='?', |
| 49 help="output this template") | |
| 50 parser.add_argument('-o', '--output', dest='output', | |
| 51 help="output to file or directory or stdout") | |
| 52 # TODO | |
| 53 parser.add_argument('--cwd', dest='cwd', | |
| 54 help="output to current working directory") | |
| 55 options = parser.parse_args(args) | |
| 41 | 56 |
| 42 # list templates | 57 # retrieve templates |
| 43 for template in templates(): | 58 _templates = template_dict() |
| 44 print template | 59 |
| 60 template = options.template | |
| 61 if template: | |
| 62 | |
| 63 # look up template | |
| 64 if not template.endswith('.html'): | |
| 65 template = template + '.html' | |
| 66 filename = _templates.get(template) | |
| 67 if filename is None: | |
| 68 parser.error("Template '{}' not in {}".format(template, ', '.join(sorted(_templates.keys())))) | |
| 69 content = open(filename, 'r').read() | |
| 70 | |
| 71 # divine output | |
| 72 output = options.output | |
| 73 if output: | |
| 74 if os.path.isdir(output): | |
| 75 output = os.path.join(output, 'index.html') | |
| 76 with open(output, 'w') as f: | |
| 77 f.write(content) | |
| 78 | |
| 79 directory = os.path.dirname(os.path.abspath(output)) | |
| 80 ini = os.path.join(directory, 'index.ini') | |
| 81 if not os.path.exists(ini): | |
| 82 pass | |
| 83 # TODO: output directory contents to ini | |
| 84 # if specified | |
| 85 | |
| 86 else: | |
| 87 print (content) | |
| 88 | |
| 89 else: | |
| 90 # list templates | |
| 91 for template in templates(): | |
| 92 print (template) | |
| 45 | 93 |
| 46 | 94 |
| 47 if __name__ == '__main__': | 95 if __name__ == '__main__': |
| 48 main() | 96 main() |
