da e verso odoo xml rpc, erppeek e python
TRANSCRIPT
DA E VERSO ODOOXML-RPC, ERPPEEK E PYTHON
PyCon 2015 - Firenze - Apulia Software s.r.l.
APULIA SOFTWARE
FRANCESCO "OPENCODE" APRUZZESE
ANDREA "4EVERAMD" GALLINA
Breve (aka brevissima) introduzione su
COS'È ODOO?
È UN GESTIONALE? NO!Un gestionale è come Steven Seagal:
1. Lento2. Abbastanza limitato3. Riesce a compiere il suo lavoro ma non si capisce come
È UN ERP? NON PIÙ!Un ERP è come Jackie Chan:
1. Incanta2. Difficile da seguire3. A volte fa cose troppo spettacolari
COS'È ALLORA ODOO? MOLTO DIPIÙ!
Odoo è come MacGyver:
1. È abbastanza flessibile per fare tutto2. Dispone di tutti gli strumenti per giungere a destinazione3. Scegli la strada che preferisci
COMUNICARE CON ODOO
NET-RPC
COSÈ NET-RPC?RPC: Remote Procedure Call
NET-RPC è un protocollo di comunicazione che permette dieseguire chiamate a procedure remote utilizzando i socket
ed il modulo Pickle per Python.
DEPRECATO
COME FUNZIONA NET-RPC?Non funziona! Se vuoi usare qualcosa di antico ritorna alle
schede forate!
COMUNICARE CON ODOO
XML-RPC
COSÈ XML-RPC?XML: eXtensible Markup Language
RPC: Remote Procedure Call
XML-RPC è un protocollo di comunicazione cross platformche permette di eseguire chiamate a procedure remote
utilizzando lo standard XML come veicolo per iltrasferimento dei dati attraverso una connessione in rete
COME FUNZIONA XML-RPC?
COME UTILIZZARE XML-RPCUN PO' DI CODE PORN
INIZIALIZZARE UNA CONNESSIONE
import xmlrpclib
username = 'admin' #the userpassword = 'admin' #the password of the userdbname = 'odoo' #the database
# Get the uidsock_common = xmlrpclib.ServerProxy( 'http://localhost:8069/xmlrpc/common')
uid = sock_common.login(dbname, username, password)
sock = xmlrpclib.ServerProxy( 'http://localhost:8069/xmlrpc/object')
CREARE UN RECORD
partner = {'name': 'Mario Rossi', 'street': 'Via Verdi, 15', 'city': 'Roma'}
new_id = sock.execute(dbname, uid, password, 'create', partner)
RICERCHE
args = [('city', 'ilike', 'Roma')]
ids = sock.execute(dbname, uid, password, 'res.partner', 'search', args)
LEGGERE DATI
fields = ['name', 'street']data = sock.execute(dbname, uid, password, 'res.partner', 'read', ids, fields)# ids = id listprint data[{'name': 'Mario Rossi', 'street: 'Roma', 'id': 51}]
AGGIORNARE UN RECORD
values = {'vat': 'ZZ1ZZZ'} #data to updateresult = sock.execute(dbname, uid, password, 'res.partner', 'write', ids, values)
CANCELLARE UN RECORD
result = sock.execute(dbname, uid, password, 'res.partner', 'unlink', ids)
COMUNICARE CON ODOO
JSON-RPC
COSÈ JSON-RPC?JSON: JavaScript Object Notation
RPC: Remote Procedure Call
JSON-RPC, come l'XML-RPC, è un protocollo dicomunicazione cross platform che permette di eseguire
chiamate a procedure remote utilizzando il formato JSONper i dati
COME UTILIZZARE JSON-RPCUN PO' DI CODE PORN
INIZIALIZZARE UNA CONNESSIONEimport jsonrpclib
# server proxy objecturl = "http://localhost:8069/jsonrpc"server = jsonrpclib.Server(url)
DB = 'odoo'USER = 'admin'PASS = 'admin'
# loginuid = server.call(service="common", method="login", args=[DB, USER, PASS])
QUALCHE AIUTO...
# helper function for invoking model methodsdef invoke(model, method, *args): args = [DB, uid, PASS, model, method] + list(args) return server.call(service="object", method="execute", args=args)
CHIAMATA FUNZIONE
args = { 'name' : 'Stefano Lavori', 'fiscalcode' : 'APPLED50G13E569P', 'create_uid': uid,}partner_id = invoke('res.partner', 'create', args)
COMUNICARE CON ODOO
ERPPEEK
COSÈ ERPPEEK?ERPPEEK è una libreria Python, basata su XML-RPC, che
permette, grazie ad un alto livello di astrazione, di gestiremolto facilmente i dati di una installazione di Odoo.
ERPPEEK, inoltre, può essere utilizzato come softwareautonomo da riga di comando per navigare tra gli oggetti di
Odoo ed i loro metodi.
COME UTILIZZARE ERPPEEK COME LIBRERIAUN PO' DI CODE PORN
INIZIALIZZARE UNA CONNESSIONEimport erppeek
server = erppeek.Client( 'http://localhost:8069', db='demo', user='admin', password='admin')
CREARE UN RECORD
data = {'name': 'Mario Rossi', 'street': 'Via Verdi, 15', 'city': 'Roma'}
partner = server.ResPartner.create(data)
RICERCHE
args = [('city', 'ilike', 'Firenze'), ('customer', '=', True)]# orargs = ['city = Firenze', 'customer = True']
partner_ids = ResPartner.search(args)
LEGGERE DATI
# Readserver.ResPartner.read(partner_id)['name']
# Browseserver.ResPartner.browse(partner_id).name
AGGIORNARE UN RECORD
partner = server.ResPartner.browse(partner_id)partner.name = 'Stefano Lavori'
CANCELLARE UN RECORD
server.ResPartner.unlink(partner_ids)
COME UTILIZZARE ERPPEEK COME SOFTWAREUN PO' DI SHELL PORN
--HELP
LEGGERE DEI DATI!
~$ erppeek d demo m res.partner f name f lang 1
"name","lang""Your Company","en_US"
RICERCHE & QUERY
~$ erppeek d demo m res.groups f full_name 'id > 0'
ACCESSO A MODELLI E METODI
~$ erppeek d auto_invoice u admin p admin
>>> users = model('res.users')>>> users.count()>>> users.browse(1)
ERPPEEKDIMOSTRAZIONE PRATICA
Q&A