summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Koslowski <koslowski@kit.edu>2016-04-05 10:15:31 +0200
committerSebastian Koslowski <koslowski@kit.edu>2016-04-05 10:16:19 +0200
commit2708f33f4531b33c212c60c3cc1fc3d3a92b5ae1 (patch)
treef743249efb3c68ca313a17227e72c72ad9620eb0
parentc285036f5674ee54c16b46c3088ed86503d63d83 (diff)
grc-refactoring: move template arg to param
-rw-r--r--grc/core/Block.py25
-rw-r--r--grc/core/Param.py24
m---------volk0
3 files changed, 25 insertions, 24 deletions
diff --git a/grc/core/Block.py b/grc/core/Block.py
index d36fe3b049..c2c7d4e821 100644
--- a/grc/core/Block.py
+++ b/grc/core/Block.py
@@ -34,28 +34,6 @@ from . Element import Element
from . FlowGraph import _variable_matcher
-class TemplateArg(UserDict):
- """
- A cheetah template argument created from a param.
- The str of this class evaluates to the param's to code method.
- The use of this class as a dictionary (enum only) will reveal the enum opts.
- The __call__ or () method can return the param evaluated to a raw model data type.
- """
-
- def __init__(self, param):
- UserDict.__init__(self)
- self._param = param
- if param.is_enum():
- for key in param.get_opt_keys():
- self[key] = str(param.get_opt(key))
-
- def __str__(self):
- return str(self._param.to_code())
-
- def __call__(self):
- return self._param.get_evaluated()
-
-
def _get_keys(lst):
return [elem.get_key() for elem in lst]
@@ -714,7 +692,8 @@ class Block(Element):
tmpl = str(tmpl)
if '$' not in tmpl:
return tmpl
- n = dict((p.get_key(), TemplateArg(p)) for p in self.get_params())
+ n = dict((param.get_key(), param.template_arg)
+ for param in self.get_params()) # TODO: cache that
try:
return str(Template(tmpl, n))
except Exception as err:
diff --git a/grc/core/Param.py b/grc/core/Param.py
index 99106defe4..04c4967f53 100644
--- a/grc/core/Param.py
+++ b/grc/core/Param.py
@@ -18,7 +18,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
"""
import ast
-
+import weakref
import re
from . import Constants
@@ -121,6 +121,27 @@ class Option(Element):
return self._opts.values()
+class TemplateArg(object):
+ """
+ A cheetah template argument created from a param.
+ The str of this class evaluates to the param's to code method.
+ The use of this class as a dictionary (enum only) will reveal the enum opts.
+ The __call__ or () method can return the param evaluated to a raw python data type.
+ """
+
+ def __init__(self, param):
+ self._param = weakref.proxy(param)
+
+ def __getitem__(self, item):
+ return str(self._param.get_opt(item)) if self._param.is_enum() else NotImplemented
+
+ def __str__(self):
+ return str(self._param.to_code())
+
+ def __call__(self):
+ return self._param.get_evaluated()
+
+
class Param(Element):
is_param = True
@@ -184,6 +205,7 @@ class Param(Element):
self._default = value
self._init = False
self._hostage_cells = list()
+ self.template_arg = TemplateArg(self)
def get_types(self):
return (
diff --git a/volk b/volk
-Subproject c2c7f82aea2ed99df66fad2b91ed29791d7818a
+Subproject c141e937498ee6fb65aff10c14276aa9037a1aa