From 19944f6328f1a852ed3384e750cb2b61da50d5bf Mon Sep 17 00:00:00 2001
From: Sebastian Koslowski <koslowski@kit.edu>
Date: Mon, 12 Oct 2015 16:45:05 +0200
Subject: grc: auto-generate missing hier_blocks

---
 grc/python/FlowGraph.py | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

(limited to 'grc/python/FlowGraph.py')

diff --git a/grc/python/FlowGraph.py b/grc/python/FlowGraph.py
index 49530af8a3..9b55cb6d43 100644
--- a/grc/python/FlowGraph.py
+++ b/grc/python/FlowGraph.py
@@ -30,9 +30,11 @@ _bussrc_searcher = re.compile('^(bus_source)$')
 _bus_struct_sink_searcher = re.compile('^(bus_structure_sink)$')
 _bus_struct_src_searcher = re.compile('^(bus_structure_source)$')
 
+
 class FlowGraph(_FlowGraph, _GUIFlowGraph):
 
     def __init__(self, **kwargs):
+        self.grc_file_path = ''
         _FlowGraph.__init__(self, **kwargs)
         _GUIFlowGraph.__init__(self)
         self._eval_cache = dict()
@@ -232,7 +234,6 @@ class FlowGraph(_FlowGraph, _GUIFlowGraph):
 
         return bussrc
 
-
     def rewrite(self):
         """
         Flag the namespace to be renewed.
@@ -299,3 +300,21 @@ class FlowGraph(_FlowGraph, _GUIFlowGraph):
         #evaluate
         e = self._eval(expr, self.n, self.n_hash)
         return e
+
+    def get_new_block(self, key):
+        """Try to auto-generate the block from file if missing"""
+        block = _FlowGraph.get_new_block(self, key)
+        if not block:
+            platform = self.get_parent()
+            # we're before the initial fg rewrite(), so no evaluated values!
+            # --> use raw value instead
+            path_param = self._options_block.get_param('hier_block_src_path')
+            file_path = platform.find_file_in_paths(
+                filename=key + '.' + platform.get_key(),
+                paths=path_param.get_value(),
+                cwd=self.grc_file_path
+            )
+            if file_path:  # grc file found. load and get block
+                platform.load_and_generate_flow_graph(file_path)
+                block = _FlowGraph.get_new_block(self, key)  # can be None
+        return block
-- 
cgit v1.2.3