-# $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
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
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
# 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)
# 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':[]
# 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)):
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':
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)