Refactorization

This commit is contained in:
faildev_mode 2023-05-31 17:23:59 +02:00
parent 60761df504
commit a1dfccddfc
No known key found for this signature in database
GPG Key ID: 70845C70C0F5E205
1 changed files with 15 additions and 37 deletions

View File

@ -101,36 +101,11 @@ def namespace_from(extension: type) -> dict:
namespace[i] = extension[i]
return namespace
def evaluate_content(match: re.Match, item: Item) -> str:
global config
def evaluate_this(content: str, global_ns: dict) -> str:
return re.sub(r'\{([^\s}]+([^}]*[^\s}])?)\}', partial(evaluate, global_ns=global_ns), content)
def evaluate(match: re.Match, global_ns: dict) -> str:
match = match.group(1)
# prepare globals
global_ns = namespace_from(apis.Content)
global_ns.update(config['variables'])
global_ns['path'] = item.path
global_ns.update(item.frontmatter_data)
return evaluate2(match, global_ns)
def evaluate_template(match: re.Match, item: Item, content: str) -> str:
global config
match = match.group(1)
# prepare globals
global_ns = namespace_from(apis.Content)
global_ns.update(config['variables'])
global_ns['path'] = item.path
global_ns.update(item.frontmatter_data)
global_ns['content'] = content
return evaluate2(match, global_ns)
def evaluate2(match, global_ns):
# this trick let the functions in apis.py access our environment
apis.environment = global_ns
# now let's execute the command!
@ -184,10 +159,11 @@ if __name__ == '__main__':
item = Item(path)
# evaluate {python code} in braces in content files, pass frontmatter_data to the function
content = re.sub(r'\{([^\s}]+([^}]*[^\s}])?)\}',
partial(evaluate_content, item=item),
item.content)
namespace = namespace_from(apis.Content)
namespace.update(config['variables'])
namespace['path'] = item.path
namespace.update(item.frontmatter_data)
content = evaluate_this(item.content, namespace)
# load template
if template := template_for(path):
@ -196,10 +172,12 @@ if __name__ == '__main__':
template_cache[template] = fp.read()
template_data = template_cache[template]
# evaluate and apply template
content = re.sub(r'\{([^\s}]+([^}]*[^\s}])?)\}',
partial(evaluate_template, item=item, content=content),
template_data)
namespace = namespace_from(apis.Content)
namespace.update(config['variables'])
namespace['path'] = item.path
namespace.update(item.frontmatter_data)
namespace['content'] = content
content = evaluate_this(template_data, namespace)
# TODO: do redirections
# TODO: produce HTML version