Da e verso odoo xml rpc, erppeek e python

41
DA E VERSO ODOO XML-RPC, ERPPEEK E PYTHON PyCon 2015 - Firenze - Apulia Software s.r.l.

Transcript of Da e verso odoo xml rpc, erppeek e python

Page 1: Da e verso odoo  xml rpc, erppeek e python

DA E VERSO ODOOXML-RPC, ERPPEEK E PYTHON

PyCon 2015 - Firenze - Apulia Software s.r.l.

Page 2: Da e verso odoo  xml rpc, erppeek e python

APULIA SOFTWARE

FRANCESCO "OPENCODE" APRUZZESE

ANDREA "4EVERAMD" GALLINA

Page 3: Da e verso odoo  xml rpc, erppeek e python

Breve (aka brevissima) introduzione su

COS'È ODOO?

Page 4: Da e verso odoo  xml rpc, erppeek e python

È UN GESTIONALE? NO!Un gestionale è come Steven Seagal:

1. Lento2. Abbastanza limitato3. Riesce a compiere il suo lavoro ma non si capisce come

Page 5: Da e verso odoo  xml rpc, erppeek e python

È UN ERP? NON PIÙ!Un ERP è come Jackie Chan:

1. Incanta2. Difficile da seguire3. A volte fa cose troppo spettacolari

Page 6: Da e verso odoo  xml rpc, erppeek e python

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

Page 7: Da e verso odoo  xml rpc, erppeek e python

COMUNICARE CON ODOO

NET-RPC

Page 8: Da e verso odoo  xml rpc, erppeek e python

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 9: Da e verso odoo  xml rpc, erppeek e python

COME FUNZIONA NET-RPC?Non funziona! Se vuoi usare qualcosa di antico ritorna alle

schede forate!

Page 10: Da e verso odoo  xml rpc, erppeek e python

COMUNICARE CON ODOO

XML-RPC

Page 11: Da e verso odoo  xml rpc, erppeek e python

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

Page 12: Da e verso odoo  xml rpc, erppeek e python

COME FUNZIONA XML-RPC?

Page 13: Da e verso odoo  xml rpc, erppeek e python

COME UTILIZZARE XML-RPCUN PO' DI CODE PORN

Page 14: Da e verso odoo  xml rpc, erppeek e python

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

Page 15: Da e verso odoo  xml rpc, erppeek e python

CREARE UN RECORD

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

new_id = sock.execute(dbname, uid, password, 'create', partner)

                        

Page 16: Da e verso odoo  xml rpc, erppeek e python

RICERCHE

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

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

Page 17: Da e verso odoo  xml rpc, erppeek e python

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

                        

Page 18: Da e verso odoo  xml rpc, erppeek e python

AGGIORNARE UN RECORD

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

                        

Page 19: Da e verso odoo  xml rpc, erppeek e python

CANCELLARE UN RECORD

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

                        

Page 20: Da e verso odoo  xml rpc, erppeek e python

COMUNICARE CON ODOO

JSON-RPC

Page 21: Da e verso odoo  xml rpc, erppeek e python

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

Page 22: Da e verso odoo  xml rpc, erppeek e python

COME UTILIZZARE JSON-RPCUN PO' DI CODE PORN

Page 23: Da e verso odoo  xml rpc, erppeek e python

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

Page 24: Da e verso odoo  xml rpc, erppeek e python

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 25: Da e verso odoo  xml rpc, erppeek e python

CHIAMATA FUNZIONE

args = {    'name' : 'Stefano Lavori',    'fiscalcode' : 'APPLED50G13E569P',    'create_uid': uid,}partner_id = invoke('res.partner', 'create', args)                        

Page 26: Da e verso odoo  xml rpc, erppeek e python

COMUNICARE CON ODOO

ERPPEEK

Page 27: Da e verso odoo  xml rpc, erppeek e python

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.

Page 28: Da e verso odoo  xml rpc, erppeek e python

COME UTILIZZARE ERPPEEK COME LIBRERIAUN PO' DI CODE PORN

Page 29: Da e verso odoo  xml rpc, erppeek e python

INIZIALIZZARE UNA CONNESSIONEimport erppeek

server = erppeek.Client(     'http://localhost:8069', db='demo',     user='admin', password='admin')

                        

Page 30: Da e verso odoo  xml rpc, erppeek e python

CREARE UN RECORD

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

partner = server.ResPartner.create(data)                        

Page 31: Da e verso odoo  xml rpc, erppeek e python

RICERCHE

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

partner_ids = ResPartner.search(args)                        

Page 32: Da e verso odoo  xml rpc, erppeek e python

LEGGERE DATI

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

# Browseserver.ResPartner.browse(partner_id).name                        

Page 33: Da e verso odoo  xml rpc, erppeek e python

AGGIORNARE UN RECORD

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

Page 34: Da e verso odoo  xml rpc, erppeek e python

CANCELLARE UN RECORD

server.ResPartner.unlink(partner_ids)                        

Page 35: Da e verso odoo  xml rpc, erppeek e python

COME UTILIZZARE ERPPEEK COME SOFTWAREUN PO' DI SHELL PORN

Page 36: Da e verso odoo  xml rpc, erppeek e python

--HELP

Page 37: Da e verso odoo  xml rpc, erppeek e python

LEGGERE DEI DATI!

~$ erppeek ­d demo ­m res.partner ­f name ­f lang 1

"name","lang""Your Company","en_US"                        

Page 38: Da e verso odoo  xml rpc, erppeek e python

RICERCHE & QUERY

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

Page 39: Da e verso odoo  xml rpc, erppeek e python

ACCESSO A MODELLI E METODI

~$ erppeek ­d auto_invoice ­u admin ­p admin

>>> users = model('res.users')>>> users.count()>>> users.browse(1)                        

Page 40: Da e verso odoo  xml rpc, erppeek e python

ERPPEEKDIMOSTRAZIONE PRATICA

Page 41: Da e verso odoo  xml rpc, erppeek e python

Q&A