49
50
REGISTRY = ConnectorRegistry()
54
class Session(object):
56
def __init__(self, cr, uid, model, referential, context=None, **kwargs):
60
self.referential = referential
63
self.context = context
65
class SingleImport(object):
67
def __init__(self, session, external_id, mode='create', **kwargs):
68
self._session = session
69
self._external_id = external_id
70
assert mode in ('create', 'update'), "mode should be create or update"
73
def import_record(self):
76
Delegates the knowledge to specialized instances
78
:param mode: could be 'create' or 'update'
80
if self._has_to_skip():
83
ext_data = self._get_external_data()
85
# import the missing linked resources
86
self._import_dependencies(ext_data)
88
# default_values = self._default_values()
90
transfo_data = self._transform_data(ext_data)
92
# special check on data before import
93
# self._validate_data(transfo_data)
94
openerp_id = getattr(self, '_%s' % self._mode)()
97
def _has_to_skip(self):
98
# delegate a check of existence of external_id
101
def _get_external_data(self):
102
# delegate a call to the backend
105
def _import_dependencies(self, data):
106
# call SingleImport#import for each dependency
107
# no commit should be done inside of a SingleImport
111
def _transform_data(self, external_data):
112
# delegate a call to mapping
116
# delegate creation of the record
120
# delegate update of the record
51
125
class AbstractConnector(object):
52
126
"""base class for the connector
418
493
context['recursive_import_from'] = parent_values
419
494
defaults = self.connector.get_default_import_values(cr, uid, self.res_obj,
496
# FIXME: a mapping should not change any state: do not import resources
421
498
res = self.connector.record_one_ext_resource(cr, uid, self.res_obj,
422
499
resource, defaults, context)
423
500
if 'create_id' in res: