Queue

Job

class odoo.addons.queue_job.job.DelayableRecordset(recordset, priority=None, eta=None, max_retries=None, description=None, channel=None)[source]

Bases : object

Allow to delay a method for a recordset

Utilisation

delayable = DelayableRecordset(recordset, priority=20)
delayable.method(args, kwargs)

method must be a method of the recordset’s Model, decorated with job().

The method call will be processed asynchronously in the job queue, with the passed arguments.

class odoo.addons.queue_job.job.Job(func, args=None, kwargs=None, priority=None, eta=None, job_uuid=None, max_retries=None, description=None, channel=None)[source]

Bases : object

Un job est une tâche à exécuter.

uuid

Id (UUID) du job.

state

État du job, peut être en attente, en queue, démarré, terminé, échoué. L’état initial est en attente et l’état final est terminé.

retry

L’essai actuel, démarre à 0 et s’incrémente de 1 chaque fois que le job est exécuté.

max_retries

Le nombre maximum d’essais permis avant que le job soit considéré comme échoué.

args

Arguments transmis à la fonction pendant l’exécution.

kwargs

Arguments nommés transmis à la fonction pendant l’exécution.

description

Description du job à destination des utilisateurs.

func

La fonction Python elle-même.

model_name

Modèle Odoo pour lequel le job va fonctionner.

priority

Priorité du job, 0 étant la plus haute priorité.

date_created

Date et heure de création du job.

date_enqueued

Date et heure de mise en queue du job.

date_started

Date et heure de démarrage du job.

date_done

Date et heure d’arrêt du job.

result

Une description du résultat (à destination des utilisateurs).

exc_info

Informations sur l”Exception (`traceback”) ayant causé l’échec du job

user_id

Id de l’utilisateur Odoo qui a créé le job

eta

Heure estimée de lancement (ETA) du job. Il ne sera pas exécuté avant cette date/heure.

recordset

Model recordset when we are on a delayed Model method

classmethod load(env, job_uuid)[source]

Lit un job depuis la base de données

classmethod enqueue(func, args=None, kwargs=None, priority=None, eta=None, max_retries=None, description=None, channel=None)[source]

Crée un job et le met en queue. Renvoie le UUID du job.

S’attend à ce que les arguments spécifiques au job soient déjà extraites de ceux à passer à la fonction du job.

static db_record_from_uuid(env, job_uuid)[source]
perform()[source]

Exécute le job.

Le job est exécuté avec l’utilisateur qui l’a initié.

store()[source]

Stocke le job

db_record()[source]
func
description
uuid

Id du job, c’est un UUID

eta
set_pending(result=None, reset_retry=True)[source]
set_enqueued()[source]
set_started()[source]
set_done(result=None)[source]
set_failed(exc_info=None)[source]
postpone(result=None, seconds=None)[source]

Écrit un heure estimée de lancement dans n secondes. Utilisé quand une Exception non fatale souhaite relancer un job.

related_action()[source]
odoo.addons.queue_job.job.job(func=None, default_channel='root', retry_pattern=None)[source]

Décorateur pour les jobs.

Optional argument:

Paramètres:
  • default_channel – the channel wherein the job will be assigned. This channel is set at the installation of the module and can be manually changed later using the views.
  • retry_pattern (dict(retry_count,retry_eta_seconds)) – The retry pattern to use for postponing a job. If a job is postponed and there is no eta specified, the eta will be determined from the dict in retry_pattern. When no retry pattern is provided, jobs will be retried after RETRY_INTERVAL seconds.

Indicates that a method of a Model can be delayed in the Job Queue.

When a method has the @job decorator, its calls can then be delayed with:

recordset.with_delay(priority=10).the_method(args, **kwargs)

Where the_method is the method decorated with @job. Its arguments and keyword arguments will be kept in the Job Queue for its asynchronous execution.

default_channel indicates in which channel the job must be executed

retry_pattern is a dict where keys are the count of retries and the values are the delay to postpone a job.

Exemple :

class ProductProduct(models.Model):
    _inherit = 'product.product'

    @api.multi
    @job
    def export_one_thing(self, one_thing):
        # work
        # export one_thing

# [...]

env['a.model'].export_one_thing(the_thing_to_export)
# => normal and synchronous function call

env['a.model'].with_delay().export_one_thing(the_thing_to_export)
# => the job will be executed as soon as possible

delayable = env['a.model'].with_delay(priority=30, eta=60*60*5)
delayable.export_one_thing(the_thing_to_export)
# => the job will be executed with a low priority and not before a
# delay of 5 hours from now

@job(default_channel='root.subchannel')
def export_one_thing(one_thing):
    # work
    # export one_thing

@job(retry_pattern={1: 10 * 60,
                    5: 20 * 60,
                    10: 30 * 60,
                    15: 12 * 60 * 60})
def retryable_example():
    # 5 first retries postponed 10 minutes later
    # retries 5 to 10 postponed 20 minutes later
    # retries 10 to 15 postponed 30 minutes later
    # all subsequent retries postponed 12 hours later
    raise RetryableJobError('Must be retried later')

env['a.model'].with_delay().retryable_example()

Voir aussi : related_action() une action connexe peut être attachée à un job

odoo.addons.queue_job.job.related_action(action=None, **kwargs)[source]

Attache une action connexe à un job

Un action connexe apparaîtra comme un bouton dans la vue Odoo. Le bouton exécutera l’action, habituellement une ouverture de formulaire de l’enregistrement lié au job.

The action must be a method on the queue.job model.

Exemple d’utilisation :

class QueueJob(models.Model):
    _inherit = 'queue.job'

    @api.multi
    def related_action_partner(self):
        self.ensure_one()
        model = self.model_name
        partner = self.env[model].browse(self.record_ids)
        # possibly get the real ID if partner_id is a binding ID
        action = {
            'name': _("Partner"),
            'type': 'ir.actions.act_window',
            'res_model': model,
            'view_type': 'form',
            'view_mode': 'form',
            'res_id': partner.id,
        }
        return action

class ResPartner(models.Model):
    _inherit = 'res.partner'

    @api.multi
    @job
    @related_action(action='related_action_partner')
    def export_partner(self):
        # ...

Les kwargs sont transmis à l’action :

class QueueJob(models.Model):
    _inherit = 'queue.job'

    @api.multi
    def related_action_product(self, extra_arg=1):
        assert extra_arg == 2
        model = self.model_name
        ...

class ProductProduct(models.Model):
    _inherit = 'product.product'

    @api.multi
    @job
    @related_action(action='related_action_product', extra_arg=2)
    def export_product(self):
        # ...

Modèles

class odoo.addons.queue_job.models.base.Base(pool, cr)[source]

Bases : odoo.models.BaseModel

The base model, which is implicitly inherited by all models.

with_delay(priority=None, eta=None, max_retries=None, description=None, channel=None)[source]

Return a DelayableRecordset

The returned instance allow to enqueue any method of the recordset’s Model which is decorated by job().

Utilisation

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ètres:
  • priority – Priority of the job, 0 being the higher priority. Default is 10.
  • eta – Heure estimée de lancement (ETA) du job. Il ne sera pas exécuté avant cette date/heure.
  • 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.
  • description – human description of the job. If None, description is computed from the function doc or name
  • channel – the complete name of the channel to use to process the function. If specified it overrides the one defined on the function
Retourne:

instance of a DelayableRecordset

Type retourné:

odoo.addons.queue_job.job.DelayableRecordset

odoo.addons.queue_job.models.queue_job.channel_func_name(method)[source]
class odoo.addons.queue_job.models.queue_job.QueueJob(pool, cr)[source]

Bases : odoo.models.Model

État du job et résultat

uuid

Basic string field, can be length-limited, usually displayed as a single-line string in clients.

Paramètres:
  • size (int) – la taille maximum des valeurs stockées dans ce champ
  • translate – enable the translation of the field’s values; use translate=True to translate field values as a whole; translate may also be a callable such that translate(callback, value) translates value by using callback(term) to retrieve the translation of terms.
user_id

La valeur d’un tel champ est un recordset de taille 0 (pas d’enregistrement) ou 1 (enregistrement unique).

Paramètres:
  • comodel_name – nom du modèle cible (chaîne de caractères)
  • domain – un domain optionnel à définir sur les valeurs candidates côté client (domain ou string)
  • context – un context optionnel à utiliser côté client à la prise en charge de ce champ (dictionnaire)
  • ondelete – quoi faire quand l’enregistrement en rapport est effacé ; les valeurs possibles sont : 'set null', 'restrict', 'cascade'
  • auto_join – si les JOINs sont générés lors de la recherche sur ce champ (booleen, par défaut False)
  • delegate – définir à True pour rendre les champs du modèle cible accessibles depuis le modèle en cours (correspond à _inherits)

The attribute comodel_name is mandatory except in the case of related fields or field extensions.

company_id

La valeur d’un tel champ est un recordset de taille 0 (pas d’enregistrement) ou 1 (enregistrement unique).

Paramètres:
  • comodel_name – nom du modèle cible (chaîne de caractères)
  • domain – un domain optionnel à définir sur les valeurs candidates côté client (domain ou string)
  • context – un context optionnel à utiliser côté client à la prise en charge de ce champ (dictionnaire)
  • ondelete – quoi faire quand l’enregistrement en rapport est effacé ; les valeurs possibles sont : 'set null', 'restrict', 'cascade'
  • auto_join – si les JOINs sont générés lors de la recherche sur ce champ (booleen, par défaut False)
  • delegate – définir à True pour rendre les champs du modèle cible accessibles depuis le modèle en cours (correspond à _inherits)

The attribute comodel_name is mandatory except in the case of related fields or field extensions.

name

Basic string field, can be length-limited, usually displayed as a single-line string in clients.

Paramètres:
  • size (int) – la taille maximum des valeurs stockées dans ce champ
  • translate – enable the translation of the field’s values; use translate=True to translate field values as a whole; translate may also be a callable such that translate(callback, value) translates value by using callback(term) to retrieve the translation of terms.
model_name

Basic string field, can be length-limited, usually displayed as a single-line string in clients.

Paramètres:
  • size (int) – la taille maximum des valeurs stockées dans ce champ
  • translate – enable the translation of the field’s values; use translate=True to translate field values as a whole; translate may also be a callable such that translate(callback, value) translates value by using callback(term) to retrieve the translation of terms.
method_name

Basic string field, can be length-limited, usually displayed as a single-line string in clients.

Paramètres:
  • size (int) – la taille maximum des valeurs stockées dans ce champ
  • translate – enable the translation of the field’s values; use translate=True to translate field values as a whole; translate may also be a callable such that translate(callback, value) translates value by using callback(term) to retrieve the translation of terms.
record_ids

Serialized fields provide the storage for sparse fields.

args

Serialized fields provide the storage for sparse fields.

kwargs

Serialized fields provide the storage for sparse fields.

func_string

Basic string field, can be length-limited, usually displayed as a single-line string in clients.

Paramètres:
  • size (int) – la taille maximum des valeurs stockées dans ce champ
  • translate – enable the translation of the field’s values; use translate=True to translate field values as a whole; translate may also be a callable such that translate(callback, value) translates value by using callback(term) to retrieve the translation of terms.
state
Paramètres:
  • selection – specifies the possible values for this field. It is given as either a list of pairs (value, string), or a model method, or a method name.
  • selection_add – provides an extension of the selection in the case of an overridden field. It is a list of pairs (value, string).

The attribute selection is mandatory except in the case of related fields or field extensions.

priority
exc_info

Très similaire à Char mais utilisé pour des contenus plus longs, sans taille spécifiée et généralement affiché dans une boite de texte multi-lignes.

Paramètres:translate – enable the translation of the field’s values; use translate=True to translate field values as a whole; translate may also be a callable such that translate(callback, value) translates value by using callback(term) to retrieve the translation of terms.
result

Très similaire à Char mais utilisé pour des contenus plus longs, sans taille spécifiée et généralement affiché dans une boite de texte multi-lignes.

Paramètres:translate – enable the translation of the field’s values; use translate=True to translate field values as a whole; translate may also be a callable such that translate(callback, value) translates value by using callback(term) to retrieve the translation of terms.
date_created
date_started
date_enqueued
date_done
eta
retry
max_retries
channel_method_name

Basic string field, can be length-limited, usually displayed as a single-line string in clients.

Paramètres:
  • size (int) – la taille maximum des valeurs stockées dans ce champ
  • translate – enable the translation of the field’s values; use translate=True to translate field values as a whole; translate may also be a callable such that translate(callback, value) translates value by using callback(term) to retrieve the translation of terms.
job_function_id

La valeur d’un tel champ est un recordset de taille 0 (pas d’enregistrement) ou 1 (enregistrement unique).

Paramètres:
  • comodel_name – nom du modèle cible (chaîne de caractères)
  • domain – un domain optionnel à définir sur les valeurs candidates côté client (domain ou string)
  • context – un context optionnel à utiliser côté client à la prise en charge de ce champ (dictionnaire)
  • ondelete – quoi faire quand l’enregistrement en rapport est effacé ; les valeurs possibles sont : 'set null', 'restrict', 'cascade'
  • auto_join – si les JOINs sont générés lors de la recherche sur ce champ (booleen, par défaut False)
  • delegate – définir à True pour rendre les champs du modèle cible accessibles depuis le modèle en cours (correspond à _inherits)

The attribute comodel_name is mandatory except in the case of related fields or field extensions.

channel

Basic string field, can be length-limited, usually displayed as a single-line string in clients.

Paramètres:
  • size (int) – la taille maximum des valeurs stockées dans ce champ
  • translate – enable the translation of the field’s values; use translate=True to translate field values as a whole; translate may also be a callable such that translate(callback, value) translates value by using callback(term) to retrieve the translation of terms.

Ouvre l’action associée au job

button_done()[source]
requeue()[source]
write(vals)[source]
autovacuum()[source]

Delete all jobs done since more than _removal_interval days.

Appelé depuis une tâche planifiée (cron).

class odoo.addons.queue_job.models.queue_job.RequeueJob(pool, cr)[source]

Bases : odoo.models.TransientModel

job_ids

Champ many2many ; la valeur d’un tel champ est un recordset.

Paramètres:comodel_name – nom du modèle cible (chaîne de caractères)

The attribute comodel_name is mandatory except in the case of related fields or field extensions.

Paramètres:
  • relation – nom optionnel de la table qui stocke la relation dans la base de données (string)
  • column1 – optional name of the column referring to « these » records in the table relation (string)
  • column2 – optional name of the column referring to « those » records in the table relation (string)

The attributes relation, column1 and column2 are optional. If not given, names are automatically generated from model names, provided model_name and comodel_name are different!

Paramètres:
  • domain – un domain optionnel à définir sur les valeurs candidates côté client (domain ou string)
  • context – un context optionnel à utiliser côté client à la prise en charge de ce champ (dictionnaire)
  • limit – limite optionnelle à utiliser à la lecture (entier)
requeue()[source]
class odoo.addons.queue_job.models.queue_job.JobChannel(pool, cr)[source]

Bases : odoo.models.Model

name

Basic string field, can be length-limited, usually displayed as a single-line string in clients.

Paramètres:
  • size (int) – la taille maximum des valeurs stockées dans ce champ
  • translate – enable the translation of the field’s values; use translate=True to translate field values as a whole; translate may also be a callable such that translate(callback, value) translates value by using callback(term) to retrieve the translation of terms.
complete_name

Basic string field, can be length-limited, usually displayed as a single-line string in clients.

Paramètres:
  • size (int) – la taille maximum des valeurs stockées dans ce champ
  • translate – enable the translation of the field’s values; use translate=True to translate field values as a whole; translate may also be a callable such that translate(callback, value) translates value by using callback(term) to retrieve the translation of terms.
parent_id

La valeur d’un tel champ est un recordset de taille 0 (pas d’enregistrement) ou 1 (enregistrement unique).

Paramètres:
  • comodel_name – nom du modèle cible (chaîne de caractères)
  • domain – un domain optionnel à définir sur les valeurs candidates côté client (domain ou string)
  • context – un context optionnel à utiliser côté client à la prise en charge de ce champ (dictionnaire)
  • ondelete – quoi faire quand l’enregistrement en rapport est effacé ; les valeurs possibles sont : 'set null', 'restrict', 'cascade'
  • auto_join – si les JOINs sont générés lors de la recherche sur ce champ (booleen, par défaut False)
  • delegate – définir à True pour rendre les champs du modèle cible accessibles depuis le modèle en cours (correspond à _inherits)

The attribute comodel_name is mandatory except in the case of related fields or field extensions.

job_function_ids

One2many field; the value of such a field is the recordset of all the records in comodel_name such that the field inverse_name is equal to the current record.

Paramètres:
  • comodel_name – nom du modèle cible (chaîne de caractères)
  • inverse_name – name of the inverse Many2one field in comodel_name (string)
  • domain – un domain optionnel à définir sur les valeurs candidates côté client (domain ou string)
  • context – un context optionnel à utiliser côté client à la prise en charge de ce champ (dictionnaire)
  • auto_join – si les JOINs sont générés lors de la recherche sur ce champ (booleen, par défaut False)
  • limit – limite optionnelle à utiliser à la lecture (entier)

The attributes comodel_name and inverse_name are mandatory except in the case of related fields or field extensions.

parent_required()[source]
write(values)[source]
name_get()[source]
class odoo.addons.queue_job.models.queue_job.JobFunction(pool, cr)[source]

Bases : odoo.models.Model

name

Basic string field, can be length-limited, usually displayed as a single-line string in clients.

Paramètres:
  • size (int) – la taille maximum des valeurs stockées dans ce champ
  • translate – enable the translation of the field’s values; use translate=True to translate field values as a whole; translate may also be a callable such that translate(callback, value) translates value by using callback(term) to retrieve the translation of terms.
channel_id

La valeur d’un tel champ est un recordset de taille 0 (pas d’enregistrement) ou 1 (enregistrement unique).

Paramètres:
  • comodel_name – nom du modèle cible (chaîne de caractères)
  • domain – un domain optionnel à définir sur les valeurs candidates côté client (domain ou string)
  • context – un context optionnel à utiliser côté client à la prise en charge de ce champ (dictionnaire)
  • ondelete – quoi faire quand l’enregistrement en rapport est effacé ; les valeurs possibles sont : 'set null', 'restrict', 'cascade'
  • auto_join – si les JOINs sont générés lors de la recherche sur ce champ (booleen, par défaut False)
  • delegate – définir à True pour rendre les champs du modèle cible accessibles depuis le modèle en cours (correspond à _inherits)

The attribute comodel_name is mandatory except in the case of related fields or field extensions.

channel

Basic string field, can be length-limited, usually displayed as a single-line string in clients.

Paramètres:
  • size (int) – la taille maximum des valeurs stockées dans ce champ
  • translate – enable the translation of the field’s values; use translate=True to translate field values as a whole; translate may also be a callable such that translate(callback, value) translates value by using callback(term) to retrieve the translation of terms.