Mercurial > piecrust2
comparison piecrust/commands/builtin/baking.py @ 92:0dd43c5f5484
More options for the `showrecord` command.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Fri, 05 Sep 2014 00:42:28 -0700 |
parents | efd0d3bacc9e |
children | 133845647083 |
comparison
equal
deleted
inserted
replaced
91:e88e330eb8dc | 92:0dd43c5f5484 |
---|---|
1 import os.path | 1 import os.path |
2 import logging | 2 import logging |
3 import hashlib | 3 import hashlib |
4 import fnmatch | |
5 import datetime | |
4 from piecrust.baking.baker import Baker | 6 from piecrust.baking.baker import Baker |
5 from piecrust.baking.records import BakeRecord | 7 from piecrust.baking.records import BakeRecord |
6 from piecrust.commands.base import ChefCommand | 8 from piecrust.commands.base import ChefCommand |
7 | 9 |
8 | 10 |
57 super(ShowRecordCommand, self).__init__() | 59 super(ShowRecordCommand, self).__init__() |
58 self.name = 'showrecord' | 60 self.name = 'showrecord' |
59 self.description = "Shows the bake record for a given output directory." | 61 self.description = "Shows the bake record for a given output directory." |
60 | 62 |
61 def setupParser(self, parser, app): | 63 def setupParser(self, parser, app): |
62 parser.add_argument('output', | 64 parser.add_argument('-o', '--output', |
63 help="The output directory for which to show the bake record " | 65 help="The output directory for which to show the bake record " |
64 "(defaults to `_counter`)", | 66 "(defaults to `_counter`)", |
65 nargs='?') | 67 nargs='?') |
68 parser.add_argument('-p', '--path', | |
69 help="A pattern that will be used to filter the relative path " | |
70 "of entries to show.") | |
66 | 71 |
67 def run(self, ctx): | 72 def run(self, ctx): |
68 out_dir = ctx.args.output or os.path.join(ctx.app.root_dir, '_counter') | 73 out_dir = ctx.args.output or os.path.join(ctx.app.root_dir, '_counter') |
69 record_cache = ctx.app.cache.getCache('baker') | 74 record_cache = ctx.app.cache.getCache('baker') |
70 record_name = hashlib.md5(out_dir.encode('utf8')).hexdigest() + '.record' | 75 record_name = hashlib.md5(out_dir.encode('utf8')).hexdigest() + '.record' |
71 if not record_cache.has(record_name): | 76 if not record_cache.has(record_name): |
72 raise Exception("No record has been created for this output path. " | 77 raise Exception("No record has been created for this output path. " |
73 "Did you bake there yet?") | 78 "Did you bake there yet?") |
74 | 79 |
80 pattern = None | |
81 if ctx.args.path: | |
82 pattern = '*%s*' % ctx.args.path.strip('*') | |
83 | |
75 record = BakeRecord.load(record_cache.getCachePath(record_name)) | 84 record = BakeRecord.load(record_cache.getCachePath(record_name)) |
76 logging.info("Bake record for: %s" % record.out_dir) | 85 logging.info("Bake record for: %s" % record.out_dir) |
77 logging.info("Last baked: %s" % record.bake_time) | 86 logging.info("Last baked: %s" % |
87 datetime.datetime.fromtimestamp(record.bake_time)) | |
78 logging.info("Entries:") | 88 logging.info("Entries:") |
79 for entry in record.entries: | 89 for entry in record.entries: |
90 if pattern: | |
91 rel_path = os.path.relpath(entry.path, ctx.app.root_dir) | |
92 if not fnmatch.fnmatch(entry.rel_path, pattern): | |
93 continue | |
80 logging.info(" - ") | 94 logging.info(" - ") |
81 logging.info(" path: %s" % entry.path) | 95 logging.info(" path: %s" % entry.path) |
82 logging.info(" source: %s" % entry.source_name) | 96 logging.info(" spec: %s:%s" % (entry.source_name, entry.rel_path)) |
83 logging.info(" config: %s" % entry.config) | 97 logging.info(" taxonomy: %s:%s" % (entry.taxonomy_name, entry.taxonomy_term)) |
84 logging.info(" base URL: %s" % entry.uri) | 98 logging.info(" config: %s" % entry.config) |
85 logging.info(" outputs: %s" % entry.out_paths) | 99 logging.info(" out URLs: %s" % entry.out_uris) |
100 logging.info(" out paths: %s" % entry.out_paths) | |
101 logging.info(" used srcs: %s" % entry.used_source_names) | |
86 | 102 |