Da e Verso Odoo - Pycon Sette 2016

Post on 22-Jan-2017

114 views 0 download

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