cleaned up imports
[sfa.git] / sfa / util / filter.py
index d9890cf..ada44ba 100644 (file)
@@ -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)