Da e Verso Odoo - Pycon Sette 2016
Transcript of Da e Verso Odoo - Pycon Sette 2016
1
Da e Verso OdooDa e Verso OdooXML-RPC, Erppeek e PythonXML-RPC, Erppeek e Python
PyCon Sette - 2016 - Firenze - Apulia Software s.r.l.
2
Apulia SoftwareApulia Software
Francesco "OpenCode" ApruzzeseFrancesco "OpenCode" Apruzzese
3 . 1
Bisogna conoscere Odoo?Bisogna conoscere Odoo?
3 . 2
SÌ!SÌ!
4
Tratto da una storia veraTratto da una storia vera
5
Comunicare con OdooComunicare con Odoo
NET-RPCNET-RPC
6
Cosè 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
7
Come funziona NET-RPC?Come funziona NET-RPC?Non funziona! Se vuoi usare qualcosa di antico ritorna alle schede
forate!
8
Comunicare con OdooComunicare con Odoo
XML-RPCXML-RPC
9
Cosè XML-RPC?Cosè XML-RPC?XML: eXtensible Markup Language
RPC: Remote Procedure Call
XML-RPC è un protocollo di comunicazione cross platform chepermette di eseguire chiamate a procedure remote utilizzando lostandard XML come veicolo per il trasferimento dei dati attraverso
una connessione in rete
10
Come funziona XML-RPC?Come funziona XML-RPC?
11 . 1
Come utilizzare XML-RPCCome utilizzare XML-RPCUn po' di Code PornUn po' di Code Porn
11 . 2
Inizializzare una connessioneInizializzare 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')
11 . 3
Creare un RecordCreare un Record
partner = {'name': 'Mario Rossi','street': 'Via Verdi, 15','city': 'Roma'}
new_id = sock.execute(dbname, uid, password, 'create', partner)
11 . 4
RicercheRicerche
args = [('city', 'ilike', 'Roma')]
ids = sock.execute(dbname, uid, password, 'res.partner','search', args)
11 . 5
Leggere DatiLeggere 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}]
11 . 6
Aggiornare un RecordAggiornare un Record
values = {'vat': 'ZZ1ZZZ'} # data to updateresult = sock.execute(dbname, uid, password, 'res.partner', 'write', ids, values)
11 . 7
Cancellare un recordCancellare un record
result = sock.execute(dbname, uid, password, 'res.partner', 'unlink', ids)
12
Comunicare con OdooComunicare con Odoo
JSON-RPCJSON-RPC
13
Cosè JSON-RPC?Cosè JSON-RPC?JSON: JavaScript Object Notation
RPC: Remote Procedure Call
JSON-RPC, come l'XML-RPC, è un protocollo di comunicazionecross platform che permette di eseguire chiamate a procedure
remote utilizzando il formato JSON per i dati
14 . 1
Come utilizzare JSON-RPCCome utilizzare JSON-RPCUn po' di Code PornUn po' di Code Porn
14 . 2
Inizializzare una connessioneInizializzare 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])
14 . 3
Qualche aiuto...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)
14 . 4
Chiamata funzioneChiamata funzione
args = {'name' : 'Stefano Lavori','fiscalcode' : 'APPLED50G13E569P','create_uid': uid,
}partner_id = invoke('res.partner', 'create', args)
15
Comunicare con OdooComunicare con Odoo
ERPPEEKERPPEEK
16
Cosè ERPPEEK?Cosè ERPPEEK?ERPPEEK è una libreria Python, basata su XML-RPC, che permette,grazie ad un alto livello di astrazione, di gestire molto facilmente i
dati di una installazione di Odoo.
ERPPEEK, inoltre, può essere utilizzato come software autonomoda riga di comando per navigare tra gli oggetti di Odoo ed i loro
metodi.
17 . 1
Come utilizzare ERPPEEK come libreriaCome utilizzare ERPPEEK come libreriaUn po' di Code PornUn po' di Code Porn
17 . 2
Inizializzare una connessioneInizializzare una connessioneimport erppeek
server = erppeek.Client('http://localhost:8069', db='demo',
user='admin', password='admin')
17 . 3
Creare un RecordCreare un Record
data = {'name': 'Mario Rossi', 'street': 'Via Verdi, 15', 'city': 'Roma'}
partner = server.ResPartner.create(data)
17 . 4
RicercheRicerche
args = [('city', 'ilike', 'Firenze'), ('customer', '=', True)]# orargs = ['city = Firenze', 'customer = True']
partner_ids = ResPartner.search(args)
17 . 5
Leggere DatiLeggere Dati
# Readserver.ResPartner.read(partner_id)['name']
# Browseserver.ResPartner.browse(partner_id).name
17 . 6
Aggiornare un RecordAggiornare un Record
partner = server.ResPartner.browse(partner_id)partner.name = 'Stefano Lavori'
17 . 7
Cancellare un recordCancellare un record
server.ResPartner.unlink(partner_ids)
18 . 1
Come utilizzare ERPPEEK come softwareCome utilizzare ERPPEEK come softwareUn po' di Shell PornUn po' di Shell Porn
18 . 2
--help--help
18 . 3
Leggere dei dati!Leggere dei dati!
~$ erppeek -d demo -m res.partner -f name -f lang 1
"name","lang""Your Company","en_US"
18 . 4
Ricerche & QueryRicerche & Query
~$ erppeek -d demo -m res.groups -f full_name 'id > 0'
18 . 5
Accesso a Modelli e MetodiAccesso a Modelli e Metodi
~$ erppeek -d auto_invoice -u admin -p admin
>>> users = model('res.users')>>> users.count()>>> users.browse(1)
19 . 2
È tutto vero!È tutto vero!
19 . 3
19 . 4
19 . 5
Q&AQ&A