15
15
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16
16
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
17
17
# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
18
# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
18
# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
19
19
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
24
from boto.dynamodb.types import get_dynamodb_type, dynamize_value, convert_num
24
from boto.dynamodb.types import dynamize_value
26
27
class Condition(object):
29
30
is to test if something is a Condition instance or not.
33
def __eq__(self, other):
34
if isinstance(other, Condition):
35
return self.to_dict() == other.to_dict()
34
37
class ConditionNoArgs(Condition):
36
39
Abstract class for Conditions that require no arguments, such
37
40
as NULL or NOT_NULL.
40
43
def __repr__(self):
41
44
return '%s' % self.__class__.__name__
44
47
return {'ComparisonOperator': self.__class__.__name__}
46
50
class ConditionOneArg(Condition):
48
52
Abstract class for Conditions that require a single argument
52
56
def __init__(self, v1):
55
59
def __repr__(self):
56
60
return '%s:%s' % (self.__class__.__name__, self.v1)
59
63
return {'AttributeValueList': [dynamize_value(self.v1)],
60
64
'ComparisonOperator': self.__class__.__name__}
62
67
class ConditionTwoArgs(Condition):
64
69
Abstract class for Conditions that require two arguments.
65
70
The only example of this currently is BETWEEN.
68
73
def __init__(self, v1, v2):
76
81
values = (self.v1, self.v2)
77
82
return {'AttributeValueList': [dynamize_value(v) for v in values],
78
83
'ComparisonOperator': self.__class__.__name__}
86
class ConditionSeveralArgs(Condition):
88
Abstract class for conditions that require several argument (ex: IN).
91
def __init__(self, values):
95
return '{0}({1})'.format(self.__class__.__name__,
96
', '.join(self.values))
99
return {'AttributeValueList': [dynamize_value(v) for v in self.values],
100
'ComparisonOperator': self.__class__.__name__}
80
103
class EQ(ConditionOneArg):
84
108
class NE(ConditionOneArg):
88
113
class LE(ConditionOneArg):
92
118
class LT(ConditionOneArg):
96
123
class GE(ConditionOneArg):
100
128
class GT(ConditionOneArg):
104
133
class NULL(ConditionNoArgs):
108
138
class NOT_NULL(ConditionNoArgs):
112
143
class CONTAINS(ConditionOneArg):
116
148
class NOT_CONTAINS(ConditionOneArg):
120
class BEGINS_WITH(ConditionOneArg):
124
class IN(ConditionOneArg):
128
class BEGINS_WITH(ConditionOneArg):
153
class BEGINS_WITH(ConditionOneArg):
158
class IN(ConditionSeveralArgs):
163
class BEGINS_WITH(ConditionOneArg):
132
168
class BETWEEN(ConditionTwoArgs):