def compile_conf_templates(conf, tmpldirs, workdir, templates_key="templates"): """ Compile template config files. :param conf: Config object holding templates info :param tmpldirs: Template paths :param workdir: Working dir :param template_keys: Template keys to search each templates """ for k, v in conf.get(templates_key, {}).iteritems(): src = v.get("src", None) dst = v.get("dst", src) if src is None: logging.warn("{} lacks 'src' parameter".format(k)) continue if os.path.sep in src: logging.debug("Adding subdirs of source to template paths: " + src) srcdirs = [os.path.join(d, os.path.dirname(src)) for d in tmpldirs] else: srcdirs = tmpldirs # strip dir part as it will be searched from srcdir. src = os.path.basename(src) dst = os.path.join(workdir, dst) tpaths = srcdirs + [workdir] logging.debug("Generating {} from {} [{}]".format(dst, src, k)) logging.debug("Template path: " + ", ".join(tpaths)) anytemplate.render_to(src, conf, dst, at_paths=tpaths, at_engine="jinja2")
def render_to(template, context=None, output=None, tpaths=None): """ :param template: Template file path :param context: A dict or dict-like object to instantiate given template file :param output: File path to write the rendered result string to or None/'-' to print it to stdout :param tpaths: Template search paths """ anytemplate.render_to(template, context, output, at_paths=tpaths, at_engine="jinja2", at_ask_missing=True, extensions=_JINJA2_EXTS)
def main(argv=sys.argv): if len(argv) < 5: print("Usage: %s TEMPLATE_FILE CONTEXT_FILE OUTPUT_FILE TPATHS" % argv[0]) sys.exit(-1) (template, context_f, output, paths) = argv[1:5] tpaths = paths.split(':') context = anyconfig.load(context_f) anytemplate.render_to(template, context, output, at_paths=tpaths, at_engine="jinja2", at_ask_missing=True, extensions=_JINJA2_EXTS)
def dump_depgraph(root, ers, workdir=None, outname="rpm_depgraph_gv", tpaths=fleure.globals.FLEURE_TEMPLATE_PATHS): """ Make up context to generate RPM dependency graph w/ graphviz (sfdp) from the RPM database files for given host group. :param root: Host group's root dir where 'var/lib/rpm' exists :param ers: List of errata dict, see :func:`analyze_errata` in fleure.main :param workdir: Working dir to dump result :param outname: Output file base name :param tpaths: A list of template search paths """ if workdir is None: workdir = root ctx = _make_depgraph_context(root, ers) fleure.utils.json_dump(ctx, os.path.join(workdir, outname + ".json")) output = os.path.join(workdir, outname + ".dot") opts = dict(at_paths=tpaths, at_engine="jinja2", at_ask_missing=True) anytemplate.render_to("rpm_depgraph_gv.dot.j2", ctx, output, **opts) anytemplate.render_to("rpm_depgraph_gv.css.j2", ctx, os.path.join(workdir, outname + ".css"), **opts) anytemplate.render_to("rpm_depgraph.html.j2", ctx, os.path.join(workdir, "rpm_depgraph.html"), **opts) output2 = os.path.join(workdir, outname + ".svg") cmd_s = "sfdp -Tsvg -o%s %s" % (output2, output) (rcode, out, err) = fleure.utils.subproc_call(cmd_s, timeout=120) if rcode != 0: if not err: err = "Maybe timeout occurs" LOG.warn(_("Failed to generate a SVG file: in=%s, out=%s, " "out/err=%s/%s"), output, output2, out, err)