Merge lp:~camptocamp/openerp-connector-magento/7.0-new-mapper-api-gbr into lp:~openerp-connector-core-editors/openerp-connector-magento/7.0
- 7.0-new-mapper-api-gbr
- Merge into 7.0
Proposed by
Guewen Baconnier @ Camptocamp
Status: | Merged |
---|---|
Approved by: | Guewen Baconnier @ Camptocamp |
Approved revision: | 929 |
Merged at revision: | 941 |
Proposed branch: | lp:~camptocamp/openerp-connector-magento/7.0-new-mapper-api-gbr |
Merge into: | lp:~openerp-connector-core-editors/openerp-connector-magento/7.0 |
Diff against target: |
235 lines (+50/-41) 4 files modified
magentoerpconnect/partner.py (+2/-2) magentoerpconnect/sale.py (+14/-14) magentoerpconnect/unit/export_synchronizer.py (+15/-9) magentoerpconnect/unit/import_synchronizer.py (+19/-16) |
To merge this branch: | bzr merge lp:~camptocamp/openerp-connector-magento/7.0-new-mapper-api-gbr |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Joël Grand-Guillaume @ camptocamp | code review, no tests | Approve | |
Review via email: mp+194630@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote : | # |
Revision history for this message
Joël Grand-Guillaume @ camptocamp (jgrandguillaume-c2c) wrote : | # |
Hi,
Thanks for the contrib, as far as I can see, LGTM.
Regards,
Joël
review:
Approve
(code review, no tests)
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file 'magentoerpconnect/partner.py' | |||
2 | --- magentoerpconnect/partner.py 2013-08-05 09:42:06 +0000 | |||
3 | +++ magentoerpconnect/partner.py 2013-11-09 22:36:08 +0000 | |||
4 | @@ -451,10 +451,10 @@ | |||
5 | 451 | # and use the name of the company for the name | 451 | # and use the name of the company for the name |
6 | 452 | company_mapper = get_unit(CompanyImportMapper, | 452 | company_mapper = get_unit(CompanyImportMapper, |
7 | 453 | 'magento.res.partner') | 453 | 'magento.res.partner') |
9 | 454 | company_mapper.convert(magento_record) | 454 | map_record = company_mapper.map_record(magento_record) |
10 | 455 | self.session.write('magento.res.partner', | 455 | self.session.write('magento.res.partner', |
11 | 456 | partner_binding_id, | 456 | partner_binding_id, |
13 | 457 | company_mapper.data) | 457 | map_record.values()) |
14 | 458 | else: | 458 | else: |
15 | 459 | # for B2C individual customers, merge with the main | 459 | # for B2C individual customers, merge with the main |
16 | 460 | # partner | 460 | # partner |
17 | 461 | 461 | ||
18 | === modified file 'magentoerpconnect/sale.py' | |||
19 | --- magentoerpconnect/sale.py 2013-11-08 14:16:29 +0000 | |||
20 | +++ magentoerpconnect/sale.py 2013-11-09 22:36:08 +0000 | |||
21 | @@ -563,11 +563,11 @@ | |||
22 | 563 | 'website_id': record.get('website_id'), | 563 | 'website_id': record.get('website_id'), |
23 | 564 | } | 564 | } |
24 | 565 | mapper = self.get_connector_unit_for_model(PartnerImportMapper, | 565 | mapper = self.get_connector_unit_for_model(PartnerImportMapper, |
30 | 566 | 'magento.res.partner') | 566 | 'magento.res.partner') |
31 | 567 | mapper.convert(customer_record) | 567 | map_record = mapper.map_record(customer_record) |
32 | 568 | oe_record = mapper.data_for_create | 568 | map_record.update(guest_customer=True) |
33 | 569 | oe_record['guest_customer'] = True | 569 | partner_bind_id = sess.create('magento.res.partner', |
34 | 570 | partner_bind_id = sess.create('magento.res.partner', oe_record) | 570 | map_record.values(for_create=True)) |
35 | 571 | partner_binder.bind(guest_customer_id, | 571 | partner_binder.bind(guest_customer_id, |
36 | 572 | partner_bind_id) | 572 | partner_bind_id) |
37 | 573 | else: | 573 | else: |
38 | @@ -608,10 +608,10 @@ | |||
39 | 608 | 'magento.address') | 608 | 'magento.address') |
40 | 609 | 609 | ||
41 | 610 | def create_address(address_record): | 610 | def create_address(address_record): |
46 | 611 | addr_mapper.convert(address_record) | 611 | map_record = addr_mapper.map_record(address_record) |
47 | 612 | oe_address = addr_mapper.data_for_create | 612 | map_record.update(addresses_defaults) |
48 | 613 | oe_address.update(addresses_defaults) | 613 | address_bind_id = sess.create('magento.address', |
49 | 614 | address_bind_id = sess.create('magento.address', oe_address) | 614 | map_record.values(for_create=True)) |
50 | 615 | return sess.read('magento.address', | 615 | return sess.read('magento.address', |
51 | 616 | address_bind_id, | 616 | address_bind_id, |
52 | 617 | ['openerp_id'])['openerp_id'][0] | 617 | ['openerp_id'])['openerp_id'][0] |
53 | @@ -671,14 +671,14 @@ | |||
54 | 671 | children = [('items', 'magento_order_line_ids', 'magento.sale.order.line'), | 671 | children = [('items', 'magento_order_line_ids', 'magento.sale.order.line'), |
55 | 672 | ] | 672 | ] |
56 | 673 | 673 | ||
58 | 674 | def _after_mapping(self, result): | 674 | def finalize(self, map_record, values): |
59 | 675 | sess = self.session | 675 | sess = self.session |
60 | 676 | # TODO: refactor: do no longer store the transient fields in the | 676 | # TODO: refactor: do no longer store the transient fields in the |
61 | 677 | # result, use a ConnectorUnit to create the lines | 677 | # result, use a ConnectorUnit to create the lines |
62 | 678 | result = sess.pool['sale.order']._convert_special_fields(sess.cr, | 678 | result = sess.pool['sale.order']._convert_special_fields(sess.cr, |
63 | 679 | sess.uid, | 679 | sess.uid, |
66 | 680 | result, | 680 | values, |
67 | 681 | result['magento_order_line_ids'], | 681 | values['magento_order_line_ids'], |
68 | 682 | sess.context) | 682 | sess.context) |
69 | 683 | # remove transient fields otherwise OpenERP will raise a warning | 683 | # remove transient fields otherwise OpenERP will raise a warning |
70 | 684 | # or even fail to create the record because the fields do not | 684 | # or even fail to create the record because the fields do not |
71 | @@ -689,7 +689,7 @@ | |||
72 | 689 | result.pop('gift_certificates_amount', None) | 689 | result.pop('gift_certificates_amount', None) |
73 | 690 | result.pop('gift_certificates_code', None) | 690 | result.pop('gift_certificates_code', None) |
74 | 691 | onchange = self.get_connector_unit_for_model(SaleOrderOnChange) | 691 | onchange = self.get_connector_unit_for_model(SaleOrderOnChange) |
76 | 692 | return onchange.play(result, result['magento_order_line_ids']) | 692 | return onchange.play(values, values['magento_order_line_ids']) |
77 | 693 | 693 | ||
78 | 694 | @mapping | 694 | @mapping |
79 | 695 | def name(self, record): | 695 | def name(self, record): |
80 | @@ -754,7 +754,7 @@ | |||
81 | 754 | ifield = record.get('shipping_method') | 754 | ifield = record.get('shipping_method') |
82 | 755 | if not ifield: | 755 | if not ifield: |
83 | 756 | return | 756 | return |
85 | 757 | 757 | ||
86 | 758 | carrier_ids = session.search('delivery.carrier', | 758 | carrier_ids = session.search('delivery.carrier', |
87 | 759 | [('magento_code', '=', ifield)]) | 759 | [('magento_code', '=', ifield)]) |
88 | 760 | if carrier_ids: | 760 | if carrier_ids: |
89 | 761 | 761 | ||
90 | === modified file 'magentoerpconnect/unit/export_synchronizer.py' | |||
91 | --- magentoerpconnect/unit/export_synchronizer.py 2013-05-01 12:12:58 +0000 | |||
92 | +++ magentoerpconnect/unit/export_synchronizer.py 2013-11-09 22:36:08 +0000 | |||
93 | @@ -139,9 +139,9 @@ | |||
94 | 139 | """ Export the dependencies for the record""" | 139 | """ Export the dependencies for the record""" |
95 | 140 | return | 140 | return |
96 | 141 | 141 | ||
98 | 142 | def _map_data(self, fields=None): | 142 | def _map_data(self): |
99 | 143 | """ Convert the external record to OpenERP """ | 143 | """ Convert the external record to OpenERP """ |
101 | 144 | self.mapper.convert(self.binding_record, fields=fields) | 144 | return self.mapper.map_record(self.binding_record) |
102 | 145 | 145 | ||
103 | 146 | def _validate_data(self, data): | 146 | def _validate_data(self, data): |
104 | 147 | """ Check if the values to import are correct | 147 | """ Check if the values to import are correct |
105 | @@ -153,13 +153,23 @@ | |||
106 | 153 | """ | 153 | """ |
107 | 154 | return | 154 | return |
108 | 155 | 155 | ||
109 | 156 | def _create_data(self, map_record, fields=None): | ||
110 | 157 | return map_record.values(for_create=True, fields=fields) | ||
111 | 158 | |||
112 | 156 | def _create(self, data): | 159 | def _create(self, data): |
113 | 157 | """ Create the Magento record """ | 160 | """ Create the Magento record """ |
114 | 161 | # special check on data before export | ||
115 | 162 | self._validate_data(data) | ||
116 | 158 | return self.backend_adapter.create(data) | 163 | return self.backend_adapter.create(data) |
117 | 159 | 164 | ||
118 | 165 | def _update_data(self, map_record, fields=None): | ||
119 | 166 | return map_record.values(fields=fields) | ||
120 | 167 | |||
121 | 160 | def _update(self, data): | 168 | def _update(self, data): |
122 | 161 | """ Update an Magento record """ | 169 | """ Update an Magento record """ |
123 | 162 | assert self.magento_id | 170 | assert self.magento_id |
124 | 171 | # special check on data before export | ||
125 | 172 | self._validate_data(data) | ||
126 | 163 | self.backend_adapter.write(self.magento_id, data) | 173 | self.backend_adapter.write(self.magento_id, data) |
127 | 164 | 174 | ||
128 | 165 | def _run(self, fields=None): | 175 | def _run(self, fields=None): |
129 | @@ -176,21 +186,17 @@ | |||
130 | 176 | # export the missing linked resources | 186 | # export the missing linked resources |
131 | 177 | self._export_dependencies() | 187 | self._export_dependencies() |
132 | 178 | 188 | ||
134 | 179 | self._map_data(fields=fields) | 189 | map_record = self._map_data() |
135 | 180 | 190 | ||
136 | 181 | if self.magento_id: | 191 | if self.magento_id: |
138 | 182 | record = self.mapper.data | 192 | record = self._update_data(map_record, fields=fields) |
139 | 183 | if not record: | 193 | if not record: |
140 | 184 | return _('Nothing to export.') | 194 | return _('Nothing to export.') |
141 | 185 | # special check on data before export | ||
142 | 186 | self._validate_data(record) | ||
143 | 187 | self._update(record) | 195 | self._update(record) |
144 | 188 | else: | 196 | else: |
146 | 189 | record = self.mapper.data_for_create | 197 | record = self._create_data(map_record, fields=fields) |
147 | 190 | if not record: | 198 | if not record: |
148 | 191 | return _('Nothing to export.') | 199 | return _('Nothing to export.') |
149 | 192 | # special check on data before export | ||
150 | 193 | self._validate_data(record) | ||
151 | 194 | self.magento_id = self._create(record) | 200 | self.magento_id = self._create(record) |
152 | 195 | return _('Record exported with ID %s on Magento.') % self.magento_id | 201 | return _('Record exported with ID %s on Magento.') % self.magento_id |
153 | 196 | 202 | ||
154 | 197 | 203 | ||
155 | === modified file 'magentoerpconnect/unit/import_synchronizer.py' | |||
156 | --- magentoerpconnect/unit/import_synchronizer.py 2013-10-31 08:53:35 +0000 | |||
157 | +++ magentoerpconnect/unit/import_synchronizer.py 2013-11-09 22:36:08 +0000 | |||
158 | @@ -92,9 +92,11 @@ | |||
159 | 92 | return | 92 | return |
160 | 93 | 93 | ||
161 | 94 | def _map_data(self): | 94 | def _map_data(self): |
165 | 95 | """ Call the convert on the Mapper so the converted record can | 95 | """ Returns an instance of |
166 | 96 | be obtained using mapper.data or mapper.data_for_create""" | 96 | :py:class:`~openerp.addons.connector.unit.mapper.MapRecord` |
167 | 97 | self.mapper.convert(self.magento_record) | 97 | |
168 | 98 | """ | ||
169 | 99 | return self.mapper.map_record(self.magento_record) | ||
170 | 98 | 100 | ||
171 | 99 | def _validate_data(self, data): | 101 | def _validate_data(self, data): |
172 | 100 | """ Check if the values to import are correct | 102 | """ Check if the values to import are correct |
173 | @@ -124,21 +126,26 @@ | |||
174 | 124 | """Return the binding id from the magento id""" | 126 | """Return the binding id from the magento id""" |
175 | 125 | return self.binder.to_openerp(self.magento_id) | 127 | return self.binder.to_openerp(self.magento_id) |
176 | 126 | 128 | ||
181 | 127 | def _context(self): | 129 | def _create_data(self, map_record): |
182 | 128 | context = self.session.context.copy() | 130 | return map_record.values(for_create=True) |
179 | 129 | context['connector_no_export'] = True | ||
180 | 130 | return context | ||
183 | 131 | 131 | ||
184 | 132 | def _create(self, data): | 132 | def _create(self, data): |
185 | 133 | """ Create the OpenERP record """ | 133 | """ Create the OpenERP record """ |
186 | 134 | # special check on data before import | ||
187 | 135 | self._validate_data(data) | ||
188 | 134 | with self.session.change_context({'connector_no_export': True}): | 136 | with self.session.change_context({'connector_no_export': True}): |
189 | 135 | binding_id = self.session.create(self.model._name, data) | 137 | binding_id = self.session.create(self.model._name, data) |
190 | 136 | _logger.debug('%s %d created from magento %s', | 138 | _logger.debug('%s %d created from magento %s', |
191 | 137 | self.model._name, binding_id, self.magento_id) | 139 | self.model._name, binding_id, self.magento_id) |
192 | 138 | return binding_id | 140 | return binding_id |
193 | 139 | 141 | ||
194 | 142 | def _update_data(self, map_record): | ||
195 | 143 | return map_record.values() | ||
196 | 144 | |||
197 | 140 | def _update(self, binding_id, data): | 145 | def _update(self, binding_id, data): |
198 | 141 | """ Update an OpenERP record """ | 146 | """ Update an OpenERP record """ |
199 | 147 | # special check on data before import | ||
200 | 148 | self._validate_data(data) | ||
201 | 142 | with self.session.change_context({'connector_no_export': True}): | 149 | with self.session.change_context({'connector_no_export': True}): |
202 | 143 | self.session.write(self.model._name, binding_id, data) | 150 | self.session.write(self.model._name, binding_id, data) |
203 | 144 | _logger.debug('%s %d updated from magento %s', | 151 | _logger.debug('%s %d updated from magento %s', |
204 | @@ -173,17 +180,13 @@ | |||
205 | 173 | # import the missing linked resources | 180 | # import the missing linked resources |
206 | 174 | self._import_dependencies() | 181 | self._import_dependencies() |
207 | 175 | 182 | ||
209 | 176 | self._map_data() | 183 | map_record = self._map_data() |
210 | 177 | 184 | ||
211 | 178 | if binding_id: | 185 | if binding_id: |
215 | 179 | record = self.mapper.data | 186 | record = self._update_data(map_record) |
213 | 180 | # special check on data before import | ||
214 | 181 | self._validate_data(record) | ||
216 | 182 | self._update(binding_id, record) | 187 | self._update(binding_id, record) |
217 | 183 | else: | 188 | else: |
221 | 184 | record = self.mapper.data_for_create | 189 | record = self._create_data(map_record) |
219 | 185 | # special check on data before import | ||
220 | 186 | self._validate_data(record) | ||
222 | 187 | binding_id = self._create(record) | 190 | binding_id = self._create(record) |
223 | 188 | 191 | ||
224 | 189 | self.binder.bind(self.magento_id, binding_id) | 192 | self.binder.bind(self.magento_id, binding_id) |
225 | @@ -282,8 +285,8 @@ | |||
226 | 282 | 285 | ||
227 | 283 | for storeview in lang_storeviews: | 286 | for storeview in lang_storeviews: |
228 | 284 | lang_record = self._get_magento_data(storeview.magento_id) | 287 | lang_record = self._get_magento_data(storeview.magento_id) |
231 | 285 | self.mapper.convert(lang_record) | 288 | map_record = self.mapper.map_record(lang_record) |
232 | 286 | record = self.mapper.data | 289 | record = map_record.values() |
233 | 287 | 290 | ||
234 | 288 | data = dict((field, value) for field, value in record.iteritems() | 291 | data = dict((field, value) for field, value in record.iteritems() |
235 | 289 | if field in translatable_fields) | 292 | if field in translatable_fields) |
Branch is now sufficiently stable to be tested and used for development.