X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Futil%2Ffilter.py;h=ada44ba5d4f5263a74a73ae214673f32c0895c44;hb=bfcea75fd4f7d91b186f4f0e479db0e6f0a231ae;hp=d9890cf1f01546297b913da9ef8ac37ea212dcbd;hpb=fb394e6e95e0ddfdab77893dd247005b0b57114f;p=sfa.git diff --git a/sfa/util/filter.py b/sfa/util/filter.py index d9890cf1..ada44ba5 100644 --- a/sfa/util/filter.py +++ b/sfa/util/filter.py @@ -1,5 +1,3 @@ -# $Id: Filter.py 14587 2009-07-19 13:18:50Z thierry $ -# $URL: svn+ssh://svn.planet-lab.org/svn/PLCAPI/trunk/PLC/Filter.py $ from types import StringTypes try: set @@ -8,7 +6,8 @@ except NameError: set = Set import time -import pgdb +try: import pgdb +except: pass from sfa.util.faults import * from sfa.util.parameter import Parameter, Mixed, python_type @@ -72,7 +71,11 @@ class Filter(Parameter, dict): def __init__(self, fields = {}, filter = {}, doc = "Attribute filter"): # Store the filter in our dict instance - dict.__init__(self, filter) + valid_fields = {} + for field in filter: + if field in fields: + valid_fields[field] = filter[field] + dict.__init__(self, valid_fields) # Declare ourselves as a type of parameter that can take # either a value or a list of values for each of the specified @@ -92,7 +95,7 @@ class Filter(Parameter, dict): # The pgdb._quote function is good enough for general SQL # quoting, except for array types. if isinstance(value, (list, tuple, set)): - return "ARRAY[%s]" % ", ".join(map, self.quote, value) + return "ARRAY[%s]" % ", ".join(map(self.quote, value)) else: return pgdb._quote(value) @@ -132,7 +135,7 @@ class Filter(Parameter, dict): # filter on fields if not modifiers['-']: if field not in self.fields: - raise GeniInvalidArgument, "Invalid filter field '%s'" % field + raise SfaInvalidArgument, "Invalid filter field '%s'" % field if isinstance(value, (list, tuple, set)): # handling filters like '~slice_id':[] @@ -182,7 +185,7 @@ class Filter(Parameter, dict): # sorting and clipping else: if field not in ('SORT','OFFSET','LIMIT'): - raise GeniInvalidArgument, "Invalid filter, unknown sort and clip field %r"%field + raise SfaInvalidArgument, "Invalid filter, unknown sort and clip field %r"%field # sorting if field == 'SORT': if not isinstance(value,(list,tuple,set)): @@ -195,7 +198,7 @@ class Filter(Parameter, dict): field = field[1:] order = 'DESC' if field not in self.fields: - raise GeniInvalidArgument, "Invalid field %r in SORT filter"%field + raise SfaInvalidArgument, "Invalid field %r in SORT filter"%field sorts.append("%s %s"%(field,order)) # clipping elif field == 'OFFSET': @@ -210,5 +213,4 @@ class Filter(Parameter, dict): clip_part += " ORDER BY " + ",".join(sorts) if clips: clip_part += " " + " ".join(clips) -# print 'where_part=',where_part,'clip_part',clip_part return (where_part,clip_part)