~ubuntu-branches/debian/jessie/sqlalchemy/jessie

« back to all changes in this revision

Viewing changes to lib/sqlalchemy/orm/evaluator.py

  • Committer: Package Import Robot
  • Author(s): Piotr Ożarowski, Jakub Wilk, Piotr Ożarowski
  • Date: 2013-07-06 20:53:52 UTC
  • mfrom: (1.4.23) (16.1.17 experimental)
  • Revision ID: package-import@ubuntu.com-20130706205352-ryppl1eto3illd79
Tags: 0.8.2-1
[ Jakub Wilk ]
* Use canonical URIs for Vcs-* fields.

[ Piotr Ożarowski ]
* New upstream release
* Upload to unstable
* Build depend on python3-all instead of -dev, extensions are not built for
  Python 3.X 

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# orm/evaluator.py
2
 
# Copyright (C) 2005-2012 the SQLAlchemy authors and contributors <see AUTHORS file>
 
2
# Copyright (C) 2005-2013 the SQLAlchemy authors and contributors <see AUTHORS file>
3
3
#
4
4
# This module is part of SQLAlchemy and is released under
5
5
# the MIT License: http://www.opensource.org/licenses/mit-license.php
6
6
 
7
7
import operator
8
 
from sqlalchemy.sql import operators, functions
9
 
from sqlalchemy.sql import expression as sql
 
8
from ..sql import operators
10
9
 
11
10
 
12
11
class UnevaluatableError(Exception):
22
21
 
23
22
 
24
23
_notimplemented_ops = set(getattr(operators, op)
25
 
                          for op in ('like_op', 'notlike_op', 'ilike_op',
26
 
                                     'notilike_op', 'between_op', 'in_op',
27
 
                                     'notin_op', 'endswith_op', 'concat_op'))
 
24
                      for op in ('like_op', 'notlike_op', 'ilike_op',
 
25
                                 'notilike_op', 'between_op', 'in_op',
 
26
                                 'notin_op', 'endswith_op', 'concat_op'))
 
27
 
28
28
 
29
29
class EvaluatorCompiler(object):
30
30
    def process(self, clause):
31
31
        meth = getattr(self, "visit_%s" % clause.__visit_name__, None)
32
32
        if not meth:
33
 
            raise UnevaluatableError("Cannot evaluate %s" % type(clause).__name__)
 
33
            raise UnevaluatableError(
 
34
                "Cannot evaluate %s" % type(clause).__name__)
34
35
        return meth(clause)
35
36
 
36
37
    def visit_grouping(self, clause):
39
40
    def visit_null(self, clause):
40
41
        return lambda obj: None
41
42
 
 
43
    def visit_false(self, clause):
 
44
        return lambda obj: False
 
45
 
 
46
    def visit_true(self, clause):
 
47
        return lambda obj: True
 
48
 
42
49
    def visit_column(self, clause):
43
50
        if 'parentmapper' in clause._annotations:
44
51
            key = clause._annotations['parentmapper'].\
71
78
                        return False
72
79
                return True
73
80
        else:
74
 
            raise UnevaluatableError("Cannot evaluate clauselist with operator %s" % clause.operator)
 
81
            raise UnevaluatableError(
 
82
                "Cannot evaluate clauselist with operator %s" %
 
83
                clause.operator)
75
84
 
76
85
        return evaluate
77
86
 
78
87
    def visit_binary(self, clause):
79
 
        eval_left,eval_right = map(self.process, [clause.left, clause.right])
 
88
        eval_left, eval_right = map(self.process,
 
89
                                [clause.left, clause.right])
80
90
        operator = clause.operator
81
91
        if operator is operators.is_:
82
92
            def evaluate(obj):
92
102
                    return None
93
103
                return operator(eval_left(obj), eval_right(obj))
94
104
        else:
95
 
            raise UnevaluatableError("Cannot evaluate %s with operator %s" % (type(clause).__name__, clause.operator))
 
105
            raise UnevaluatableError(
 
106
                    "Cannot evaluate %s with operator %s" %
 
107
                    (type(clause).__name__, clause.operator))
96
108
        return evaluate
97
109
 
98
110
    def visit_unary(self, clause):
104
116
                    return None
105
117
                return not value
106
118
            return evaluate
107
 
        raise UnevaluatableError("Cannot evaluate %s with operator %s" % (type(clause).__name__, clause.operator))
 
119
        raise UnevaluatableError(
 
120
                    "Cannot evaluate %s with operator %s" %
 
121
                    (type(clause).__name__, clause.operator))
108
122
 
109
123
    def visit_bindparam(self, clause):
110
124
        val = clause.value