Merge lp:~camptocamp/openerp-connector-magento/7.0-new-mapper-api-gbr into lp:~openerp-connector-core-editors/openerp-connector-magento/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
Reviewer Review Type Date Requested Status
Joël Grand-Guillaume @ camptocamp code review, no tests Approve
Review via email: mp+194630@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

Branch is now sufficiently stable to be tested and used for development.

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
=== modified file 'magentoerpconnect/partner.py'
--- magentoerpconnect/partner.py 2013-08-05 09:42:06 +0000
+++ magentoerpconnect/partner.py 2013-11-09 22:36:08 +0000
@@ -451,10 +451,10 @@
451 # and use the name of the company for the name451 # and use the name of the company for the name
452 company_mapper = get_unit(CompanyImportMapper,452 company_mapper = get_unit(CompanyImportMapper,
453 'magento.res.partner')453 'magento.res.partner')
454 company_mapper.convert(magento_record)454 map_record = company_mapper.map_record(magento_record)
455 self.session.write('magento.res.partner',455 self.session.write('magento.res.partner',
456 partner_binding_id,456 partner_binding_id,
457 company_mapper.data)457 map_record.values())
458 else:458 else:
459 # for B2C individual customers, merge with the main459 # for B2C individual customers, merge with the main
460 # partner460 # partner
461461
=== modified file 'magentoerpconnect/sale.py'
--- magentoerpconnect/sale.py 2013-11-08 14:16:29 +0000
+++ magentoerpconnect/sale.py 2013-11-09 22:36:08 +0000
@@ -563,11 +563,11 @@
563 'website_id': record.get('website_id'),563 'website_id': record.get('website_id'),
564 }564 }
565 mapper = self.get_connector_unit_for_model(PartnerImportMapper,565 mapper = self.get_connector_unit_for_model(PartnerImportMapper,
566 'magento.res.partner')566 'magento.res.partner')
567 mapper.convert(customer_record)567 map_record = mapper.map_record(customer_record)
568 oe_record = mapper.data_for_create568 map_record.update(guest_customer=True)
569 oe_record['guest_customer'] = True569 partner_bind_id = sess.create('magento.res.partner',
570 partner_bind_id = sess.create('magento.res.partner', oe_record)570 map_record.values(for_create=True))
571 partner_binder.bind(guest_customer_id,571 partner_binder.bind(guest_customer_id,
572 partner_bind_id)572 partner_bind_id)
573 else:573 else:
@@ -608,10 +608,10 @@
608 'magento.address')608 'magento.address')
609609
610 def create_address(address_record):610 def create_address(address_record):
611 addr_mapper.convert(address_record)611 map_record = addr_mapper.map_record(address_record)
612 oe_address = addr_mapper.data_for_create612 map_record.update(addresses_defaults)
613 oe_address.update(addresses_defaults)613 address_bind_id = sess.create('magento.address',
614 address_bind_id = sess.create('magento.address', oe_address)614 map_record.values(for_create=True))
615 return sess.read('magento.address',615 return sess.read('magento.address',
616 address_bind_id,616 address_bind_id,
617 ['openerp_id'])['openerp_id'][0]617 ['openerp_id'])['openerp_id'][0]
@@ -671,14 +671,14 @@
671 children = [('items', 'magento_order_line_ids', 'magento.sale.order.line'),671 children = [('items', 'magento_order_line_ids', 'magento.sale.order.line'),
672 ]672 ]
673673
674 def _after_mapping(self, result):674 def finalize(self, map_record, values):
675 sess = self.session675 sess = self.session
676 # TODO: refactor: do no longer store the transient fields in the676 # TODO: refactor: do no longer store the transient fields in the
677 # result, use a ConnectorUnit to create the lines677 # result, use a ConnectorUnit to create the lines
678 result = sess.pool['sale.order']._convert_special_fields(sess.cr,678 result = sess.pool['sale.order']._convert_special_fields(sess.cr,
679 sess.uid,679 sess.uid,
680 result,680 values,
681 result['magento_order_line_ids'],681 values['magento_order_line_ids'],
682 sess.context)682 sess.context)
683 # remove transient fields otherwise OpenERP will raise a warning683 # remove transient fields otherwise OpenERP will raise a warning
684 # or even fail to create the record because the fields do not684 # or even fail to create the record because the fields do not
@@ -689,7 +689,7 @@
689 result.pop('gift_certificates_amount', None)689 result.pop('gift_certificates_amount', None)
690 result.pop('gift_certificates_code', None)690 result.pop('gift_certificates_code', None)
691 onchange = self.get_connector_unit_for_model(SaleOrderOnChange)691 onchange = self.get_connector_unit_for_model(SaleOrderOnChange)
692 return onchange.play(result, result['magento_order_line_ids'])692 return onchange.play(values, values['magento_order_line_ids'])
693693
694 @mapping694 @mapping
695 def name(self, record):695 def name(self, record):
@@ -754,7 +754,7 @@
754 ifield = record.get('shipping_method')754 ifield = record.get('shipping_method')
755 if not ifield:755 if not ifield:
756 return756 return
757 757
758 carrier_ids = session.search('delivery.carrier',758 carrier_ids = session.search('delivery.carrier',
759 [('magento_code', '=', ifield)])759 [('magento_code', '=', ifield)])
760 if carrier_ids:760 if carrier_ids:
761761
=== modified file 'magentoerpconnect/unit/export_synchronizer.py'
--- magentoerpconnect/unit/export_synchronizer.py 2013-05-01 12:12:58 +0000
+++ magentoerpconnect/unit/export_synchronizer.py 2013-11-09 22:36:08 +0000
@@ -139,9 +139,9 @@
139 """ Export the dependencies for the record"""139 """ Export the dependencies for the record"""
140 return140 return
141141
142 def _map_data(self, fields=None):142 def _map_data(self):
143 """ Convert the external record to OpenERP """143 """ Convert the external record to OpenERP """
144 self.mapper.convert(self.binding_record, fields=fields)144 return self.mapper.map_record(self.binding_record)
145145
146 def _validate_data(self, data):146 def _validate_data(self, data):
147 """ Check if the values to import are correct147 """ Check if the values to import are correct
@@ -153,13 +153,23 @@
153 """153 """
154 return154 return
155155
156 def _create_data(self, map_record, fields=None):
157 return map_record.values(for_create=True, fields=fields)
158
156 def _create(self, data):159 def _create(self, data):
157 """ Create the Magento record """160 """ Create the Magento record """
161 # special check on data before export
162 self._validate_data(data)
158 return self.backend_adapter.create(data)163 return self.backend_adapter.create(data)
159164
165 def _update_data(self, map_record, fields=None):
166 return map_record.values(fields=fields)
167
160 def _update(self, data):168 def _update(self, data):
161 """ Update an Magento record """169 """ Update an Magento record """
162 assert self.magento_id170 assert self.magento_id
171 # special check on data before export
172 self._validate_data(data)
163 self.backend_adapter.write(self.magento_id, data)173 self.backend_adapter.write(self.magento_id, data)
164174
165 def _run(self, fields=None):175 def _run(self, fields=None):
@@ -176,21 +186,17 @@
176 # export the missing linked resources186 # export the missing linked resources
177 self._export_dependencies()187 self._export_dependencies()
178188
179 self._map_data(fields=fields)189 map_record = self._map_data()
180190
181 if self.magento_id:191 if self.magento_id:
182 record = self.mapper.data192 record = self._update_data(map_record, fields=fields)
183 if not record:193 if not record:
184 return _('Nothing to export.')194 return _('Nothing to export.')
185 # special check on data before export
186 self._validate_data(record)
187 self._update(record)195 self._update(record)
188 else:196 else:
189 record = self.mapper.data_for_create197 record = self._create_data(map_record, fields=fields)
190 if not record:198 if not record:
191 return _('Nothing to export.')199 return _('Nothing to export.')
192 # special check on data before export
193 self._validate_data(record)
194 self.magento_id = self._create(record)200 self.magento_id = self._create(record)
195 return _('Record exported with ID %s on Magento.') % self.magento_id201 return _('Record exported with ID %s on Magento.') % self.magento_id
196202
197203
=== modified file 'magentoerpconnect/unit/import_synchronizer.py'
--- magentoerpconnect/unit/import_synchronizer.py 2013-10-31 08:53:35 +0000
+++ magentoerpconnect/unit/import_synchronizer.py 2013-11-09 22:36:08 +0000
@@ -92,9 +92,11 @@
92 return92 return
9393
94 def _map_data(self):94 def _map_data(self):
95 """ Call the convert on the Mapper so the converted record can95 """ Returns an instance of
96 be obtained using mapper.data or mapper.data_for_create"""96 :py:class:`~openerp.addons.connector.unit.mapper.MapRecord`
97 self.mapper.convert(self.magento_record)97
98 """
99 return self.mapper.map_record(self.magento_record)
98100
99 def _validate_data(self, data):101 def _validate_data(self, data):
100 """ Check if the values to import are correct102 """ Check if the values to import are correct
@@ -124,21 +126,26 @@
124 """Return the binding id from the magento id"""126 """Return the binding id from the magento id"""
125 return self.binder.to_openerp(self.magento_id)127 return self.binder.to_openerp(self.magento_id)
126128
127 def _context(self):129 def _create_data(self, map_record):
128 context = self.session.context.copy()130 return map_record.values(for_create=True)
129 context['connector_no_export'] = True
130 return context
131131
132 def _create(self, data):132 def _create(self, data):
133 """ Create the OpenERP record """133 """ Create the OpenERP record """
134 # special check on data before import
135 self._validate_data(data)
134 with self.session.change_context({'connector_no_export': True}):136 with self.session.change_context({'connector_no_export': True}):
135 binding_id = self.session.create(self.model._name, data)137 binding_id = self.session.create(self.model._name, data)
136 _logger.debug('%s %d created from magento %s',138 _logger.debug('%s %d created from magento %s',
137 self.model._name, binding_id, self.magento_id)139 self.model._name, binding_id, self.magento_id)
138 return binding_id140 return binding_id
139141
142 def _update_data(self, map_record):
143 return map_record.values()
144
140 def _update(self, binding_id, data):145 def _update(self, binding_id, data):
141 """ Update an OpenERP record """146 """ Update an OpenERP record """
147 # special check on data before import
148 self._validate_data(data)
142 with self.session.change_context({'connector_no_export': True}):149 with self.session.change_context({'connector_no_export': True}):
143 self.session.write(self.model._name, binding_id, data)150 self.session.write(self.model._name, binding_id, data)
144 _logger.debug('%s %d updated from magento %s',151 _logger.debug('%s %d updated from magento %s',
@@ -173,17 +180,13 @@
173 # import the missing linked resources180 # import the missing linked resources
174 self._import_dependencies()181 self._import_dependencies()
175182
176 self._map_data()183 map_record = self._map_data()
177184
178 if binding_id:185 if binding_id:
179 record = self.mapper.data186 record = self._update_data(map_record)
180 # special check on data before import
181 self._validate_data(record)
182 self._update(binding_id, record)187 self._update(binding_id, record)
183 else:188 else:
184 record = self.mapper.data_for_create189 record = self._create_data(map_record)
185 # special check on data before import
186 self._validate_data(record)
187 binding_id = self._create(record)190 binding_id = self._create(record)
188191
189 self.binder.bind(self.magento_id, binding_id)192 self.binder.bind(self.magento_id, binding_id)
@@ -282,8 +285,8 @@
282285
283 for storeview in lang_storeviews:286 for storeview in lang_storeviews:
284 lang_record = self._get_magento_data(storeview.magento_id)287 lang_record = self._get_magento_data(storeview.magento_id)
285 self.mapper.convert(lang_record)288 map_record = self.mapper.map_record(lang_record)
286 record = self.mapper.data289 record = map_record.values()
287290
288 data = dict((field, value) for field, value in record.iteritems()291 data = dict((field, value) for field, value in record.iteritems()
289 if field in translatable_fields)292 if field in translatable_fields)