Queue¶
Job¶
-
class
connector.queue.job.
Job
(func=None, model_name=None, args=None, kwargs=None, priority=None, eta=None, job_uuid=None, max_retries=None, description=None)[source]¶ Bases :
object
Un job est une tâche à exécuter.
-
uuid
¶ Id (UUID) du job.
-
worker_uuid
¶ Quand le job est placé dans la queue, UUID du worker.
-
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é.
-
func_name
¶ Nom de la fonction (sous la forme module.nom_fonction).
-
args
¶ Arguments transmis à la fonction pendant l’exécution.
-
kwargs
¶ Arguments nommés transmis à la fonction pendant l’exécution.
-
func_string
¶ Chaîne complète représentant la fonction à exécuter, càd module.fonction(args, kwargs)
-
description
¶ Description du job à destination des utilisateurs.
-
func
¶ La fonction Python elle-même.
-
model_name
¶ Modèle OpenERP 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).
-
user_id
¶ Id de l’utilisateur OpenERP qui a créé le job
-
eta
¶ Heure estimée de lancement (ETA) du job. Il ne sera pas exécuté avant cette date/heure.
-
canceled
¶ True si le job a été annulé.
-
description
-
eta
-
func
-
func_string
-
perform
(session)[source]¶ Exécute le job.
Le job est exécuté avec l’utilisateur qui l’a initié.
Paramètres: session (ConnectorSession) – session d’exécution du job
-
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.
-
uuid
Id du job, c’est un UUID
-
-
class
connector.queue.job.
OpenERPJobStorage
(session)[source]¶ Bases :
connector.queue.job.JobStorage
Stocke un job dans OpenERP
-
enqueue
(func, model_name=None, args=None, kwargs=None, priority=None, eta=None, max_retries=None, description=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.
-
-
connector.queue.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.
Ajoute un attribut
delay
sur la fonction décorée.Quand
delay
est appelée, la fonction est transformée en job et stockée dans le modèle OpenERP queue.job. Les arguments positionnels et nommés transmis àdelay
seront les arguments utilisés par la fonction décorée lorsqu’elle sera exécutée.retry_pattern
is a dict where keys are the count of retries and the values are the delay to postpone a job.La fonction
delay()
d’un job reçoit les arguments suivants :- session
ConnectorSession
en cours- model_name
- nom du modèle sur lequel le job a quelque chose à faire
- *args et **kargs
Arguments positionnels et nommés qui seront transmis à la fonction une fois que le job est exécuté. Ils doivent être « pickle-able ».
There are 5 special and reserved keyword arguments that you can use:
- priority : priorité du job, une valeur plus petite étant prioritaire.
10 par défaut.
- max_retries : nombre maximal d’essais avant d’abandonner et définir
l’état du job à échoué. Une valeur de 0 signifie un nombre infini d’essais. Par défaut la valeur est 5.
- eta : le job ne peut être exécuté qu’après cette datetime
(ou maintenant + timedelta si un timedelta ou un entier est fourni)
- description : a human description of the job,
destinée à différencier les instances de job (Par défaut func.__doc__ ou
“Function %s” % func.__name__)
Exemple :
@job def export_one_thing(session, model_name, one_thing): # work # export one_thing export_one_thing(session, 'a.model', the_thing_to_export) # => normal and synchronous function call export_one_thing.delay(session, 'a.model', the_thing_to_export) # => the job will be executed as soon as possible export_one_thing.delay(session, 'a.model', the_thing_to_export, priority=30, eta=60*60*5) # => 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(session, model_name, 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(session): # 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') retryable_example.delay(session)
Voir aussi :
related_action()
une action connexe peut être attachée à un job
Attache une action connexe à un job
Un action connexe apparaîtra comme un bouton dans la vue OpenERP. Le bouton exécutera l’action, habituellement une ouverture de formulaire de l’enregistrement lié au job.
L”
action
doit être un objet callable qui prends les argumentssession, job, **kwargs
Exemple d’utilisation :
def related_action_partner(session, job): model = job.args[0] partner_id = job.args[1] # eventually 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 @job @related_action(action=related_action_partner) def export_partner(session, model_name, partner_id): # ...
Les
kwargs
sont transmis à l’action :def related_action_product(session, job, extra_arg=1): assert extra_arg == 2 model = job.args[0] product_id = job.args[1] @job @related_action(action=related_action_product, extra_arg=2) def export_product(session, model_name, product_id): # ...
-
connector.queue.job.
whitelist_unpickle_global
(fn_or_class)[source]¶ Allow a function or class to be used in jobs
By default, the only types allowed to be used in job arguments are:
- the builtins: str/unicode, int/long, float, bool, tuple, list, dict, None
- the pre-registered: datetime.datetime datetime.timedelta
If you need to use an argument in a job which is not in this whitelist, you can add it by using:
whitelist_unpickle_global(fn_or_class_to_register)
Worker¶
-
class
connector.queue.worker.
Worker
(db_name, watcher_)[source]¶ Bases :
threading.Thread
Poste et récupère des jobs de la queue, les exécute
-
enqueue_job_uuid
(job_uuid)[source]¶ Met un job en queue :
Il sera exécuté par le worker aussi tôt que possible (en fonction de la priorité du job)
-
job_storage_class
¶
-
queue_class
¶ alias de
connector.queue.queue.JobsQueue
-
-
class
connector.queue.worker.
WorkerWatcher
[source]¶ Bases :
threading.Thread
Garde un œil sur les workers et signale leur changement d’état.
Un WorkerWatcher est partagé entre plusieurs bases de données, donc seule une instance est nécessaire pour vérifier l’état des workers pour chaque base de données.
-
static
available_db_names
()[source]¶ Renvoie les bases de données du serveur où le module connector est installé
Disponible signifie qu’elles peuvent être utilisées par un Worker.
Renvoie: Noms des bases de données Type renvoyé: list
-
static
Queue¶
Modèles¶
-
class
connector.queue.model.
JobChannel
(pool, cr)[source]¶ Bases :
openerp.models.Model
-
complete_name
¶ Champ chaîne de caractère basique, peut être limité en longeur, habituellement affiché comme ligne unique dans les clients
Paramètres:
-
job_function_ids
¶ One2many field; the value of such a field is the recordset of all the records in
comodel_name
such that the fieldinverse_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 incomodel_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
andinverse_name
are mandatory except in the case of related fields or field extensions.
-
name
¶ Champ chaîne de caractère basique, peut être limité en longeur, habituellement affiché comme ligne unique dans les clients
Paramètres:
-
name_get
() → [(id, name), ...][source]¶ Returns a textual representation for the records in
self
. By default this is the value of thedisplay_name
field.Renvoie: list of pairs (id, text_repr)
for each recordsType renvoyé: list(tuple)
-
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.
-
-
class
connector.queue.model.
JobFunction
(pool, cr)[source]¶ Bases :
openerp.models.Model
-
channel
¶ Champ chaîne de caractère basique, peut être limité en longeur, habituellement affiché comme ligne unique dans les clients
Paramètres:
-
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.
-
-
class
connector.queue.model.
QueueJob
(pool, cr)[source]¶ Bases :
openerp.models.Model
État du job et résultat
-
active
¶
-
autovacuum
(*args, **kwargs)[source]¶ Efface tous les jobs (actifs ou non) qui sont terminés depuis plus de
_removal_interval
jours.Appelé depuis une tâche planifiée (cron).
-
channel
¶ Champ chaîne de caractère basique, peut être limité en longeur, habituellement affiché comme ligne unique dans les clients
Paramètres:
-
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.
-
date_created
¶
-
date_done
¶
-
date_enqueued
¶
-
date_started
¶
-
eta
¶
-
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 – si la valeur de ce champ peut être traduite ou non
-
func
¶
-
func_name
¶ Champ chaîne de caractère basique, peut être limité en longeur, habituellement affiché comme ligne unique dans les clients
Paramètres:
-
func_string
¶ Champ chaîne de caractère basique, peut être limité en longeur, habituellement affiché comme ligne unique dans les clients
Paramètres:
-
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.
-
max_retries
¶
-
model_name
¶ Champ chaîne de caractère basique, peut être limité en longeur, habituellement affiché comme ligne unique dans les clients
Paramètres:
-
name
¶ Champ chaîne de caractère basique, peut être limité en longeur, habituellement affiché comme ligne unique dans les clients
Paramètres:
Ouvre l’action associée au job
-
priority
¶
-
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 – si la valeur de ce champ peut être traduite ou non
-
retry
¶
-
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.- selection – specifies the possible values for this field.
It is given as either a list of pairs (
-
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.
-
uuid
¶ Champ chaîne de caractère basique, peut être limité en longeur, habituellement affiché comme ligne unique dans les clients
Paramètres:
-
worker_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.
-
-
class
connector.queue.model.
QueueWorker
(pool, cr)[source]¶ Bases :
openerp.models.Model
Worker
-
assign_jobs
(*args, **kwargs)[source]¶ Affecte
n
jobs au worker du processus en coursn
estmax_jobs
ou illimité simax_jobs
est NoneParamètres: max_jobs (int) – nombre maximal de jobs à affecter à un worker
-
assign_then_enqueue
(*args, **kwargs)[source]¶ Affecte tous les jobs non encore affectés à un worker. Puis met en queue tous les jobs qui ont un worker mais qui ne sont pas dans la queue.
Chaque opération est atomique.
Avertissement
valide la transaction.
cr.commit()
est appelé, donc veuillez appeler cette méthode dans vos propres transactions, pas dans la transaction principale d’OpenERPParamètres: max_jobs (int) – nombre maximal de jobs à affecter à un worker
-
date_alive
¶
-
date_start
¶
-
enqueue_jobs
(*args, **kwargs)[source]¶ Met en queue tous les jobs affectés au worker du processus en cours
-
job_ids
¶ One2many field; the value of such a field is the recordset of all the records in
comodel_name
such that the fieldinverse_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 incomodel_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
andinverse_name
are mandatory except in the case of related fields or field extensions.
-
pid
¶ Champ chaîne de caractère basique, peut être limité en longeur, habituellement affiché comme ligne unique dans les clients
Paramètres:
-
uuid
¶ Champ chaîne de caractère basique, peut être limité en longeur, habituellement affiché comme ligne unique dans les clients
Paramètres:
-
worker_timeout
= 300¶
-
-
class
connector.queue.model.
RequeueJob
(pool, cr)[source]¶ Bases :
openerp.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
andcolumn2
are optional. If not given, names are automatically generated from model names, providedmodel_name
andcomodel_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)
-