72 lines
2.8 KiB
Python
72 lines
2.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright 2016 Camptocamp
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
|
|
|
|
import inspect
|
|
|
|
from odoo import models, api
|
|
from ..job import DelayableRecordset
|
|
|
|
|
|
class Base(models.AbstractModel):
|
|
""" The base model, which is implicitly inherited by all models. """
|
|
_inherit = 'base'
|
|
|
|
@api.model_cr
|
|
def _register_hook(self):
|
|
""" register marked jobs """
|
|
super(Base, self)._register_hook()
|
|
job_methods = set()
|
|
for attr_name in dir(self):
|
|
# _cache on models is a lazy_property which raises an
|
|
# AssertionError when called on a empty model, just skip it.
|
|
if attr_name == '_cache':
|
|
continue
|
|
try:
|
|
attr = getattr(self, attr_name)
|
|
except AttributeError:
|
|
continue
|
|
if inspect.ismethod(attr) and getattr(attr, 'delayable', None):
|
|
job_methods.add(attr)
|
|
for job_method in job_methods:
|
|
self.env['queue.job.function']._register_job(job_method)
|
|
|
|
@api.multi
|
|
def with_delay(self, priority=None, eta=None,
|
|
max_retries=None, description=None,
|
|
channel=None):
|
|
""" Return a ``DelayableRecordset``
|
|
|
|
The returned instance allow to enqueue any method of the recordset's
|
|
Model which is decorated by :func:`~odoo.addons.queue_job.job.job`.
|
|
|
|
Usage::
|
|
|
|
self.env['res.users'].with_delay().write({'name': 'test'})
|
|
|
|
In the line above, in so far ``write`` is allowed to be delayed with
|
|
``@job``, the write will be executed in an asynchronous job.
|
|
|
|
|
|
:param priority: Priority of the job, 0 being the higher priority.
|
|
Default is 10.
|
|
:param eta: Estimated Time of Arrival of the job. It will not be
|
|
executed before this date/time.
|
|
:param max_retries: maximum number of retries before giving up and set
|
|
the job state to 'failed'. A value of 0 means
|
|
infinite retries. Default is 5.
|
|
:param description: human description of the job. If None, description
|
|
is computed from the function doc or name
|
|
:param channel: the complete name of the channel to use to process
|
|
the function. If specified it overrides the one
|
|
defined on the function
|
|
:return: instance of a DelayableRecordset
|
|
:rtype: :class:`odoo.addons.queue_job.job.DelayableRecordset`
|
|
|
|
"""
|
|
return DelayableRecordset(self, priority=priority,
|
|
eta=eta,
|
|
max_retries=max_retries,
|
|
description=description,
|
|
channel=channel)
|