43 lines
1.3 KiB
Python
43 lines
1.3 KiB
Python
# The render process for the cli does NOT use the rend project for a couple
|
|
# of reasons
|
|
# 1. Config needs to be very early in the startup, therefore it cannot use
|
|
# asyncio, all rend funcs use asyncio
|
|
# 2. Config will not allow for template wrapping as the render is just a
|
|
# single command line render
|
|
|
|
|
|
def process(hub, renderer, value):
|
|
"""
|
|
Take a renderer and a value, process it, and return the processed value
|
|
|
|
This is intended to load a string through the config render system
|
|
"""
|
|
return getattr(hub, f"config.render.{renderer}.render")(value)
|
|
|
|
|
|
def pipe(hub, dpipe, data):
|
|
"""
|
|
Given a render pipe, render the given data
|
|
"""
|
|
for render in dpipe:
|
|
if isinstance(render, bytes):
|
|
render = render.decode()
|
|
data = hub.config.render.init.process(render, data)
|
|
return data
|
|
|
|
|
|
def load_file(hub, renderer, fn):
|
|
"""
|
|
Load up a file with the passed renderer unless the file contains a
|
|
renderer she-bang line
|
|
"""
|
|
with open(fn, "rb") as rfh:
|
|
data = rfh.read()
|
|
if not data:
|
|
return {}
|
|
if data.startswith(b"#!"):
|
|
dpipe = data[2 : data.index(b"\n")].split(b"|")
|
|
return hub.config.render.init.pipe(dpipe, data)
|
|
else:
|
|
return hub.config.render.init.process(renderer, data)
|