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 #495

Closed
wants to merge 97 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
f4ab193
Extract 'components' into an individual addon
guewen Jan 15, 2017
bc9fbbf
Add test_component
guewen Jan 15, 2017
4b28d7f
Separate lookup by name and by usage
guewen Jan 19, 2017
2cfcd66
Various fixes in component
guewen Jun 12, 2017
6f71776
Add AbstractComponent
guewen Jun 13, 2017
a1d57c0
Remove overrides of attributes
guewen Jun 13, 2017
78bfc5e
Allow to share some components across collections
guewen Jun 13, 2017
3be8c2a
Instanciate the component returned by name
guewen Jun 13, 2017
ffdfbab
Get rid of MetaMapper
guewen Jun 14, 2017
61f6356
Add check to help find duplicate components
guewen Jun 14, 2017
92d2006
Fix pep8
guewen Jun 14, 2017
11cba86
Add tests to component
guewen Jun 15, 2017
3a0d587
Use 2 different methods for single/many lookup
guewen Jun 15, 2017
81fffdc
Document component
guewen Jun 15, 2017
a5e1f96
Fix error messages
guewen Jun 16, 2017
a523054
Update documentation
guewen Jun 17, 2017
db5207c
Draft new component_event addon
guewen Jun 17, 2017
43996da
Hold a component registry per database
guewen Jun 17, 2017
aa05004
Add a cache on the components lookups
guewen Jun 17, 2017
dd8a89f
Improve components classes
guewen Jun 19, 2017
13c6ee4
Continue the migration guide
guewen Jun 19, 2017
a2aa981
Fix test: post_install
guewen Jun 19, 2017
01e1777
Move base component in a components directory
guewen Jun 20, 2017
7036e74
Check that component registry is ready for events
guewen Jun 20, 2017
4834497
Use self.work.env, in case self.collection is empty
guewen Jun 20, 2017
7c98178
Change Collection.work_on() to a context manager
guewen Jun 22, 2017
595cfc5
Allow to build components for a specific module on demand. When a mod…
lmignon Jun 29, 2017
bc9ad5d
Simplify tests by loading modules components
guewen Jun 30, 2017
4c365a9
Add a new method to refine match of components
guewen Jul 4, 2017
ce0969c
Add new TestCase classes to test connectors
guewen Jul 4, 2017
6320729
Exclude current addon in ComponentRegistryCase setup
guewen Jul 6, 2017
3eea32c
Set component registry to ready only during tests
guewen Jul 6, 2017
3908f3e
Add readme files
guewen Jul 11, 2017
123a8e8
Allow to add an inheritance on an existing component
guewen Aug 15, 2017
3489bf5
Make abstract/non-abstract inheritance more robust
guewen Aug 15, 2017
b18c16f
Set modules uninstallable
guewen Oct 3, 2017
b7ad72e
Make addons installable
guewen Oct 3, 2017
b6b38a5
PY3: apply automated changes by 2to3 on addons
guewen Oct 3, 2017
3207ed7
Fix some pylint-odoo warnings
guewen Oct 3, 2017
be7e0f4
component: Fix component lookup by usage If more than one component i…
lmignon Jan 9, 2018
2555eb9
Refine lookup on specific model over generic component
guewen Jan 25, 2018
f389c97
Bump component at 11.0.1.1.0
guewen Jan 31, 2018
b01b18e
component: Add missing argument in logging call
Mar 1, 2018
8372dc3
Add SavepointComponentRegistryCase
guewen Jun 4, 2018
e76592e
Exclude components created by tests from the list of addon's components
guewen Jun 4, 2018
9436760
Translated using Weblate (French)
guewen Jun 27, 2018
274ddc1
Improve documentation of APIs
guewen Mar 30, 2018
98ba809
Make modules uninstallable
OCA-git-bot Sep 26, 2018
4c9ca4e
Migrate component to version 12.0
guewen Oct 2, 2018
3a3340b
Add OCA development status
guewen Oct 2, 2018
55f491c
component, component_event: tag unittest.TestCase subclasses
naglis Mar 19, 2019
f394831
icon.png
OCA-git-bot Apr 3, 2019
a4320b1
README.rst
OCA-git-bot Jul 29, 2019
bd548ec
Translated using Weblate (Chinese (Simplified))
liweijie0812 Sep 1, 2019
0c0936c
Set modules uninstallable
guewen Oct 10, 2019
b3038a9
component: Migration to 13.0
damdam-s Oct 10, 2019
6219a30
test_component: Migration to 13.0
damdam-s Oct 11, 2019
3f03886
connector: Use more permissive licence: AGPL-> LGPL
lmignon Oct 14, 2019
3804480
black, isort
lmignon Oct 23, 2019
173d9f1
component, component_event, test_component: Installable True
lmignon Oct 23, 2019
78e7d06
Fix string interpolation
guewen Mar 24, 2020
30e31b6
component 13.0.1.0.1
OCA-git-bot Mar 24, 2020
b4ac814
Translated using Weblate (Portuguese (Brazil))
Aug 12, 2020
e470ad5
MIGR 14.0 component
bealdav Oct 16, 2020
ac440db
FIX component: add py3.8 backport to make test right
bealdav Oct 16, 2020
a9726f1
DOC component: update history
bealdav Oct 26, 2020
a2822d7
[FIX] development status
sbidoul Dec 12, 2020
26a057d
component 14.0.1.0.1
OCA-git-bot Dec 12, 2020
dbc7716
component: allow propagation of custom registry
simahawk Nov 4, 2020
c3b7742
component: SavepointComponentRegistryCase init registry on setUpClass
simahawk Nov 7, 2020
37b0f7d
component: add test for ctx registry propagation
simahawk Nov 7, 2020
fdd1c02
component: let tests propagate registry via ctx
simahawk Nov 9, 2020
b2ebcbf
component 14.0.1.0.2
OCA-git-bot Jan 4, 2021
b41c2ff
14.0 component: improve README
gurneyalex Apr 16, 2021
50a42ef
component: lookup propagate kw args
simahawk Dec 16, 2020
119a95f
component: delegate component match n filter to private methods
simahawk Feb 8, 2021
d5ec03d
component 14.0.1.1.0
OCA-git-bot May 5, 2021
8ce81ed
Initialize 15.0 branch
lmignon Nov 25, 2021
55b1845
[MIG] component: Migration to 15.0
yankinmax Nov 25, 2021
0cb2a8c
[MIG][15.0] component
i-vyshnevska Dec 2, 2021
cd4d0e4
[REF] remove explicit 'object' inheritance
florentx Jan 27, 2022
fa4b59d
component 15.0.1.0.1
OCA-git-bot Aug 1, 2022
ea4c5ed
[IMP] component: add link to doc
gurneyalex Oct 17, 2022
1abdd89
[16.0][MIG] component + test_component: Migration to 16.0
asierneiradev Oct 4, 2022
b961165
component: add RegistryNotReadyError
simahawk Mar 6, 2023
4e885d0
component: add is_component_registry_ready
simahawk Mar 6, 2023
95e6617
component: update contributors
simahawk Mar 6, 2023
07eb3d3
component 16.0.1.1.0
OCA-git-bot Mar 7, 2023
88fcf9d
Translated using Weblate (Spanish)
Ivorra78 Aug 2, 2023
6f411e9
component: fix ComponentRegistryCase + TransactionComponentRegistryCase
simahawk Aug 12, 2023
36d4f7b
component 16.0.1.1.1
OCA-git-bot Aug 17, 2023
07b2d3e
[IMP] component: pre-commit auto fixes
nguyenminhchien Nov 30, 2023
8996124
[MIG] component: Migration to 17.0
nguyenminhchien Nov 30, 2023
1ac2d83
[BOT] post-merge updates
OCA-git-bot Dec 8, 2023
4cca3ec
Translated using Weblate (Italian)
mymage Feb 26, 2024
a06127c
[IMP] component: pre-commit auto fixes
damcar Oct 8, 2024
c8ee9ae
[MIG] component: Migration to 18.0
damcar Oct 8, 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
160 changes: 160 additions & 0 deletions component/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
==========
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/17.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-17-0/connector-17-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=17.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:%2017.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]>

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/17.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