Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
171 changes: 171 additions & 0 deletions connector/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association

=========
Connector
=========

..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:1cf9d33bb7cf5a8a8f31a054debbb65314c5f6f821c0abfff414bda121e6439d
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/license-LGPL--3-blue.png
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fconnector-lightgray.png?logo=github
:target: https://github.com/OCA/connector/tree/19.0/connector
:alt: OCA/connector
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/connector-19-0/connector-19-0-connector
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/connector&target_branch=19.0
:alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

This is a framework designed to build connectors with external systems,
usually called ``Backends`` in the documentation.

Documentation: http://odoo-connector.com

It features:

- A jobs queue

In which the connectors can push functions (synchronization tasks)
to be executed later.

- An event pattern

The connectors can subscribe listener functions on the events,
executed when the events are fired.

- Connector base classes

Called ``ConnectorUnit``.

Include base classes for the use in connectors, ready to be
extended:

- ``Synchronizer``: flow of an import or export
- ``Mapper``: transform a record according to mapping rules
- ``Binder``: link external IDs with local IDS
- ``BackendAdapter``: adapter interface for the exchanges with the
backend
- But ``ConnectorUnit`` can be extended to accomplish any task

- A multi-backend support

Each ``ConnectorUnit`` can be registered amongst a backend type
(eg. Magento) and a backend version (allow to have a different
``Mapper`` for each backend's version for instance)

It is used for example used to connect
`Magento <http://odoo-magento-connector.com>`__ and
`Prestashop <https://github.com/OCA/connector-prestashop>`__, but also
used with Solr, CMIS, ...

**Table of contents**

.. contents::
:local:

Usage
=====

This module does nothing on its own. It is a ground for developing
advanced connector modules. For further information, please go on:
http://odoo-connector.com

Changelog
=========

Next
----

12.0.1.0.0 (2018-11-26)
-----------------------

- [MIGRATION] from 12.0 branched at rev. 324e006

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/connector/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/connector/issues/new?body=module:%20connector%0Aversion:%2019.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
-------

* Camptocamp

Contributors
------------

- Guewen Baconnier at Camptocamp
- Alexandre Fayolle at Camptocamp
- Benoit Guillot at Akretion
- Nicolas Bessi at Camptocamp
- Joël Grand-Guillaume at Camptocamp
- Arthur Vuillard at Akretion
- Sebastien Beau at Akretion
- Laurent Mignon at Acsone
- Leonardo Pistone at Camptocamp
- David Béal at Akretion
- Christophe Combelles at Anybox
- Stéphane Bidoul at Acsone
- Malte Jacobi at IBO / HTW
- Laetitia Gangloff at Acsone
- David Lefever at Taktik S.A.
- Jos de Graeve at Apertoso NV
- Jean-Sébastien Suzanne at Anybox
- Leonardo Donelli at MONK Software
- Mathias Colpaert
- Yannick Vaucher at Camptocamp
- Nicolas Piganeau at NDP Systèmes
- Florent Thomas at Mind And Go
- Matthieu Dietrich at Camptocamp
- Olivier Laurent at Acsone
- Eric Antones at NuoBiT Solutions S.L.
- Asier Neira at Factor Libre S.L.
- Nguyen Minh Chien at Trobz.
- Youssef Egla <youssefegla@gmail.com>

Other credits
-------------

The migration of this module from 17.0 to 18.0 was financially supported
by Camptocamp.

Maintainers
-----------

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

This module is part of the `OCA/connector <https://github.com/OCA/connector/tree/19.0/connector>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
2 changes: 2 additions & 0 deletions connector/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import components
from . import models
18 changes: 18 additions & 0 deletions connector/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright 2013 Camptocamp SA
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html)

{
"name": "Connector",
"version": "19.0.1.0.0",
"author": "Camptocamp,Odoo Community Association (OCA)",
"website": "https://github.com/OCA/connector",
"license": "LGPL-3",
"category": "Generic Modules",
"depends": ["mail", "queue_job", "component", "component_event"],
"data": [
"security/connector_security.xml",
"views/connector_menu.xml",
"views/res_partner_views.xml",
],
"installable": True,
}
7 changes: 7 additions & 0 deletions connector/components/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from . import core
from . import backend_adapter
from . import binder
from . import mapper
from . import listener
from . import locker
from . import synchronizer
64 changes: 64 additions & 0 deletions connector/components/backend_adapter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Copyright 2013 Camptocamp SA
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html)

"""

Backend Adapter
===============

An external adapter has a common interface to speak with the backend.
It translates the basic orders (search, read, write) to the protocol
used by the backend.

"""

from odoo.addons.component.core import AbstractComponent


class BackendAdapter(AbstractComponent):
"""Base Backend Adapter for the connectors"""

_name = "base.backend.adapter"
_inherit = "base.connector"
_usage = "backend.adapter"


# pylint: disable=W8106
class CRUDAdapter(AbstractComponent):
"""Base External Adapter specialized in the handling
of records on external systems.

This is an empty shell, Components can inherit and implement their own
implementation for the methods.

"""

_name = "base.backend.adapter.crud"
_inherit = "base.backend.adapter"
_usage = "backend.adapter"

def search(self, *args, **kwargs):
"""Search records according to some criterias
and returns a list of ids"""
raise NotImplementedError

def read(self, *args, **kwargs):
"""Returns the information of a record"""
raise NotImplementedError

def search_read(self, *args, **kwargs):
"""Search records according to some criterias
and returns their information"""
raise NotImplementedError

def create(self, *args, **kwargs):
"""Create a record on the external system"""
raise NotImplementedError

def write(self, *args, **kwargs):
"""Update records on the external system"""
raise NotImplementedError

def delete(self, *args, **kwargs):
"""Delete a record on the external system"""
raise NotImplementedError
Loading
Loading