Da e verso odoo xml rpc, erppeek e python

Post on 16-Jul-2015

137 views 2 download

Transcript of 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.

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