Source code for connector.unit.synchronizer

# -*- coding: utf-8 -*-
##############################################################################
#
#    Author: Guewen Baconnier
#    Copyright 2013 Camptocamp SA
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU Affero General Public License as
#    published by the Free Software Foundation, either version 3 of the
#    License, or (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU Affero General Public License for more details.
#
#    You should have received a copy of the GNU Affero General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################

from ..connector import ConnectorUnit
from .mapper import Mapper, ImportMapper, ExportMapper
from .backend_adapter import BackendAdapter


[docs]class Synchronizer(ConnectorUnit): """ Base class for synchronizers """ # implement in sub-classes _model_name = None _base_mapper = Mapper _base_backend_adapter = BackendAdapter def __init__(self, connector_env): super(Synchronizer, self).__init__(connector_env) self._backend_adapter = None self._binder = None self._mapper = None
[docs] def run(self): """ Run the synchronization """ raise NotImplementedError
@property def mapper(self): """ Return an instance of ``Mapper`` for the synchronization. The instanciation is delayed because some synchronisations do not need such an unit and the unit may not exist. :rtype: :py:class:`connector.unit.mapper.Mapper` """ if self._mapper is None: self._mapper = self.unit_for(self._base_mapper) return self._mapper @property def binder(self): """ Return an instance of ``Binder`` for the synchronization. The instanciation is delayed because some synchronisations do not need such an unit and the unit may not exist. :rtype: :py:class:`connector.unit.binder.Binder` """ if self._binder is None: self._binder = self.binder_for() return self._binder @property def backend_adapter(self): """ Return an instance of ``BackendAdapter`` for the synchronization. The instanciation is delayed because some synchronisations do not need such an unit and the unit may not exist. :rtype: :py:class:`connector.unit.backend_adapter.BackendAdapter` """ if self._backend_adapter is None: self._backend_adapter = self.unit_for(self._base_backend_adapter) return self._backend_adapter
[docs]class Exporter(Synchronizer): """ Synchronizer for exporting data from OpenERP to a backend """ _base_mapper = ExportMapper
[docs]class Importer(Synchronizer): """ Synchronizer for importing data from a backend to OpenERP """ _base_mapper = ImportMapper
[docs]class Deleter(Synchronizer): """ Synchronizer for deleting a record on the backend """