# Path: camp/band/selectors/selector.py
# class Selector(object):
# 
#     def __init__(self, alist, mode=None):
#         raise NotImplementedError()
# 
#     def draw(self):
#         raise NotImplementedError()
# 
#     def to_data(self):
#         raise NotImplementedError()


from camp.band.selectors.selector import Selector
        self._when = when

        # FIXME: BUGLET?  Depends how you use it.
        # currently reset does NOT reset the draw_from on the when.
        # to do this, we'll need to make sure every reset() calls super()
        # as it should.  That's minor though.
        self.when = self.draw_from(self._when)

    def reset(self):
        """
        Restarts all iterators over from the beginning.
        """
        raise NotImplementedError()

    def draw_from(self, item):
        """
        In various places a band member needs to draw from a list.
        The default form of drawing from an array is to pop off the first
        element and consume it.  However, when Selectors are employed, we might
        loop endlessly over the selection.  This method exists to hide
        the need to understand choosers from those either building a band member
        or using the API at the simplest level.
        """
        if item is None:
            # this allows optional generators to be turned off.
            while True:
                yield None
        elif type(item) == list:
            for x in item:
                yield x

# Path: camp/band/selectors/selector.py
# class Selector(object):
# 
#     def __init__(self, alist, mode=None):
#         raise NotImplementedError()
# 
#     def draw(self):
#         raise NotImplementedError()
# 
#     def to_data(self):
#         raise NotImplementedError()


# Path: camp/band/members/member.py
from camp.band.selectors.selector import Selector

        self._when = when

        # FIXME: BUGLET?  Depends how you use it.
        # currently reset does NOT reset the draw_from on the when.
        # to do this, we'll need to make sure every reset() calls super()
        # as it should.  That's minor though.
        self.when = self.draw_from(self._when)

    def reset(self):
        """
        Restarts all iterators over from the beginning.
        """
        raise NotImplementedError()

    def draw_from(self, item):
        """
        In various places a band member needs to draw from a list.
        The default form of drawing from an array is to pop off the first
        element and consume it.  However, when Selectors are employed, we might
        loop endlessly over the selection.  This method exists to hide
        the need to understand choosers from those either building a band member
        or using the API at the simplest level.
        """
        if item is None:
            # this allows optional generators to be turned off.
            while True:
                yield None
        elif type(item) == list:
            for x in item:
                yield x

        elif isinstance(item, Selector):