From 51d347d4e8390b70a4a76c6989087f5eb7bd49a2 Mon Sep 17 00:00:00 2001
From: Chris Woodall <cw@barrett.com>
Date: Tue, 17 Oct 2017 11:54:45 -0400
Subject: [PATCH] Added jinja2 templates to defaults with jinja2defaults

---
 objdict_generate/resources/objdict_schema.yaml |  3 +++
 objdict_generate/scripts/objdict_generate.py   | 18 +++++++++++++++---
 objdict_generate/version.py                    |  2 +-
 3 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/objdict_generate/resources/objdict_schema.yaml b/objdict_generate/resources/objdict_schema.yaml
index f8ab271c..bb87b5b9 100644
--- a/objdict_generate/resources/objdict_schema.yaml
+++ b/objdict_generate/resources/objdict_schema.yaml
@@ -75,6 +75,9 @@ mapping:
           constdefault:
             type: str
             required: no
+          jinja2default:
+            type: str
+            required: no
           export_for_mainboard:
             type: bool
             required: no
diff --git a/objdict_generate/scripts/objdict_generate.py b/objdict_generate/scripts/objdict_generate.py
index 0583eda5..1116571a 100755
--- a/objdict_generate/scripts/objdict_generate.py
+++ b/objdict_generate/scripts/objdict_generate.py
@@ -20,6 +20,9 @@ import sys
 import configparser
 import click
 
+def fmt_add(a, b, format="%i"):
+    return format % (int(str(a), 0) + int(str(b), 0))
+
 
 def generate_eds_section(objdict):
     eds_config = configparser.ConfigParser()
@@ -111,6 +114,16 @@ def cli(ctx, doc_dir, output_dir, master_dir, yaml_files):
         objdict['indexes'] = multikeysort(objdict['indexes'],
                                           ['index', 'subindex'])
 
+        env = jinja2.Environment(loader=jinja2.PackageLoader('objdict_generate', 'resources'))
+        env.globals['DataTypes'] = DataTypes
+        env.globals['node_id'] = objdict['node_id']
+        env.filters['fmt_add'] = fmt_add
+
+        # Go through and run templates on jinja2defaults fields
+        for index in objdict['indexes']:
+            if 'jinja2default' in index:
+                index["default"] = env.from_string(index["jinja2default"]).render()
+
         company = {"name": "Barrett Technology, LLC",
                    "email": "support@barrett.com"}
 
@@ -126,10 +139,9 @@ def cli(ctx, doc_dir, output_dir, master_dir, yaml_files):
 
         eds_entries = generate_eds_section(objdict)
 
+
         for output in outputs:
-            tmpl = jinja2.Template(get_resource_string(
-                output["template"]).decode("utf-8"))
-            tmpl.globals['DataTypes'] = DataTypes
+            tmpl = env.get_template(output["template"])
             with open(output['name'], mode='w') as output_file:
                 output_file.write(tmpl.render(
                     date=arrow.now(), company=company, objdict=objdict, master=output.get("master")))
diff --git a/objdict_generate/version.py b/objdict_generate/version.py
index 22937ef8..8f287fab 100644
--- a/objdict_generate/version.py
+++ b/objdict_generate/version.py
@@ -1,2 +1,2 @@
 #!/usr/bin/env python3
-__version__ = "0.4.0"
\ No newline at end of file
+__version__ = "0.5.0"
\ No newline at end of file
-- 
GitLab