Odoo Connector.
abstract per PyCon 2015franco.tampieri@abstract.it /
v 8.0.
Who am I?
Franco Tampieri
Professione:
Senior System Engineer
ERP Consultant
Cosa è Odoo Connector?
● Connette odoo a sistemi esterni.
● Permette la gestione e l’interscambio di
dati.
Cosa NON è Odoo Connector?
● Un Middleware, Odoo Connector è un
modulo di Odoo
● Non è un servizio che rimane in ascolto
di altri sistemi, ma comunica
direttamente con altri sistemi
NUOVE Classi:
● Backend
● Event
● Job / Jobs Queue
● Worker
● Checkpoint
● Binding
Cosa ci offre Odoo Connector?
Backend
Rappresenta il riferimento verso il sistema
esterno.
Il Backend è definito da un Nome e una
Versione.
Backend
Es:
magento = Backend('magento')
magento1700 = Backend(parent=magento, version='1.7')
magento2000 = Backend(parent=magento, version='2.0')
Event
Sono Hook in odoo dove è possibile
agganciare delle funzioni.
Gli eventi sono agganciati ad azioni come
on_record_create, on_record_write e
on_record_unlink.
Event
Es.
on_record_create = Event()
def fa_qualcosa(session, model_name, a, b):
print "Evento Attivato con i seguenti argomenti: %s,
%s" % (a, b)
# attivo su tutti i modelli
on_record_create.subscribe(fa_qualcosa)
Job / Jobs Queue
Rappresentano i processi di elaborazione dei dati.
Sono memorizzati in una coda (Jobs Queue) e vengono controllati dai
Worker.
I Jobs sono assegnati ad un Worker da un cron.
Se il Worker muore, i Jobs vengono congelati e possono essere riassegnati
ad un altro Worker.
Job / Jobs Queue
Es:
@job
def processa_qualche_cosa(session, model_name,
qualche_cosa):
# Processo
# Esportazione qualche_cosa
processa_qualche_cosa(session, 'a.model',
qualche_cosa_da_esportare)
# => Chiamata sincrona e normale esecuzione del processo
Job / Jobs Queue
Es:
processa_qualche_cosa.delay(session, 'a.model',
qualche_cosa_da_esportare)
# => Il processo sarà eseguito il prima possibile
processa_qualche_cosa.delay(session, 'a.model',
qualche_cosa_da_esportare, priority=30, eta=60*60*5)
# => Il processo sarà eseguito con priorità bassa e
ritardato di 5 ore da adesso
Worker
Rappresenta il processo incaricato
all’esecuzione dei jobs.
Ogni Worker ha un ulteriore
processo chiamato WorkerWatcher
che serve a verificare lo stato del
Worker stesso.
E’ possibile eseguire il worker
come processo singolo
(normalmente avviato allo start di
Odoo) ma anche in multiprocessing.
Multiprocessing Worker
Per eseguire il Worker in questa modalità è necessario lanciare
separatamente l’eseguibile openerp-connector-worker con l’opzione --
worker=n dove n indica il numero di processi che si vuole avviare.
Es:
PYTHONPATH=/path/to/server  connector/openerp-connector-
worker --config  /path/to/configfile --workers=2
Chekpoint
Rappresenta un record del connector.
checkpoint legato a un modello e un
record.
I Connettori possono utilizzare questa
funzionalità, per permettere all'utente
di esaminare determinati dati importati
che hanno generato determinate
eccezioni.
Chekpoint
Es.
from openerp.addons.connector.checkpoint import checkpoint
def add_checkpoint(session, model_name, record_id,
backend_id):
return checkpoint.add_checkpoint(session, model_name,
record_id,'nome.mio.backend', backend_id)
Binding
Rappresentano la relazione fra gli ID degli
oggetti Odoo e gli ID dei sistemi esterni.
Viene consigliato di utilizzare la relazione
_inherits fra il modello Odoo esistente il
nuovo modello con in campi
necessari per il sistema esterno.
Binding
https://www.odoo.com/documentation/8.0/reference/orm.html#inheritance-and-extension
Documentazione e Riferimenti
● Odoo
○ http://www.odoo.com
● Documentazione odoo
○ https://www.odoo.com/documentation/8.0/index.html
● Documentazione ufficiale Connettore
○ http://odoo-connector.com
● Repository Ufficiale
○ https://github.com/OCA/connector
● Repository base_import_async
○ https://github.com/OCA/connector-interfaces
Al Lavoro!
● Avviamo Odoo
● Installare Odoo Connettore
● Installare il modulo
base_import_async
● Analizzare base_import_async
● Avviamo i Worker in
multiprocessing
● Importiamo dei CSV di esempio
Franco Tampieri
franco.tampieri@abstract.it

Odoo connector PyCon 2015

  • 1.
    Odoo Connector. abstract perPyCon 2015franco.tampieri@abstract.it / v 8.0.
  • 2.
    Who am I? FrancoTampieri Professione: Senior System Engineer ERP Consultant
  • 3.
    Cosa è OdooConnector? ● Connette odoo a sistemi esterni. ● Permette la gestione e l’interscambio di dati.
  • 4.
    Cosa NON èOdoo Connector? ● Un Middleware, Odoo Connector è un modulo di Odoo ● Non è un servizio che rimane in ascolto di altri sistemi, ma comunica direttamente con altri sistemi
  • 5.
    NUOVE Classi: ● Backend ●Event ● Job / Jobs Queue ● Worker ● Checkpoint ● Binding Cosa ci offre Odoo Connector?
  • 6.
    Backend Rappresenta il riferimentoverso il sistema esterno. Il Backend è definito da un Nome e una Versione.
  • 7.
    Backend Es: magento = Backend('magento') magento1700= Backend(parent=magento, version='1.7') magento2000 = Backend(parent=magento, version='2.0')
  • 8.
    Event Sono Hook inodoo dove è possibile agganciare delle funzioni. Gli eventi sono agganciati ad azioni come on_record_create, on_record_write e on_record_unlink.
  • 9.
    Event Es. on_record_create = Event() deffa_qualcosa(session, model_name, a, b): print "Evento Attivato con i seguenti argomenti: %s, %s" % (a, b) # attivo su tutti i modelli on_record_create.subscribe(fa_qualcosa)
  • 10.
    Job / JobsQueue Rappresentano i processi di elaborazione dei dati. Sono memorizzati in una coda (Jobs Queue) e vengono controllati dai Worker. I Jobs sono assegnati ad un Worker da un cron. Se il Worker muore, i Jobs vengono congelati e possono essere riassegnati ad un altro Worker.
  • 11.
    Job / JobsQueue Es: @job def processa_qualche_cosa(session, model_name, qualche_cosa): # Processo # Esportazione qualche_cosa processa_qualche_cosa(session, 'a.model', qualche_cosa_da_esportare) # => Chiamata sincrona e normale esecuzione del processo
  • 12.
    Job / JobsQueue Es: processa_qualche_cosa.delay(session, 'a.model', qualche_cosa_da_esportare) # => Il processo sarà eseguito il prima possibile processa_qualche_cosa.delay(session, 'a.model', qualche_cosa_da_esportare, priority=30, eta=60*60*5) # => Il processo sarà eseguito con priorità bassa e ritardato di 5 ore da adesso
  • 13.
    Worker Rappresenta il processoincaricato all’esecuzione dei jobs. Ogni Worker ha un ulteriore processo chiamato WorkerWatcher che serve a verificare lo stato del Worker stesso. E’ possibile eseguire il worker come processo singolo (normalmente avviato allo start di Odoo) ma anche in multiprocessing.
  • 14.
    Multiprocessing Worker Per eseguireil Worker in questa modalità è necessario lanciare separatamente l’eseguibile openerp-connector-worker con l’opzione -- worker=n dove n indica il numero di processi che si vuole avviare. Es: PYTHONPATH=/path/to/server connector/openerp-connector- worker --config /path/to/configfile --workers=2
  • 15.
    Chekpoint Rappresenta un recorddel connector. checkpoint legato a un modello e un record. I Connettori possono utilizzare questa funzionalità, per permettere all'utente di esaminare determinati dati importati che hanno generato determinate eccezioni.
  • 16.
    Chekpoint Es. from openerp.addons.connector.checkpoint importcheckpoint def add_checkpoint(session, model_name, record_id, backend_id): return checkpoint.add_checkpoint(session, model_name, record_id,'nome.mio.backend', backend_id)
  • 17.
    Binding Rappresentano la relazionefra gli ID degli oggetti Odoo e gli ID dei sistemi esterni. Viene consigliato di utilizzare la relazione _inherits fra il modello Odoo esistente il nuovo modello con in campi necessari per il sistema esterno.
  • 18.
  • 19.
    Documentazione e Riferimenti ●Odoo ○ http://www.odoo.com ● Documentazione odoo ○ https://www.odoo.com/documentation/8.0/index.html ● Documentazione ufficiale Connettore ○ http://odoo-connector.com ● Repository Ufficiale ○ https://github.com/OCA/connector ● Repository base_import_async ○ https://github.com/OCA/connector-interfaces
  • 20.
    Al Lavoro! ● AvviamoOdoo ● Installare Odoo Connettore ● Installare il modulo base_import_async ● Analizzare base_import_async ● Avviamo i Worker in multiprocessing ● Importiamo dei CSV di esempio
  • 21.