* [gentoo-commits] proj/R_overlay:master commit in: roverlay/packagerules/abstract/
@ 2013-08-19 15:42 André Erdmann
0 siblings, 0 replies; 3+ messages in thread
From: André Erdmann @ 2013-08-19 15:42 UTC (permalink / raw
To: gentoo-commits
commit: ba502514a831fdcb8c1c62afa3e13ece48a3adf6
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Mon Aug 19 15:23:43 2013 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Mon Aug 19 15:23:43 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=ba502514
package rules, abstract actions: support self-test
package rule action classes can implement a _selftest() function now.
Additionally, gen_str() should be implemented by all action classes.
---
roverlay/packagerules/abstract/actions.py | 41 +++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/roverlay/packagerules/abstract/actions.py b/roverlay/packagerules/abstract/actions.py
index 608d20a..2f74a8e 100644
--- a/roverlay/packagerules/abstract/actions.py
+++ b/roverlay/packagerules/abstract/actions.py
@@ -9,6 +9,10 @@ __all__ = [ 'PackageRuleAction', ]
class PackageRuleAction ( object ):
"""PackageRuleActions manipulate PackageInfo instances."""
+ class ActionNotValid ( Exception ):
+ pass
+ # --- end of RuleNotValid ---
+
INDENT = 3 * ' '
def __init__ ( self, priority=1000 ):
@@ -36,4 +40,41 @@ class PackageRuleAction ( object ):
raise NotImplementedError()
# --- end of apply_action (...) ---
+ def _selftest ( self ):
+ """Performs a self-test. See do_test() for details.
+
+ Returns: success (True/False)
+
+ Note: This method always returns True.
+ Derived classes may implement it.
+ """
+ return True
+ # --- end of _selftest (...) ---
+
+ def do_test ( self, return_on_error=False ):
+ """Tells this action to perform a self-test.
+
+ arguments:
+ * return_on_error -- return False if the self-test does not succeed
+
+ Returns: True/False
+
+ Raises: PackageRuleAction.ActionNotValid if the self-test fails and
+ return_on_error does not evaluate to True.
+ """
+ result = self._selftest()
+ if result or return_on_error:
+ return result
+ else:
+ raise self.ActionNotValid ( '\"{action}\"'.format (
+ action=( '\n'.join ( self.gen_str ( 0 ) ) )
+ ) )
+ # --- end of do_test (...) ---
+
+ def gen_str ( self, level ):
+ raise NotImplementedError (
+ "{}.{}()".format ( self.__class__.__name__, "gen_str" )
+ )
+ # --- end of gen_str (...) ---
+
# --- end of PackageRuleAction ---
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [gentoo-commits] proj/R_overlay:master commit in: roverlay/packagerules/abstract/
@ 2013-08-23 13:52 André Erdmann
0 siblings, 0 replies; 3+ messages in thread
From: André Erdmann @ 2013-08-23 13:52 UTC (permalink / raw
To: gentoo-commits
commit: 84802d75d34c2988f113ee579f6909bc1f0a8868
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Fri Aug 23 11:19:42 2013 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Fri Aug 23 11:19:42 2013 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=84802d75
package rules, abstract actions: support namespace
sub-class Namespaceable, which adds a from_namespace() init function.
---
roverlay/packagerules/abstract/actions.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/roverlay/packagerules/abstract/actions.py b/roverlay/packagerules/abstract/actions.py
index 2f74a8e..0e53bcb 100644
--- a/roverlay/packagerules/abstract/actions.py
+++ b/roverlay/packagerules/abstract/actions.py
@@ -6,7 +6,9 @@
__all__ = [ 'PackageRuleAction', ]
-class PackageRuleAction ( object ):
+import roverlay.util.namespace
+
+class PackageRuleAction ( roverlay.util.namespace.Namespaceable ):
"""PackageRuleActions manipulate PackageInfo instances."""
class ActionNotValid ( Exception ):
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [gentoo-commits] proj/R_overlay:master commit in: roverlay/packagerules/abstract/
@ 2014-07-18 16:20 André Erdmann
0 siblings, 0 replies; 3+ messages in thread
From: André Erdmann @ 2014-07-18 16:20 UTC (permalink / raw
To: gentoo-commits
commit: 9b83f08aa38fb713ff4c9fc8c20e9ff4a3fa896d
Author: André Erdmann <dywi <AT> mailerd <DOT> de>
AuthorDate: Thu Jul 17 19:11:38 2014 +0000
Commit: André Erdmann <dywi <AT> mailerd <DOT> de>
CommitDate: Thu Jul 17 19:11:38 2014 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/R_overlay.git;a=commit;h=9b83f08a
package rules: optionally merge acceptor compounds
... of the same type, only AND and OR
OR(a,OR(b,AND(AND,c))) -> OR(a,b,AND(c))
---
roverlay/packagerules/abstract/acceptors.py | 60 ++++++++++++++++++++++++++---
1 file changed, 54 insertions(+), 6 deletions(-)
diff --git a/roverlay/packagerules/abstract/acceptors.py b/roverlay/packagerules/abstract/acceptors.py
index 7618f43..aafc0e7 100644
--- a/roverlay/packagerules/abstract/acceptors.py
+++ b/roverlay/packagerules/abstract/acceptors.py
@@ -8,12 +8,15 @@
Classes provided by this module:
* Acceptor -- base class for all acceptors
* ValueMatchAcceptor -- base class for acceptors that compare a value
-* _AcceptorCompound -- base class combines one more more acceptors
+* _AcceptorCompound -- base class combines one or more acceptors
and represents a boolean term
IOW, they realize a function "[Acceptor] -> Bool"
+* _SelfConsumingAcceptorCompound
+ -- extended _AcceptorCompound that is able to consume
+ sub-acceptors of the same type (class)
* Acceptor_<type> -- specific _AcceptorCompound classes
--> Acceptor_AND
--> Acceptor_OR
+-> Acceptor_AND (self-consuming)
+-> Acceptor_OR (self-consuming)
-> Acceptor_XOR1
-> Acceptor_NOR
@@ -55,6 +58,15 @@ class Acceptor ( object ):
self.logger = logger.getChild ( self.__class__.__name__ )
# --- end of logger (...) ---
+ def merge_sub_compounds ( self ):
+ """Recursively consumes sub compounds of the same type (class),
+ without preserving their priority.
+
+ Must be called manually before prepare().
+ """
+ pass
+ # --- end of merge_sub_compounds (...) ---
+
def prepare ( self ):
"""Prepare the Acceptor for usage (typically used after loading
it from a file).
@@ -121,7 +133,7 @@ class _AcceptorCompound ( Acceptor ):
Raises: EmptyAcceptorError
"""
- if len ( self._acceptors ) > 0:
+ if self._acceptors:
for acceptor in self._acceptors:
acceptor.prepare()
self._acceptors = roverlay.util.priosort ( self._acceptors )
@@ -165,7 +177,43 @@ class _AcceptorCompound ( Acceptor ):
# --- end of _AcceptorCompound ---
-class Acceptor_OR ( _AcceptorCompound ):
+class _SelfConsumingAcceptorCompound ( _AcceptorCompound ):
+
+ def merge_sub_compounds ( self ):
+ """Recursively consumes sub compounds of the same type (class),
+ without preserving their priority.
+
+ Must be called manually before prepare().
+ """
+ if not self._acceptors:
+ return
+
+ acceptors = []
+ append_acceptor = acceptors.append
+ my_cls = self.__class__
+ anything_to_merge = False
+
+ for acceptor in self._acceptors:
+ acceptor.merge_sub_compounds()
+
+ if acceptor.__class__ == my_cls:
+ # ^ must exactly match, no hasattr() etc
+ for acceptor_to_merge in acceptor._acceptors:
+ anything_to_merge = True
+ append_acceptor ( acceptor_to_merge )
+ # --
+ else:
+ append_acceptor ( acceptor )
+ # --
+
+ if anything_to_merge:
+ self._acceptors = acceptors
+ # --- end of merge_sub_compounds (...) ---
+
+# --- end of _SelfConsumingAcceptorCompound ---
+
+
+class Acceptor_OR ( _SelfConsumingAcceptorCompound ):
"""OR( <Acceptors> )"""
def accepts ( self, p_info ):
@@ -183,7 +231,7 @@ class Acceptor_OR ( _AcceptorCompound ):
# --- end of Acceptor_OR ---
-class Acceptor_AND ( _AcceptorCompound ):
+class Acceptor_AND ( _SelfConsumingAcceptorCompound ):
"""AND( <Acceptors> )"""
def accepts ( self, p_info ):
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-07-18 16:20 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-19 15:42 [gentoo-commits] proj/R_overlay:master commit in: roverlay/packagerules/abstract/ André Erdmann
-- strict thread matches above, loose matches on Subject: below --
2013-08-23 13:52 André Erdmann
2014-07-18 16:20 André Erdmann
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox