public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [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-23 13:52 [gentoo-commits] proj/R_overlay:master commit in: roverlay/packagerules/abstract/ André Erdmann
  -- strict thread matches above, loose matches on Subject: below --
2014-07-18 16:20 André Erdmann
2013-08-19 15:42 André Erdmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox