691 """return a selector chaining given selectors. If one of |
691 """return a selector chaining given selectors. If one of |
692 the selectors fail, selection will fail, else the returned score |
692 the selectors fail, selection will fail, else the returned score |
693 will be the sum of each selector'score |
693 will be the sum of each selector'score |
694 """ |
694 """ |
695 assert selectors |
695 assert selectors |
696 selector = AndSelector(*selectors) |
696 # XXX do we need to create the AndSelector here, a tuple might be enough |
|
697 selector = AndSelector(*[_instantiate_selector(selector) |
|
698 for selector in selectors]) |
697 if 'name' in kwargs: |
699 if 'name' in kwargs: |
698 selector.__name__ = kwargs['name'] |
700 selector.__name__ = kwargs['name'] |
699 return selector |
701 return selector |
700 |
702 |
701 def chainfirst(*selectors, **kwargs): |
703 def chainfirst(*selectors, **kwargs): |
702 """return a selector chaining given selectors. If all |
704 """return a selector chaining given selectors. If all |
703 the selectors fail, selection will fail, else the returned score |
705 the selectors fail, selection will fail, else the returned score |
704 will be the first non-zero selector score |
706 will be the first non-zero selector score |
705 """ |
707 """ |
706 assert selectors |
708 assert selectors |
707 selector = OrSelector(*selectors) |
709 selector = OrSelector(*[_instantiate_selector(selector) |
|
710 for selector in selectors]) |
708 if 'name' in kwargs: |
711 if 'name' in kwargs: |
709 selector.__name__ = kwargs['name'] |
712 selector.__name__ = kwargs['name'] |
710 return selector |
713 return selector |