git://git.onelab.eu
/
plcapi.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
- support updating 'enabled' field
[plcapi.git]
/
PLC
/
Filter.py
diff --git
a/PLC/Filter.py
b/PLC/Filter.py
index
66e9aee
..
9f5fb42
100644
(file)
--- a/
PLC/Filter.py
+++ b/
PLC/Filter.py
@@
-1,3
+1,10
@@
+from types import StringTypes
+try:
+ set
+except NameError:
+ from sets import Set
+ set = Set
+
from PLC.Faults import *
from PLC.Parameter import Parameter, Mixed, python_type
from PLC.Faults import *
from PLC.Parameter import Parameter, Mixed, python_type
@@
-36,7
+43,8
@@
class Filter(Parameter, dict):
# Accept either a value or a list of values of the specified type
self.fields[field] = Mixed(expected, [expected])
# Accept either a value or a list of values of the specified type
self.fields[field] = Mixed(expected, [expected])
- Parameter.__init__(self, self.fields, doc = doc)
+ # Null filter means no filter
+ Parameter.__init__(self, self.fields, doc = doc, nullok = True)
def sql(self, api, join_with = "AND"):
"""
def sql(self, api, join_with = "AND"):
"""
@@
-52,6
+60,12
@@
class Filter(Parameter, dict):
assert join_with in ("AND", "OR")
for field, value in self.iteritems():
assert join_with in ("AND", "OR")
for field, value in self.iteritems():
+ # provide for negation with a field starting with ~
+ negation=False
+ if field[0] == '~':
+ negation = True
+ field = field[1:]
+
if field not in self.fields:
raise PLCInvalidArgument, "Invalid filter field '%s'" % field
if field not in self.fields:
raise PLCInvalidArgument, "Invalid filter field '%s'" % field
@@
-67,10
+81,18
@@
class Filter(Parameter, dict):
if value is None:
operator = "IS"
value = "NULL"
if value is None:
operator = "IS"
value = "NULL"
- else:
+ elif isinstance(value, StringTypes) and \
+ (value.find("*") > -1 or value.find("%") > -1):
+ operator = "LIKE"
+ value = str(api.db.quote(value.replace("*", "%")))
+ else:
operator = "="
value = str(api.db.quote(value))
operator = "="
value = str(api.db.quote(value))
- conditionals.append("%s %s %s" % (field, operator, value))
+ clause = "%s %s %s" % (field, operator, value)
+ if negation:
+ clause = " ( NOT %s ) "%clause
+
+ conditionals.append(clause)
return (" %s " % join_with).join(conditionals)
return (" %s " % join_with).join(conditionals)