mirror of
https://github.com/bringout/oca-technical.git
synced 2026-04-18 22:32:01 +02:00
Initial commit: OCA Technical packages (595 packages)
This commit is contained in:
commit
2cc02aac6e
24950 changed files with 2318079 additions and 0 deletions
|
|
@ -0,0 +1 @@
|
|||
from . import collection
|
||||
|
|
@ -0,0 +1,101 @@
|
|||
# Copyright 2017 Camptocamp SA
|
||||
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html)
|
||||
|
||||
"""
|
||||
|
||||
Collection Model
|
||||
================
|
||||
|
||||
This is the base Model shared by all the Collections.
|
||||
In the context of the Connector, a collection is the Backend.
|
||||
The `_name` given to the Collection Model will be the name
|
||||
to use in the `_collection` of the Components usable for the Backend.
|
||||
|
||||
"""
|
||||
|
||||
from contextlib import contextmanager
|
||||
|
||||
from odoo import models
|
||||
|
||||
from ..core import WorkContext
|
||||
|
||||
|
||||
class Collection(models.AbstractModel):
|
||||
"""The model on which components are subscribed
|
||||
|
||||
It would be for instance the ``backend`` for the connectors.
|
||||
|
||||
Example::
|
||||
|
||||
class MagentoBackend(models.Model):
|
||||
_name = 'magento.backend' # name of the collection
|
||||
_inherit = 'collection.base'
|
||||
|
||||
|
||||
class MagentoSaleImporter(Component):
|
||||
_name = 'magento.sale.importer'
|
||||
_apply_on = 'magento.sale.order'
|
||||
_collection = 'magento.backend' # name of the collection
|
||||
|
||||
def run(self, magento_id):
|
||||
mapper = self.component(usage='import.mapper')
|
||||
extra_mappers = self.many_components(
|
||||
usage='import.mapper.extra',
|
||||
)
|
||||
# ...
|
||||
|
||||
Use it::
|
||||
|
||||
>>> backend = self.env['magento.backend'].browse(1)
|
||||
>>> with backend.work_on('magento.sale.order') as work:
|
||||
... importer = work.component(usage='magento.sale.importer')
|
||||
... importer.run(1)
|
||||
|
||||
See also: :class:`odoo.addons.component.core.WorkContext`
|
||||
|
||||
|
||||
"""
|
||||
|
||||
_name = "collection.base"
|
||||
_description = "Base Abstract Collection"
|
||||
|
||||
@contextmanager
|
||||
def work_on(self, model_name, **kwargs):
|
||||
"""Entry-point for the components, context manager
|
||||
|
||||
Start a work using the components on the model.
|
||||
Any keyword argument will be assigned to the work context.
|
||||
See documentation of :class:`odoo.addons.component.core.WorkContext`.
|
||||
|
||||
It is a context manager, so you can attach objects and clean them
|
||||
at the end of the work session, such as::
|
||||
|
||||
@contextmanager
|
||||
def work_on(self, model_name, **kwargs):
|
||||
self.ensure_one()
|
||||
magento_location = MagentoLocation(
|
||||
self.location,
|
||||
self.username,
|
||||
self.password,
|
||||
)
|
||||
# We create a Magento Client API here, so we can create the
|
||||
# client once (lazily on the first use) and propagate it
|
||||
# through all the sync session, instead of recreating a client
|
||||
# in each backend adapter usage.
|
||||
with MagentoAPI(magento_location) as magento_api:
|
||||
_super = super(MagentoBackend, self)
|
||||
# from the components we'll be able to do:
|
||||
# self.work.magento_api
|
||||
with _super.work_on(
|
||||
model_name, magento_api=magento_api, **kwargs
|
||||
) as work:
|
||||
yield work
|
||||
|
||||
"""
|
||||
self.ensure_one()
|
||||
# Allow propagation of custom component registry via context
|
||||
# TODO: maybe to be moved to `WorkContext.__init__`
|
||||
components_registry = self.env.context.get("components_registry")
|
||||
if components_registry:
|
||||
kwargs["components_registry"] = components_registry
|
||||
yield WorkContext(model_name=model_name, collection=self, **kwargs)
|
||||
Loading…
Add table
Add a link
Reference in a new issue