@@ -59,11 +59,12 @@ def keygetter(
5959 elif hasattr (dct , sub_field ):
6060 dct = getattr (dct , sub_field )
6161
62- return dct
6362 except Exception as e :
6463 traceback .print_stack ()
6564 print (f"Above error was { e } " )
66- return None
65+ return None
66+
67+ return dct
6768
6869
6970def parse_lookup (obj : "Mapping[str, Any]" , path : str , lookup : str ) -> Optional [Any ]:
@@ -123,7 +124,7 @@ def lookup_icontains(
123124 if isinstance (data , str ):
124125 return rhs .lower () in data .lower ()
125126 if isinstance (data , Mapping ):
126- return rhs .lower () in [k .lower () for k in data . keys () ]
127+ return rhs .lower () in [k .lower () for k in data ]
127128
128129 return False
129130
@@ -183,7 +184,6 @@ def lookup_in(
183184 return rhs in data
184185 # TODO: Add a deep Mappingionary matcher
185186 # if isinstance(rhs, Mapping) and isinstance(data, Mapping):
186- # return rhs.items() not in data.items()
187187 except Exception :
188188 return False
189189 return False
@@ -205,7 +205,6 @@ def lookup_nin(
205205 return rhs not in data
206206 # TODO: Add a deep Mappingionary matcher
207207 # if isinstance(rhs, Mapping) and isinstance(data, Mapping):
208- # return rhs.items() not in data.items()
209208 except Exception :
210209 return False
211210 return False
@@ -246,6 +245,16 @@ def lookup_iregex(
246245}
247246
248247
248+ class PKRequiredException (Exception ):
249+ def __init__ (self , * args : object ):
250+ return super ().__init__ ("items() require a pk_key exists" )
251+
252+
253+ class OpNotFound (ValueError ):
254+ def __init__ (self , op : str , * args : object ):
255+ return super ().__init__ (f"{ op } not in LOOKUP_NAME_MAP" )
256+
257+
249258class QueryList (List [T ]):
250259 """Filter list of object/dictionaries. For small, local datasets.
251260
@@ -286,17 +295,13 @@ class QueryList(List[T]):
286295
287296 def items (self ) -> List [T ]:
288297 if self .pk_key is None :
289- raise Exception ( "items() require a pk_key exists" )
298+ raise PKRequiredException ( )
290299 return [(getattr (item , self .pk_key ), item ) for item in self ]
291300
292301 def __eq__ (
293302 self ,
294303 other : object ,
295304 # other: Union[
296- # "QueryList[T]",
297- # List[Mapping[str, str]],
298- # List[Mapping[str, int]],
299- # List[Mapping[str, Union[str, Mapping[str, Union[List[str], str]]]]],
300305 # ],
301306 ) -> bool :
302307 data = other
@@ -330,7 +335,7 @@ def filter_lookup(obj: Any) -> bool:
330335 lhs , op = path .rsplit ("__" , 1 )
331336
332337 if op not in LOOKUP_NAME_MAP :
333- raise ValueError ( f" { op } not in LOOKUP_NAME_MAP" )
338+ raise OpNotFound ( op = op )
334339 except ValueError :
335340 lhs = path
336341 op = "exact"
0 commit comments