11import re
2- from typing import Mapping
2+ from typing import List , Mapping , Pattern
33
44from .filing import Filing , FilingFilter
55from .index import IndexFilter , IndexRecord
@@ -13,16 +13,20 @@ def __init__(self, name: str):
1313
1414
1515def filter_filings (filters : Mapping [str , str ],) -> FilingFilter :
16+ patterns : List [Pattern ] = []
17+ for field_name , filter_text in filters .items ():
18+ patterns .append (re .compile (filter_text , flags = re .IGNORECASE ))
19+
1620 def _filter (filing : Filing ) -> bool :
1721 passed = True
18- for fieldName in filters :
19- filter_text = filters [fieldName ]
20- if not hasattr (filing , fieldName ):
21- raise FieldNotFound (fieldName )
22- value = getattr (filing , fieldName )
22+ for i , f in enumerate (filters ):
23+ if not hasattr (filing , f ):
24+ raise FieldNotFound (f )
25+ value = getattr (filing , f )
2326 if value is None :
2427 return False
25- match = re .match (filter_text , str (value ))
28+ pattern = patterns [i ]
29+ match = pattern .search (str (value ))
2630 if match is None :
2731 passed = False
2832 break
@@ -32,16 +36,20 @@ def _filter(filing: Filing) -> bool:
3236
3337
3438def filter_index_record (filters : Mapping [str , str ],) -> IndexFilter :
39+ patterns : List [Pattern ] = []
40+ for field_name , filter_text in filters .items ():
41+ patterns .append (re .compile (filter_text , flags = re .IGNORECASE ))
42+
3543 def _filter (record : IndexRecord ) -> bool :
3644 passed = True
37- for field_name in filters :
38- filter_text = filters [field_name ]
39- if not record .has_field (field_name ):
40- raise FieldNotFound (field_name )
41- value = record .get_field (field_name )
45+ for i , f in enumerate (filters ):
46+ if not record .has_field (f ):
47+ raise FieldNotFound (f )
48+ value = record .get_field (f )
4249 if value is None :
4350 return False
44- match = re .match (filter_text , str (value ))
51+ pattern = patterns [i ]
52+ match = pattern .search (str (value ))
4553 if match is None :
4654 passed = False
4755 break
0 commit comments