From d15065de35a535eae9448dff60270053f35885bd Mon Sep 17 00:00:00 2001
From: Sebastian Koslowski <koslowski@kit.edu>
Date: Tue, 18 Aug 2015 16:47:41 +0200
Subject: grc: move docstring extraction into subprocess

---
 grc/python/Platform.py | 40 ++++++++++++++++++++++++++++++++--------
 1 file changed, 32 insertions(+), 8 deletions(-)

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

diff --git a/grc/python/Platform.py b/grc/python/Platform.py
index 1497099f3f..56986773b5 100644
--- a/grc/python/Platform.py
+++ b/grc/python/Platform.py
@@ -24,22 +24,24 @@ from gnuradio import gr
 
 from .. base.Platform import Platform as _Platform
 from .. gui.Platform import Platform as _GUIPlatform
-from FlowGraph import FlowGraph as _FlowGraph
-from Connection import Connection as _Connection
-from Block import Block as _Block
-from Port import Port as _Port
-from Param import Param as _Param
-from Generator import Generator
-from Constants import (
+
+from . import extract_docs
+from .FlowGraph import FlowGraph as _FlowGraph
+from .Connection import Connection as _Connection
+from .Block import Block as _Block
+from .Port import Port as _Port
+from .Param import Param as _Param
+from .Generator import Generator
+from .Constants import (
     HIER_BLOCKS_LIB_DIR, BLOCK_DTD, DEFAULT_FLOW_GRAPH, BLOCKS_DIRS,
     PREFS_FILE, PREFS_FILE_OLD, CORE_TYPES
 )
 
-
 COLORS = [(name, color) for name, key, sizeof, color in CORE_TYPES]
 
 
 class Platform(_Platform, _GUIPlatform):
+
     def __init__(self):
         """
         Make a platform for gnuradio.
@@ -49,6 +51,17 @@ class Platform(_Platform, _GUIPlatform):
             os.mkdir(HIER_BLOCKS_LIB_DIR)
         if not os.path.exists(os.path.dirname(PREFS_FILE)):
             os.mkdir(os.path.dirname(PREFS_FILE))
+
+        self.block_docstrings = block_docstrings = dict()
+
+        def setter(key, docs):
+            block_docstrings[key] = '\n\n'.join(
+                '--- {0} ---\n{1}\n'.format(b, d.replace('\n\n', '\n'))
+                for b, d in docs.iteritems() if d is not None
+            )
+
+        self._docstring_extractor = extract_docs.SubprocessLoader(setter)
+
         # init
         _Platform.__init__(
             self,
@@ -80,6 +93,17 @@ class Platform(_Platform, _GUIPlatform):
             except Exception as e:
                 print >> sys.stderr, e
 
+    def load_blocks(self):
+        self._docstring_extractor.start()
+        _Platform.load_blocks(self)
+        self._docstring_extractor.finish()
+        self._docstring_extractor.wait()
+
+    def load_block_xml(self, xml_file):
+        block = _Platform.load_block_xml(self, xml_file)
+        self._docstring_extractor.query(block.get_key())
+        return block
+
     ##############################################
     # Constructors
     ##############################################
-- 
cgit v1.2.3