Example #1
0
 def options(self, *args, **kwargs):
     """Return a new Query object, applying the given list of
     MapperOptions.
     """
     q = self._clone()
     for opt in util.flatten_iterator(args):
         q.with_options.append(opt)
         opt.process_query(q)
     for opt in util.flatten_iterator(self.with_options):
         opt.process_query(self)
     return q
 def __init__(self, mapper, options):
     self.mapper = mapper
     self.options = options
     self.attributes = {}
     self.recursion_stack = util.Set()
     for opt in util.flatten_iterator(options):
         self.accept_option(opt)
Example #3
0
 def __init__(self, mapper, options):
     self.mapper = mapper
     self.options = options
     self.attributes = {}
     self.recursion_stack = util.Set()
     for opt in util.flatten_iterator(options):
         self.accept_option(opt)
Example #4
0
    def __init__(self, class_or_mapper, session=None, entity_name=None, lockmode=None, with_options=None, extension=None, **kwargs):
        if isinstance(class_or_mapper, type):
            self.mapper = mapper.class_mapper(class_or_mapper, entity_name=entity_name)
        else:
            self.mapper = class_or_mapper.compile()
        self.with_options = with_options or []
        self.select_mapper = self.mapper.get_select_mapper().compile()
        self.always_refresh = kwargs.pop('always_refresh', self.mapper.always_refresh)
        self.lockmode = lockmode
        self.extension = mapper._ExtensionCarrier()
        if extension is not None:
            self.extension.append(extension)
        self.extension.append(self.mapper.extension)
        self.is_polymorphic = self.mapper is not self.select_mapper
        self._session = session
        if not hasattr(self.mapper, '_get_clause'):
            _get_clause = sql.and_()
            for primary_key in self.primary_key_columns:
                _get_clause.clauses.append(primary_key == sql.bindparam(primary_key._label, type=primary_key.type, unique=True))
            self.mapper._get_clause = _get_clause
            
        self._entities = []
        self._get_clause = self.mapper._get_clause

        self._order_by = kwargs.pop('order_by', False)
        self._group_by = kwargs.pop('group_by', False)
        self._distinct = kwargs.pop('distinct', False)
        self._offset = kwargs.pop('offset', None)
        self._limit = kwargs.pop('limit', None)
        self._criterion = None
        self._joinpoint = self.mapper
        self._from_obj = [self.table]

        for opt in util.flatten_iterator(self.with_options):
            opt.process_query(self)
Example #5
0
def _instrument_membership_mutator(method, before, argument, after):
    """Route method args and/or return value through the collection adapter."""

    # This isn't smart enough to handle @adds(1) for 'def fn(self, (a, b))'
    if before:
        fn_args = list(sautil.flatten_iterator(inspect.getargspec(method)[0]))
        if type(argument) is int:
            pos_arg = argument
            named_arg = len(fn_args) > argument and fn_args[argument] or None
        else:
            if argument in fn_args:
                pos_arg = fn_args.index(argument)
            else:
                pos_arg = None
            named_arg = argument
        del fn_args

    def wrapper(*args, **kw):
        if before:
            if pos_arg is None:
                if named_arg not in kw:
                    raise exceptions.ArgumentError("Missing argument %s" %
                                                   argument)
                value = kw[named_arg]
            else:
                if len(args) > pos_arg:
                    value = args[pos_arg]
                elif named_arg in kw:
                    value = kw[named_arg]
                else:
                    raise exceptions.ArgumentError("Missing argument %s" %
                                                   argument)

        initiator = kw.pop('_sa_initiator', None)
        if initiator is False:
            executor = None
        else:
            executor = getattr(args[0], '_sa_adapter', None)

        if before and executor:
            getattr(executor, before)(value, initiator)

        if not after or not executor:
            return method(*args, **kw)
        else:
            res = method(*args, **kw)
            if res is not None:
                getattr(executor, after)(res, initiator)
            return res

    try:
        wrapper._sa_instrumented = True
        wrapper.__name__ = method.__name__
        wrapper.__doc__ = method.__doc__
    except:
        pass
    return wrapper
Example #6
0
def _instrument_membership_mutator(method, before, argument, after):
    """Route method args and/or return value through the collection adapter."""

    # This isn't smart enough to handle @adds(1) for 'def fn(self, (a, b))'
    if before:
        fn_args = list(sautil.flatten_iterator(inspect.getargspec(method)[0]))
        if type(argument) is int:
            pos_arg = argument
            named_arg = len(fn_args) > argument and fn_args[argument] or None
        else:
            if argument in fn_args:
                pos_arg = fn_args.index(argument)
            else:
                pos_arg = None
            named_arg = argument
        del fn_args

    def wrapper(*args, **kw):
        if before:
            if pos_arg is None:
                if named_arg not in kw:
                    raise exceptions.ArgumentError(
                        "Missing argument %s" % argument)
                value = kw[named_arg]
            else:
                if len(args) > pos_arg:
                    value = args[pos_arg]
                elif named_arg in kw:
                    value = kw[named_arg]
                else:
                    raise exceptions.ArgumentError(
                        "Missing argument %s" % argument)

        initiator = kw.pop('_sa_initiator', None)
        if initiator is False:
            executor = None
        else:
            executor = getattr(args[0], '_sa_adapter', None)

        if before and executor:
            getattr(executor, before)(value, initiator)

        if not after or not executor:
            return method(*args, **kw)
        else:
            res = method(*args, **kw)
            if res is not None:
                getattr(executor, after)(res, initiator)
            return res
    try:
        wrapper._sa_instrumented = True
        wrapper.__name__ = method.__name__
        wrapper.__doc__ = method.__doc__
    except:
        pass
    return wrapper
Example #7
0
    def test_str_with_iter(self):
        """ensure that a str object with an __iter__ method (like in PyPy) is not interpreted
        as an iterable.
        
        """
        class IterString(str):
            def __iter__(self):
                return iter(self + "")

        assert list(util.flatten_iterator([IterString("asdf"), [IterString("x"), IterString("y")]])) == ["asdf", "x", "y"]
Example #8
0
    def test_str_with_iter(self):
        """ensure that a str object with an __iter__ method (like in PyPy) is not interpreted
        as an iterable.
        
        """
        class IterString(str):
            def __iter__(self):
                return iter(self + "")

        assert list(util.flatten_iterator([IterString("asdf"), [IterString("x"), IterString("y")]])) == ["asdf", "x", "y"]
Example #9
0
    def test_str_with_iter(self):
        """ensure that a str object with an __iter__ method (like in
        PyPy) is not interpreted as an iterable.

        """
        class IterString(str):
            def __iter__(self):
                return iter(self + '')

        assert list(util.flatten_iterator([IterString('asdf'),
                    [IterString('x'), IterString('y')]])) == ['asdf',
                'x', 'y']
Example #10
0
    def test_str_with_iter(self):
        """ensure that a str object with an __iter__ method (like in
        PyPy) is not interpreted as an iterable.

        """
        class IterString(str):
            def __iter__(self):
                return iter(self + '')

        assert list(
            util.flatten_iterator(
                [IterString('asdf'),
                 [IterString('x'), IterString('y')]])) == ['asdf', 'x', 'y']
Example #11
0
 def test_flatten(self):
     assert list(util.flatten_iterator([[1, 2, 3], [4, 5, 6], 7,
                                        8])) == [1, 2, 3, 4, 5, 6, 7, 8]
Example #12
0
 def test_flatten(self):
     assert list(util.flatten_iterator([[1, 2, 3], [4, 5, 6], 7,
                 8])) == [1, 2, 3, 4, 5, 6, 7, 8]