Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[18.0][MIG] component: Migration to 18.0 #492

Merged
merged 163 commits into from
Oct 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
163 commits
Select commit Hold shift + click to select a range
f7699de
Extract 'components' into an individual addon
guewen Jan 15, 2017
47c38ef
Add test_component
guewen Jan 15, 2017
67779d9
Separate lookup by name and by usage
guewen Jan 19, 2017
d0d3c95
Various fixes in component
guewen Jun 12, 2017
131a15d
Add AbstractComponent
guewen Jun 13, 2017
31ca09d
Remove overrides of attributes
guewen Jun 13, 2017
06e569e
Allow to share some components across collections
guewen Jun 13, 2017
a352ca4
Instanciate the component returned by name
guewen Jun 13, 2017
b688108
Get rid of MetaMapper
guewen Jun 14, 2017
b45b04a
Add check to help find duplicate components
guewen Jun 14, 2017
443efa1
Fix pep8
guewen Jun 14, 2017
565328a
Add tests to component
guewen Jun 15, 2017
ea37acb
Use 2 different methods for single/many lookup
guewen Jun 15, 2017
b1f7fb4
Document component
guewen Jun 15, 2017
20a68dc
Fix error messages
guewen Jun 16, 2017
38f17f3
Update documentation
guewen Jun 17, 2017
622ed5f
Draft new component_event addon
guewen Jun 17, 2017
38ca803
Hold a component registry per database
guewen Jun 17, 2017
f001e0e
Add a cache on the components lookups
guewen Jun 17, 2017
140d8b4
Improve components classes
guewen Jun 19, 2017
b63c192
Continue the migration guide
guewen Jun 19, 2017
404aec8
Fix test: post_install
guewen Jun 19, 2017
c5ff2c8
Move base component in a components directory
guewen Jun 20, 2017
628ac9c
Check that component registry is ready for events
guewen Jun 20, 2017
2f575fd
Use self.work.env, in case self.collection is empty
guewen Jun 20, 2017
649784e
Change Collection.work_on() to a context manager
guewen Jun 22, 2017
1e38988
Allow to build components for a specific module on demand. When a mod…
lmignon Jun 29, 2017
15bc562
Simplify tests by loading modules components
guewen Jun 30, 2017
fa50e59
Add a new method to refine match of components
guewen Jul 4, 2017
049286b
Add new TestCase classes to test connectors
guewen Jul 4, 2017
82327b4
Exclude current addon in ComponentRegistryCase setup
guewen Jul 6, 2017
b57de4c
Set component registry to ready only during tests
guewen Jul 6, 2017
9512072
Add readme files
guewen Jul 11, 2017
e134823
Allow to add an inheritance on an existing component
guewen Aug 15, 2017
0b0a972
Make abstract/non-abstract inheritance more robust
guewen Aug 15, 2017
92d1efa
Set modules uninstallable
guewen Oct 3, 2017
908e791
Make addons installable
guewen Oct 3, 2017
abba338
PY3: apply automated changes by 2to3 on addons
guewen Oct 3, 2017
b3404c9
Fix some pylint-odoo warnings
guewen Oct 3, 2017
ab62866
OCA Transbot updated translations from Transifex
oca-transbot Jan 6, 2018
a6da5a0
component: Fix component lookup by usage If more than one component i…
lmignon Jan 9, 2018
20b7ff8
Refine lookup on specific model over generic component
guewen Jan 25, 2018
a53482a
Bump component at 11.0.1.1.0
guewen Jan 31, 2018
aadc01f
OCA Transbot updated translations from Transifex
oca-transbot Feb 17, 2018
5e2e768
component: Add missing argument in logging call
Mar 1, 2018
2ce6061
Add SavepointComponentRegistryCase
guewen Jun 4, 2018
ae83376
Exclude components created by tests from the list of addon's components
guewen Jun 4, 2018
088e394
Update component.pot
oca-travis Jun 23, 2018
3707d1f
Translated using Weblate (French)
guewen Jun 27, 2018
59bce20
Improve documentation of APIs
guewen Mar 30, 2018
a8e0fb4
Make modules uninstallable
OCA-git-bot Sep 26, 2018
b61b47c
Migrate component to version 12.0
guewen Oct 2, 2018
1682a9f
Add OCA development status
guewen Oct 2, 2018
b690eed
README.rst
OCA-git-bot Nov 9, 2018
be746b3
Update component.pot
oca-travis Nov 9, 2018
9d9db7d
Update translation files
oca-transbot Dec 9, 2018
977fcb0
component, component_event: tag unittest.TestCase subclasses
naglis Mar 19, 2019
552c11f
icon.png
OCA-git-bot Apr 3, 2019
22c8bbf
README.rst
OCA-git-bot Jul 29, 2019
aa60686
Added translation using Weblate (Chinese (Simplified))
liweijie0812 Sep 1, 2019
0dffed3
Translated using Weblate (Chinese (Simplified))
liweijie0812 Sep 1, 2019
fff49f3
Set modules uninstallable
guewen Oct 10, 2019
8ebd8ff
component: Migration to 13.0
damdam-s Oct 10, 2019
d8d647e
test_component: Migration to 13.0
damdam-s Oct 11, 2019
884905d
connector: Use more permissive licence: AGPL-> LGPL
lmignon Oct 14, 2019
def7ce7
black, isort
lmignon Oct 23, 2019
4e95121
component, component_event, test_component: Installable True
lmignon Oct 23, 2019
ffb5588
Update component.pot
oca-travis Oct 30, 2019
3295898
README.rst
OCA-git-bot Oct 30, 2019
bdc05fd
Fix string interpolation
guewen Mar 24, 2020
413b7df
component 13.0.1.0.1
OCA-git-bot Mar 24, 2020
d967d19
Translated using Weblate (Portuguese (Brazil))
Aug 12, 2020
6ddb625
MIGR 14.0 component
bealdav Oct 16, 2020
3a32086
FIX component: add py3.8 backport to make test right
bealdav Oct 16, 2020
2b48616
DOC component: update history
bealdav Oct 26, 2020
a8ba21a
[UPD] Update component.pot
oca-travis Oct 26, 2020
4eb80d0
[UPD] README.rst
OCA-git-bot Oct 26, 2020
e73a341
[FIX] development status
sbidoul Dec 12, 2020
57cbfdc
[UPD] README.rst
OCA-git-bot Dec 12, 2020
26649ac
component 14.0.1.0.1
OCA-git-bot Dec 12, 2020
77a81e0
component: allow propagation of custom registry
simahawk Nov 4, 2020
acb5a9f
component: SavepointComponentRegistryCase init registry on setUpClass
simahawk Nov 7, 2020
a111b28
component: add test for ctx registry propagation
simahawk Nov 7, 2020
13e2781
component: let tests propagate registry via ctx
simahawk Nov 9, 2020
b4f12c7
component 14.0.1.0.2
OCA-git-bot Jan 4, 2021
ad8e02d
14.0 component: improve README
gurneyalex Apr 16, 2021
88b7f0e
component: lookup propagate kw args
simahawk Dec 16, 2020
b0c9f48
component: delegate component match n filter to private methods
simahawk Feb 8, 2021
7b63fa7
component 14.0.1.1.0
OCA-git-bot May 5, 2021
c8ea21f
[UPD] README.rst
OCA-git-bot Jun 5, 2021
1427d49
Initialize 15.0 branch
lmignon Nov 25, 2021
e9d066d
[MIG] component: Migration to 15.0
yankinmax Nov 25, 2021
c7d6152
[UPD] Update component.pot
Nov 29, 2021
96e4d96
[UPD] README.rst
OCA-git-bot Nov 29, 2021
5804290
[MIG][15.0] component
i-vyshnevska Dec 2, 2021
37ecb60
[REF] remove explicit 'object' inheritance
florentx Jan 27, 2022
38637d0
component 15.0.1.0.1
OCA-git-bot Aug 1, 2022
548b9ad
[IMP] component: add link to doc
gurneyalex Oct 17, 2022
ffcd99e
[16.0][MIG] component + test_component: Migration to 16.0
asierneiradev Oct 4, 2022
2778f19
[UPD] README.rst
OCA-git-bot Dec 1, 2022
52fdd4c
Update translation files
weblate Dec 1, 2022
b9a38e0
Translated using Weblate (Italian)
mymage Dec 28, 2022
1a7fade
component: add RegistryNotReadyError
simahawk Mar 6, 2023
41d50f4
component: add is_component_registry_ready
simahawk Mar 6, 2023
b626e4e
component: update contributors
simahawk Mar 6, 2023
abd070b
[UPD] README.rst
OCA-git-bot Mar 7, 2023
47cc1a2
component 16.0.1.1.0
OCA-git-bot Mar 7, 2023
a88c0ec
Translated using Weblate (Spanish)
Ivorra78 Aug 2, 2023
79e3da8
component: fix ComponentRegistryCase + TransactionComponentRegistryCase
simahawk Aug 12, 2023
abc304d
component 16.0.1.1.1
OCA-git-bot Aug 17, 2023
36619d9
[UPD] README.rst
OCA-git-bot Sep 3, 2023
f9f0864
[IMP] component: pre-commit auto fixes
nguyenminhchien Nov 30, 2023
f9e6af1
[MIG] component: Migration to 17.0
nguyenminhchien Nov 30, 2023
856b037
[UPD] Update component.pot
Dec 8, 2023
49f9ea4
[BOT] post-merge updates
OCA-git-bot Dec 8, 2023
4008209
Translated using Weblate (Italian)
mymage Feb 26, 2024
929d579
[IMP] component: apply pre-commit auto fixes
thienvh332 Sep 19, 2024
13d008d
[MIG] component: Migration to 18.0
thienvh332 Sep 19, 2024
477a8ab
Add test_component
guewen Jan 15, 2017
1d39bb1
Separate lookup by name and by usage
guewen Jan 19, 2017
95c7912
Rename file, it confuses pytest
guewen Jun 14, 2017
34e1cad
Run tests after install
guewen Jun 14, 2017
4fe2da6
Use 2 different methods for single/many lookup
guewen Jun 15, 2017
0bfcf70
Update test_connector
guewen Jun 16, 2017
e5a4528
Hold a component registry per database
guewen Jun 17, 2017
9ef4194
Change Collection.work_on() to a context manager
guewen Jun 22, 2017
cde2ae7
Add new TestCase classes to test connectors
guewen Jul 4, 2017
c1431e3
Add description in test addons to make pylint happier
guewen Aug 15, 2017
1a9497c
[MIG] Set modules uninstallable
guewen Oct 3, 2017
6cf66fd
Make addons installable
guewen Oct 3, 2017
144a19c
PY3: apply automated changes by 2to3 on addons
guewen Oct 3, 2017
52aea0f
Fix some pylint-odoo warnings
guewen Oct 3, 2017
c4482b0
OCA Transbot updated translations from Transifex
oca-transbot Jan 6, 2018
7d648f1
[MIG] Make modules uninstallable
OCA-git-bot Sep 26, 2018
e46cfc9
Migrate component to version 12.0
guewen Oct 2, 2018
b969177
Add OCA development status
guewen Oct 2, 2018
8974f29
[UPD] README.rst
OCA-git-bot Nov 9, 2018
b97639e
[ADD] icon.png
OCA-git-bot Apr 3, 2019
5cd82bb
Set modules uninstallable
guewen Oct 10, 2019
ca93e44
[MIG] test_component: Migration to 13.0
damdam-s Oct 11, 2019
41faffd
[12.0][CHG] connector: Use more permissive licence: AGPL-> LGPL
lmignon Oct 14, 2019
d84a598
black, isort
lmignon Oct 23, 2019
a3360df
[MIG] component, component_event, test_component: Installable True
lmignon Oct 23, 2019
2d8a63b
[UPD] README.rst
OCA-git-bot Oct 30, 2019
26c7be9
[IMP] test_component: black, isort, prettier
guewen Apr 24, 2021
41db7d7
[MIG] test_component: Migration to 14.0
guewen Apr 24, 2021
efd288a
[UPD] Update test_component.pot
oca-travis Apr 28, 2021
122ccd2
[UPD] README.rst
OCA-git-bot Apr 28, 2021
b53037a
Initialize 15.0 branch
lmignon Nov 25, 2021
eb33f1a
[MIG] test_component: Migration to 15.0
yankinmax Nov 26, 2021
14db511
[16.0][MIG] component + test_component: Migration to 16.0
asierneiradev Oct 4, 2022
45a0776
Update translation files
weblate Dec 1, 2022
f6521a0
Translated using Weblate (Italian)
francesco-ooops Jun 22, 2023
3e2e976
Translated using Weblate (Italian)
mymage Jun 23, 2023
1178dfd
Translated using Weblate (Spanish)
Ivorra78 Aug 2, 2023
c302cec
[UPD] README.rst
OCA-git-bot Sep 3, 2023
adbc201
Translated using Weblate (Italian)
mymage Sep 22, 2023
84160c9
[IMP] test_component: pre-commit auto fixes
nguyenminhchien Nov 30, 2023
d6466e1
[MIG] test_component: Migration to 17.0
nguyenminhchien Nov 30, 2023
621590b
[UPD] Update test_component.pot
Dec 8, 2023
da34f62
[BOT] post-merge updates
OCA-git-bot Dec 8, 2023
62e1e34
Update translation files
weblate Feb 3, 2024
b6751e1
[MIG] test_component: Migration to 18.0
thienvh332 Sep 24, 2024
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
167 changes: 167 additions & 0 deletions component/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,167 @@
==========
Components
==========

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

.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
:target: https://odoo-community.org/page/development-status
:alt: Production/Stable
.. |badge2| image:: https://img.shields.io/badge/licence-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/18.0/component
:alt: OCA/connector
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/connector-18-0/connector-18-0-component
: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=18.0
:alt: Try me on Runboat

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

This module implements a component system and is a base block for the
Connector Framework. It can be used without using the full Connector
though.

Documentation: http://odoo-connector.com/

You may also want to check the `Introduction to Odoo
Components <https://dev.to/guewen/introduction-to-odoo-components-bn0>`__
by @guewen.

**Table of contents**

.. contents::
:local:

Usage
=====

As a developer, you have access to a component system. You can find the
documentation in the code or on http://odoo-connector.com

In a nutshell, you can create components:

::

from odoo.addons.component.core import Component

class MagentoPartnerAdapter(Component):
_name = 'magento.partner.adapter'
_inherit = 'magento.adapter'

_usage = 'backend.adapter'
_collection = 'magento.backend'
_apply_on = ['res.partner']

And later, find the component you need at runtime (dynamic dispatch at
component level):

::

def run(self, external_id):
backend_adapter = self.component(usage='backend.adapter')
external_data = backend_adapter.read(external_id)

In order for tests using components to work, you will need to use the
base class provided by \`odoo.addons.component.tests.common\`:

- TransactionComponentCase

There are also some specific base classes for testing the component
registry, using the ComponentRegistryCase as a base class. See the
docstrings in tests/common.py.

Changelog
=========

16.0.1.0.0 (2022-10-04)
-----------------------

- [MIGRATION] from 15.0

15.0.1.0.0 (2021-11-25)
-----------------------

- [MIGRATION] from 14.0

14.0.1.0.0 (2020-10-22)
-----------------------

- [MIGRATION] from 13.0

13.0.1.0.0 (2019-10-23)
-----------------------

- [MIGRATION] from 12.0

12.0.1.0.0 (2018-10-02)
-----------------------

- [MIGRATION] from 11.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:%20component%0Aversion:%2018.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 <[email protected]>
- Laurent Mignon <[email protected]>
- Simone Orsi <[email protected]>
- Thien Vo <[email protected]>

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.

.. |maintainer-guewen| image:: https://github.com/guewen.png?size=40px
:target: https://github.com/guewen
:alt: guewen

Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-guewen|

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

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
5 changes: 5 additions & 0 deletions component/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from . import core

from . import components
from . import builder
from . import models
22 changes: 22 additions & 0 deletions component/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Copyright 2017 Camptocamp SA
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html)

{
"name": "Components",
"summary": "Add capabilities to register and use decoupled components,"
" as an alternative to model classes",
"version": "18.0.1.0.0",
"author": "Camptocamp," "Odoo Community Association (OCA)",
"website": "https://github.com/OCA/connector",
"license": "LGPL-3",
"category": "Generic Modules",
"depends": ["base"],
"external_dependencies": {
"python": [
"cachetools",
]
},
"installable": True,
"development_status": "Production/Stable",
"maintainers": ["guewen"],
}
97 changes: 97 additions & 0 deletions component/builder.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
# Copyright 2019 Camptocamp SA
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html)

"""

Components Builder
==================

Build the components at the build of a registry.

"""

import odoo
from odoo import models

from .core import DEFAULT_CACHE_SIZE, ComponentRegistry, _component_databases


class ComponentBuilder(models.AbstractModel):
"""Build the component classes

And register them in a global registry.

Every time an Odoo registry is built, the know components are cleared and
rebuilt as well. The Component classes are built using the same mechanism
than Odoo's Models: a final class is created, taking every Components with
a ``_name`` and applying Components with an ``_inherits`` upon them.

The final Component classes are registered in global registry.

This class is an Odoo model, allowing us to hook the build of the
components at the end of the Odoo's registry loading, using
``_register_hook``. This method is called after all modules are loaded, so
we are sure that we have all the components Classes and in the correct
order.

"""

_name = "component.builder"
_description = "Component Builder"

_components_registry_cache_size = DEFAULT_CACHE_SIZE

def _register_hook(self):
# This method is called by Odoo when the registry is built,
# so in case the registry is rebuilt (cache invalidation, ...),
# we have to to rebuild the components. We use a new
# registry so we have an empty cache and we'll add components in it.
components_registry = self._init_global_registry()
self.build_registry(components_registry)
components_registry.ready = True

def _init_global_registry(self):
components_registry = ComponentRegistry(
cachesize=self._components_registry_cache_size
)
_component_databases[self.env.cr.dbname] = components_registry
return components_registry

def build_registry(self, components_registry, states=None, exclude_addons=None):
if not states:
states = ("installed", "to upgrade")
# lookup all the installed (or about to be) addons and generate
# the graph, so we can load the components following the order
# of the addons' dependencies
graph = odoo.modules.graph.Graph()
graph.add_module(self.env.cr, "base")

query = "SELECT name " "FROM ir_module_module " "WHERE state IN %s "
params = [tuple(states)]
if exclude_addons:
query += " AND name NOT IN %s "
params.append(tuple(exclude_addons))
self.env.cr.execute(query, params)

module_list = [name for (name,) in self.env.cr.fetchall() if name not in graph]
graph.add_modules(self.env.cr, module_list)

for module in graph:
self.load_components(module.name, components_registry=components_registry)

def load_components(self, module, components_registry=None):
"""Build every component known by MetaComponent for an odoo module

The final component (composed by all the Component classes in this
module) will be pushed into the registry.

:param module: the name of the addon for which we want to load
the components
:type module: str | unicode
:param registry: the registry in which we want to put the Component
:type registry: :py:class:`~.core.ComponentRegistry`
"""
components_registry = (
components_registry or _component_databases[self.env.cr.dbname]
)
components_registry.load_components(module)
1 change: 1 addition & 0 deletions component/components/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import base
15 changes: 15 additions & 0 deletions component/components/base.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Copyright 2017 Camptocamp SA
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html)

from ..core import AbstractComponent


class BaseComponent(AbstractComponent):
"""This is the base component for every component

It is implicitely inherited by all components.

All your base are belong to us
"""

_name = "base"
Loading
Loading