[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Commit-gnuradio] [gnuradio] 06/18: grc: add embedded python modules
From: |
git |
Subject: |
[Commit-gnuradio] [gnuradio] 06/18: grc: add embedded python modules |
Date: |
Tue, 8 Dec 2015 00:31:22 +0000 (UTC) |
This is an automated email from the git hooks/post-receive script.
jcorgan pushed a commit to branch master
in repository gnuradio.
commit 635bb2d62420001e4a0c34b3898aa259775e43b8
Author: Sebastian Koslowski <address@hidden>
Date: Wed Dec 2 17:45:06 2015 +0100
grc: add embedded python modules
---
grc/blocks/epy_module.xml | 33 +++++++++++++++++++++++++++++++++
grc/gui/Param.py | 2 +-
grc/python/FlowGraph.py | 22 ++++++++++++++++++----
grc/python/Generator.py | 8 ++++++--
grc/python/Param.py | 2 +-
5 files changed, 59 insertions(+), 8 deletions(-)
diff --git a/grc/blocks/epy_module.xml b/grc/blocks/epy_module.xml
new file mode 100644
index 0000000..6d6d718
--- /dev/null
+++ b/grc/blocks/epy_module.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<block>
+ <name>Python Module</name>
+ <key>epy_module</key>
+ <category>Misc</category>
+ <import>import $id # embedded python module</import>
+ <make></make>
+ <param>
+ <name>Code</name>
+ <key>source_code</key>
+ <value># this module will be imported in the into your
flowgraph</value>
+ <type>_multiline_python_external</type>
+ <hide>part</hide>
+ </param>
+ <doc>This block lets you embed a python module in your flowgraph.
+
+Code you put in this module is accessible in other blocks using the ID of this
+block. Example:
+
+If you put
+
+ a = 2
+
+ def double(arg):
+ return 2 * arg
+
+in a Python Module Block with the ID 'stuff' you can use code like
+
+ stuff.a # evals to 2
+ stuff.double(3) # evals to 6
+
+to set parameters of other blocks in your flowgraph.</doc>
+</block>
diff --git a/grc/gui/Param.py b/grc/gui/Param.py
index 515c345..6884d65 100644
--- a/grc/gui/Param.py
+++ b/grc/gui/Param.py
@@ -345,7 +345,7 @@ class FileParam(EntryParam):
PARAM_MARKUP_TMPL="""\
#set $foreground = $param.is_valid() and 'black' or 'red'
-<span foreground="$foreground"
font_desc="$font"><b>$encode($param.get_name()):
</b>$encode(repr($param))</span>"""
+<span foreground="$foreground"
font_desc="$font"><b>$encode($param.get_name()):
</b>$encode(repr($param).replace('\\n',' '))</span>"""
PARAM_LABEL_MARKUP_TMPL="""\
#set $foreground = $modified and 'blue' or $param.is_valid() and 'black' or
'red'
diff --git a/grc/python/FlowGraph.py b/grc/python/FlowGraph.py
index bedf9cc..686dae7 100644
--- a/grc/python/FlowGraph.py
+++ b/grc/python/FlowGraph.py
@@ -17,6 +17,7 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
"""
import re
+import imp
from operator import methodcaller
from . import expr_utils
@@ -203,6 +204,12 @@ class FlowGraph(_FlowGraph, _GUIFlowGraph):
self.iter_enabled_blocks())
return monitors
+ def get_python_modules(self):
+ """Iterate over custom code block ID and Source"""
+ for block in self.iter_enabled_blocks():
+ if block.get_key() == 'epy_module':
+ yield block.get_id(),
block.get_param('source_code').get_value()
+
def get_bussink(self):
bussink = filter(lambda b: _bussink_searcher.search(b.get_key()),
self.get_enabled_blocks())
@@ -213,8 +220,6 @@ class FlowGraph(_FlowGraph, _GUIFlowGraph):
return False
-
-
def get_bussrc(self):
bussrc = filter(lambda b: _bussrc_searcher.search(b.get_key()),
self.get_enabled_blocks())
@@ -278,9 +283,18 @@ class FlowGraph(_FlowGraph, _GUIFlowGraph):
#reload namespace
n = dict()
#load imports
- for imp in self.get_imports():
- try: exec imp in n
+ for code in self.get_imports():
+ try: exec code in n
except: pass
+
+ for id, code in self.get_python_modules():
+ try:
+ module = imp.new_module(id)
+ exec code in module.__dict__
+ n[id] = module
+ except:
+ pass
+
#load parameters
np = dict()
for parameter in self.get_parameters():
diff --git a/grc/python/Generator.py b/grc/python/Generator.py
index ddd32ca..d688beb 100644
--- a/grc/python/Generator.py
+++ b/grc/python/Generator.py
@@ -181,10 +181,14 @@ class TopBlockGenerator(object):
blocks = filter(lambda b: b not in (imports + parameters), blocks)
for block in blocks:
- if block.get_key() == 'epy_block':
- file_path = os.path.join(self._dirname, block.get_id() + '.py')
+ key = block.get_key()
+ file_path = os.path.join(self._dirname, block.get_id() + '.py')
+ if key == 'epy_block':
src = block.get_param('_source_code').get_value()
output.append((file_path, src))
+ elif key == 'epy_module':
+ src = block.get_param('source_code').get_value()
+ output.append((file_path, src))
# Filter out virtual sink connections
cf = lambda c: not (c.is_bus() or c.is_msg() or
c.get_sink().get_parent().is_virtual_sink())
diff --git a/grc/python/Param.py b/grc/python/Param.py
index 746f677..e60f613 100644
--- a/grc/python/Param.py
+++ b/grc/python/Param.py
@@ -31,7 +31,7 @@ from Constants import VECTOR_TYPES, COMPLEX_TYPES,
REAL_TYPES, INT_TYPES
from gnuradio import eng_notation
_check_id_matcher = re.compile('^[a-z|A-Z]\w*$')
-_show_id_matcher = re.compile('^(variable\w*|parameter|options|notebook)$')
+_show_id_matcher =
re.compile('^(variable\w*|parameter|options|notebook|epy_module)$')
#blacklist certain ids, its not complete, but should help
- [Commit-gnuradio] [gnuradio] 01/18: polar: channel construction bugfixes in Python code, (continued)
- [Commit-gnuradio] [gnuradio] 01/18: polar: channel construction bugfixes in Python code, git, 2015/12/07
- [Commit-gnuradio] [gnuradio] 04/18: polar: added more details in README about usage of channel construction code, git, 2015/12/07
- [Commit-gnuradio] [gnuradio] 02/18: polar: fixed channel construction naming error, git, 2015/12/07
- [Commit-gnuradio] [gnuradio] 07/18: grc: show epy_blocks and epy_module source in generated code preview, git, 2015/12/07
- [Commit-gnuradio] [gnuradio] 15/18: Merge remote-tracking branch 'tom/uhd/sink_ctrlport', git, 2015/12/07
- [Commit-gnuradio] [gnuradio] 16/18: Merge remote-tracking branch 'gnuradio-wg-grc/master_grcwg', git, 2015/12/07
- [Commit-gnuradio] [gnuradio] 17/18: Merge remote-tracking branch 'jdemel/polar-bugfixes', git, 2015/12/07
- [Commit-gnuradio] [gnuradio] 13/18: Merge branch 'maint', git, 2015/12/07
- [Commit-gnuradio] [gnuradio] 18/18: Merge remote-tracking branch 'jdemel/polar-systematic', git, 2015/12/07
- [Commit-gnuradio] [gnuradio] 14/18: Merge branch 'maint', git, 2015/12/07
- [Commit-gnuradio] [gnuradio] 06/18: grc: add embedded python modules,
git <=
- [Commit-gnuradio] [gnuradio] 09/18: uhd: Added controlport interface for UHD sink's "command" message handler., git, 2015/12/07
- [Commit-gnuradio] [gnuradio] 12/18: polar: systematic decoder added, git, 2015/12/07
- [Commit-gnuradio] [gnuradio] 03/18: polar: BEC channel construction optimized, git, 2015/12/07
- [Commit-gnuradio] [gnuradio] 10/18: polar: systematic test code added, git, 2015/12/07
- [Commit-gnuradio] [gnuradio] 05/18: grc: some clean-up, git, 2015/12/07
- [Commit-gnuradio] [gnuradio] 11/18: polar: sytematic encoder added, git, 2015/12/07