Da e Verso Odoo - Pycon Sette 2016

42
1 Da e Verso Odoo Da e Verso Odoo XML-RPC, Erppeek e Python XML-RPC, Erppeek e Python PyCon Sette - 2016 - Firenze - Apulia Software s.r.l.

Transcript of Da e Verso Odoo - Pycon Sette 2016

Page 1: 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.

Page 2: Da e Verso Odoo - Pycon Sette 2016

2

Apulia SoftwareApulia Software

Francesco "OpenCode" ApruzzeseFrancesco "OpenCode" Apruzzese

Page 3: Da e Verso Odoo - Pycon Sette 2016

3 . 1

Bisogna conoscere Odoo?Bisogna conoscere Odoo?

Page 4: Da e Verso Odoo - Pycon Sette 2016

3 . 2

SÌ!SÌ!

Page 5: Da e Verso Odoo - Pycon Sette 2016

4

Tratto da una storia veraTratto da una storia vera

Page 6: Da e Verso Odoo - Pycon Sette 2016

5

Comunicare con OdooComunicare con Odoo

NET-RPCNET-RPC

Page 7: Da e Verso Odoo - Pycon Sette 2016

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

Page 8: Da e Verso Odoo - Pycon Sette 2016

7

Come funziona NET-RPC?Come funziona NET-RPC?Non funziona! Se vuoi usare qualcosa di antico ritorna alle schede

forate!

Page 9: Da e Verso Odoo - Pycon Sette 2016

8

Comunicare con OdooComunicare con Odoo

XML-RPCXML-RPC

Page 10: Da e Verso Odoo - Pycon Sette 2016

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

Page 11: Da e Verso Odoo - Pycon Sette 2016

10

Come funziona XML-RPC?Come funziona XML-RPC?

Page 12: Da e Verso Odoo - Pycon Sette 2016

11 . 1

Come utilizzare XML-RPCCome utilizzare XML-RPCUn po' di Code PornUn po' di Code Porn

Page 13: Da e Verso Odoo - Pycon Sette 2016

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')

Page 14: Da e Verso Odoo - Pycon Sette 2016

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)

Page 15: Da e Verso Odoo - Pycon Sette 2016

11 . 4

RicercheRicerche

args = [('city', 'ilike', 'Roma')]

ids = sock.execute(dbname, uid, password, 'res.partner','search', args)

Page 16: Da e Verso Odoo - Pycon Sette 2016

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}]

Page 17: Da e Verso Odoo - Pycon Sette 2016

11 . 6

Aggiornare un RecordAggiornare un Record

values = {'vat': 'ZZ1ZZZ'} # data to updateresult = sock.execute(dbname, uid, password, 'res.partner', 'write', ids, values)

Page 18: Da e Verso Odoo - Pycon Sette 2016

11 . 7

Cancellare un recordCancellare un record

result = sock.execute(dbname, uid, password, 'res.partner', 'unlink', ids)

Page 19: Da e Verso Odoo - Pycon Sette 2016

12

Comunicare con OdooComunicare con Odoo

JSON-RPCJSON-RPC

Page 20: Da e Verso Odoo - Pycon Sette 2016

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

Page 21: Da e Verso Odoo - Pycon Sette 2016

14 . 1

Come utilizzare JSON-RPCCome utilizzare JSON-RPCUn po' di Code PornUn po' di Code Porn

Page 22: Da e Verso Odoo - Pycon Sette 2016

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])

Page 23: Da e Verso Odoo - Pycon Sette 2016

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)

Page 24: Da e Verso Odoo - Pycon Sette 2016

14 . 4

Chiamata funzioneChiamata funzione

args = {'name' : 'Stefano Lavori','fiscalcode' : 'APPLED50G13E569P','create_uid': uid,

}partner_id = invoke('res.partner', 'create', args)

Page 25: Da e Verso Odoo - Pycon Sette 2016

15

Comunicare con OdooComunicare con Odoo

ERPPEEKERPPEEK

Page 26: Da e Verso Odoo - Pycon Sette 2016

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.

Page 27: Da e Verso Odoo - Pycon Sette 2016

17 . 1

Come utilizzare ERPPEEK come libreriaCome utilizzare ERPPEEK come libreriaUn po' di Code PornUn po' di Code Porn

Page 28: Da e Verso Odoo - Pycon Sette 2016

17 . 2

Inizializzare una connessioneInizializzare una connessioneimport erppeek

server = erppeek.Client('http://localhost:8069', db='demo',

user='admin', password='admin')

Page 29: Da e Verso Odoo - Pycon Sette 2016

17 . 3

Creare un RecordCreare un Record

data = {'name': 'Mario Rossi', 'street': 'Via Verdi, 15', 'city': 'Roma'}

partner = server.ResPartner.create(data)

Page 30: Da e Verso Odoo - Pycon Sette 2016

17 . 4

RicercheRicerche

args = [('city', 'ilike', 'Firenze'), ('customer', '=', True)]# orargs = ['city = Firenze', 'customer = True']

partner_ids = ResPartner.search(args)

Page 31: Da e Verso Odoo - Pycon Sette 2016

17 . 5

Leggere DatiLeggere Dati

# Readserver.ResPartner.read(partner_id)['name']

# Browseserver.ResPartner.browse(partner_id).name

Page 32: Da e Verso Odoo - Pycon Sette 2016

17 . 6

Aggiornare un RecordAggiornare un Record

partner = server.ResPartner.browse(partner_id)partner.name = 'Stefano Lavori'

Page 33: Da e Verso Odoo - Pycon Sette 2016

17 . 7

Cancellare un recordCancellare un record

server.ResPartner.unlink(partner_ids)

Page 34: Da e Verso Odoo - Pycon Sette 2016

18 . 1

Come utilizzare ERPPEEK come softwareCome utilizzare ERPPEEK come softwareUn po' di Shell PornUn po' di Shell Porn

Page 35: Da e Verso Odoo - Pycon Sette 2016

18 . 2

--help--help

Page 36: Da e Verso Odoo - Pycon Sette 2016

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"

Page 37: Da e Verso Odoo - Pycon Sette 2016

18 . 4

Ricerche & QueryRicerche & Query

~$ erppeek -d demo -m res.groups -f full_name 'id > 0'

Page 38: Da e Verso Odoo - Pycon Sette 2016

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)

Page 39: Da e Verso Odoo - Pycon Sette 2016

19 . 2

È tutto vero!È tutto vero!

Page 40: Da e Verso Odoo - Pycon Sette 2016

19 . 3

Page 41: Da e Verso Odoo - Pycon Sette 2016

19 . 4

Page 42: Da e Verso Odoo - Pycon Sette 2016

19 . 5

Q&AQ&A