1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 """
23 Data filter component.
24 """
25
26 from etl.component import component
27 import datetime
28
30 """
31 Data filter component.
32 """
33
34 - def __init__(self, filter_criteria, name='component.transfer.data_filter', transformer=None, row_limit=0):
35
36 """
37 Required Parameters
38 filter_criteria : Dictionary of filtering criteria.
39
40 Extra Parameters
41 name : Name of component.
42 transformer : Transformer object to transform string data into particular type.
43 """
44 super(data_filter, self).__init__(name=name, transformer=transformer,row_limit=row_limit)
45 self._type = 'component.transfer.data_filter'
46 self.filter_criteria = filter_criteria
47
51
53 datas = []
54 for channel, trans in self.input_get().items():
55 for iterator in trans:
56 for d in iterator:
57 if self.transformer:
58 d = self.transformer.transform(d)
59 filter = ''
60 for filter_data in self.filter_criteria:
61 val = d[filter_data['name']]
62 _filter = filter_data.get('filter', False)
63 if val and _filter:
64 val = eval((_filter) % d)
65 filter += " %s %s %s %s" % (repr(val), filter_data['operator'], filter_data['operand'], filter_data.get('condition', ''))
66 if self.transformer:
67 d = self.transformer.transform(d)
68 if eval(filter):
69 yield d, 'main'
70 else:
71 yield d, 'invalid'
73 from etl_test import etl_test
74 from etl import transformer
75 import etl
76 openobject_partner=etl.connector.openobject_connector('http://localhost:8869', 'trunk', 'admin', 'admin',con_type='xmlrpc')
77 transformer_description= {'title':transformer.STRING,'name':transformer.STRING,'street':transformer.STRING,'street2':transformer.STRING,'birthdate':transformer.DATE}
78 transformer=transformer(transformer_description)
79 openobject_in1= etl.component.input.openobject_in(
80 openobject_partner,'res.partner.address',
81 fields=['partner_id','title', 'name', 'street', 'street2' , 'phone' , 'city' , 'zip' ,'state_id' , 'country_id' , 'mobile', 'birthdate'],
82 transformer=transformer)
83 filter_criteria=[
84 {'name':'Partner','filter':'"%(Partner)s".lower() or ""','operator':'==','operand':"'leclerc'",'condition':'or'},
85 {'name':'Address Name','operator':'==','operand':"'Fabien Pinckaers'"}
86 ]
87
88 test1 = data_filter_component=etl_test.etl_component_test(etl.component.transform.data_filter(filter_criteria,transformer=transformer))
89 res = test1.output()
90 print res
91 if __name__ == '__main__':
92 test()
93