Mercurial > piecrust2
comparison piecrust/commands/builtin/scaffolding.py @ 1186:2ead9dcb6bec
prepare: Fix scaffolding refactor code.
For some reason the previous commit was missing some changes.
| author | Ludovic Chabant <ludovic@chabant.com> |
|---|---|
| date | Fri, 23 Oct 2020 23:50:42 -0700 |
| parents | 31e8ee0bf5b2 |
| children |
comparison
equal
deleted
inserted
replaced
| 1185:24413a2963b9 | 1186:2ead9dcb6bec |
|---|---|
| 1 import os | 1 import os |
| 2 import os.path | 2 import os.path |
| 3 import logging | 3 import logging |
| 4 import time | |
| 4 from piecrust.commands.base import ( | 5 from piecrust.commands.base import ( |
| 5 ChefCommand, ExtendableChefCommand, ChefCommandExtension) | 6 ChefCommand, ExtendableChefCommand, ChefCommandExtension) |
| 6 | 7 |
| 7 | 8 |
| 8 logger = logging.getLogger(__name__) | 9 logger = logging.getLogger(__name__) |
| 10 | |
| 11 | |
| 12 def build_content(source, content_metadata, tpl_name, force_overwrite=False): | |
| 13 app = source.app | |
| 14 extensions = app.getCommandExtensions('prepare') | |
| 15 ext = next( | |
| 16 filter( | |
| 17 lambda e: tpl_name in e.getTemplateNames(app), | |
| 18 extensions), | |
| 19 None) | |
| 20 if ext is None: | |
| 21 raise Exception("No such page template: %s" % tpl_name) | |
| 22 tpl_text = ext.getTemplate(app, tpl_name) | |
| 23 if tpl_text is None: | |
| 24 raise Exception("Error loading template: %s" % tpl_name) | |
| 25 | |
| 26 content_item = source.createContent(content_metadata) | |
| 27 if content_item is None: | |
| 28 raise Exception("Can't create item.") | |
| 29 | |
| 30 from piecrust.uriutil import multi_replace | |
| 31 | |
| 32 config_tokens = { | |
| 33 '%title%': "Untitled Content", | |
| 34 '%time.today%': time.strftime('%Y/%m/%d'), | |
| 35 '%time.now%': time.strftime('%H:%M:%S') | |
| 36 } | |
| 37 config = content_item.metadata.get('config') | |
| 38 if config: | |
| 39 for k, v in config.items(): | |
| 40 config_tokens['%%%s%%' % k] = v | |
| 41 tpl_text = multi_replace(tpl_text, config_tokens) | |
| 42 | |
| 43 logger.info("Creating content: %s" % content_item.spec) | |
| 44 mode = 'w' if force_overwrite else 'x' | |
| 45 with source.openItem(content_item, mode) as f: | |
| 46 f.write(tpl_text) | |
| 47 | |
| 48 return content_item | |
| 9 | 49 |
| 10 | 50 |
| 11 class PrepareCommand(ExtendableChefCommand): | 51 class PrepareCommand(ExtendableChefCommand): |
| 12 """ Chef command for creating pages with some default content. | 52 """ Chef command for creating pages with some default content. |
| 13 """ | 53 """ |
