X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=PLC%2FFilter.py;h=9f5fb42befcbfc5e1fadb275fad6548fb31fdc10;hb=c348a3b1e8b7333d7f9ad17be6991aca8539c77e;hp=a7c14ce5620a03344f34a18402d22cf471595d29;hpb=d795047a331bc305f6806fc0f0049e3b1b4c0491;p=plcapi.git diff --git a/PLC/Filter.py b/PLC/Filter.py index a7c14ce..9f5fb42 100644 --- 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 @@ -53,6 +60,12 @@ class Filter(Parameter, dict): 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 @@ -68,10 +81,18 @@ class Filter(Parameter, dict): 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)) - 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)