From dc9e9db16047ec589a7b0488fac04c5bb682903c Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Wed, 26 Aug 2009 13:29:28 -0700 Subject: added rewrite methods to element to separate from validation logic --- grc/base/Element.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'grc/base/Element.py') diff --git a/grc/base/Element.py b/grc/base/Element.py index 16000c46c..87cedb37f 100644 --- a/grc/base/Element.py +++ b/grc/base/Element.py @@ -1,5 +1,5 @@ """ -Copyright 2008 Free Software Foundation, Inc. +Copyright 2008, 2009 Free Software Foundation, Inc. This file is part of GNU Radio GNU Radio Companion is free software; you can redistribute it and/or @@ -38,6 +38,8 @@ class Element(object): def add_error_message(self, msg): self._error_messages.append(msg) def get_error_messages(self): return self._error_messages + def rewrite(self): pass + def get_enabled(self): return True def get_parent(self): return self._parent -- cgit From 30513fdc9afa3d8e9d4dce4214299d89aed3c409 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Wed, 2 Sep 2009 13:16:47 -0700 Subject: Removed the flagging api and usage from the base classes. Far better to flag the namespace for renewing once in the flowgraph.py --- grc/base/Element.py | 12 ------------ 1 file changed, 12 deletions(-) (limited to 'grc/base/Element.py') diff --git a/grc/base/Element.py b/grc/base/Element.py index 87cedb37f..02b57df3a 100644 --- a/grc/base/Element.py +++ b/grc/base/Element.py @@ -21,7 +21,6 @@ class Element(object): def __init__(self, parent=None): self._parent = parent - self.flag() def test(self): """ @@ -44,17 +43,6 @@ class Element(object): def get_parent(self): return self._parent - ############################################## - ## Update flagging - ############################################## - def is_flagged(self): return self._flag - def flag(self): - self._flag = True - if self.get_parent(): self.get_parent().flag() - def deflag(self): - self._flag = False - if self.get_parent(): self.get_parent().deflag() - ############################################## ## Type testing methods ############################################## -- cgit From 6b47cc3dc64d86cb19eb28ab4843a0f278db6d0a Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Thu, 3 Sep 2009 15:46:07 -0700 Subject: we dont use test() -> remove it --- grc/base/Element.py | 7 ------- 1 file changed, 7 deletions(-) (limited to 'grc/base/Element.py') diff --git a/grc/base/Element.py b/grc/base/Element.py index 02b57df3a..43cee886c 100644 --- a/grc/base/Element.py +++ b/grc/base/Element.py @@ -22,13 +22,6 @@ class Element(object): def __init__(self, parent=None): self._parent = parent - def test(self): - """ - Test the element against failures. - Overload this method in sub-classes. - """ - pass - ################################################## # Element Validation API ################################################## -- cgit From 58cebfd63726dc2082ab31681afcd78e25c36132 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Sat, 5 Sep 2009 00:45:14 -0700 Subject: Implement a recursive validation api in the base Element class. The rewrite and validate methods will invoke themselves on the child elements. The error messages are now a super-list of element and child error messages. As a side-effect, this cleans up code in base Block and Flowgraph class. --- grc/base/Element.py | 48 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 5 deletions(-) (limited to 'grc/base/Element.py') diff --git a/grc/base/Element.py b/grc/base/Element.py index 43cee886c..e77e7ce08 100644 --- a/grc/base/Element.py +++ b/grc/base/Element.py @@ -25,16 +25,54 @@ class Element(object): ################################################## # Element Validation API ################################################## - def validate(self): self._error_messages = list() - def is_valid(self): return not self.get_error_messages() or not self.get_enabled() - def add_error_message(self, msg): self._error_messages.append(msg) - def get_error_messages(self): return self._error_messages + def validate(self): + """ + Validate this element and call validate on all children. + Call this base method before adding error messages in the subclass. + """ + self._error_messages = list() + for child in self.get_children(): child.validate() - def rewrite(self): pass + def is_valid(self): + """ + Is this element valid? + @return true when the element is enabled and has no error messages + """ + return not self.get_error_messages() or not self.get_enabled() + + def add_error_message(self, msg): + """ + Add an error message to the list of errors. + @param msg the error message string + """ + self._error_messages.append(msg) + + def get_error_messages(self): + """ + Get the list of error messages from this element and all of its children. + Cleverly indent the children error messages for printing purposes. + @return a list of error message strings + """ + error_messages = list(self._error_messages) #make a copy + for child in self.get_children(): + for msg in child.get_error_messages(): + error_messages.append("%s:\n\t%s"%(child, msg.replace("\n", "\n\t"))) + return error_messages + + def rewrite(self): + """ + Rewrite this element and call rewrite on all children. + Call this base method before rewriting the element. + """ + for child in self.get_children(): child.rewrite() def get_enabled(self): return True + ############################################## + ## Tree-like API + ############################################## def get_parent(self): return self._parent + def get_children(self): return list() ############################################## ## Type testing methods -- cgit From 3f16d0acf93bbe8da7690f209782783ae8afb1c6 Mon Sep 17 00:00:00 2001 From: Josh Blum Date: Thu, 17 Sep 2009 22:58:26 -0700 Subject: bugfix: exclude disabled children from consideration in valid condition --- grc/base/Element.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'grc/base/Element.py') diff --git a/grc/base/Element.py b/grc/base/Element.py index e77e7ce08..a57090f3b 100644 --- a/grc/base/Element.py +++ b/grc/base/Element.py @@ -50,11 +50,12 @@ class Element(object): def get_error_messages(self): """ Get the list of error messages from this element and all of its children. + Do not include the error messages from disabled children. Cleverly indent the children error messages for printing purposes. @return a list of error message strings """ error_messages = list(self._error_messages) #make a copy - for child in self.get_children(): + for child in filter(lambda c: c.get_enabled(), self.get_children()): for msg in child.get_error_messages(): error_messages.append("%s:\n\t%s"%(child, msg.replace("\n", "\n\t"))) return error_messages -- cgit