SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
1
Da e Verso OdooDa e Verso Odoo
XML-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 di
eseguire 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 che
permette di eseguire chiamate a procedure remote utilizzando lo
standard 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-RPC
Un po' di Code PornUn po' di Code Porn
11 . 2
Inizializzare una connessioneInizializzare una connessione
import xmlrpclib
username = 'admin' # the user
password = 'admin' # the password of the user
dbname = 'odoo' # the database
# Get the uid
sock_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 list
print data
[{'name': 'Mario Rossi', 'street': 'Roma', 'id': 51}]
11 . 6
Aggiornare un RecordAggiornare un Record
values = {'vat': 'ZZ1ZZZ'} # data to update
result = 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 comunicazione
cross platform che permette di eseguire chiamate a procedure
remote utilizzando il formato JSON per i dati
14 . 1
Come utilizzare JSON-RPCCome utilizzare JSON-RPC
Un po' di Code PornUn po' di Code Porn
14 . 2
Inizializzare una connessioneInizializzare una connessione
import jsonrpclib
# server proxy object
url = "http://localhost:8069/jsonrpc"
server = jsonrpclib.Server(url)
DB = 'odoo'
USER = 'admin'
PASS = 'admin'
# login
uid = server.call(service="common", method="login",
args=[DB, USER, PASS])
14 . 3
Qualche aiuto...Qualche aiuto...
# helper function for invoking model methods
def 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 autonomo
da riga di comando per navigare tra gli oggetti di Odoo ed i loro
metodi.
17 . 1
Come utilizzare ERPPEEK come libreriaCome utilizzare ERPPEEK come libreria
Un po' di Code PornUn po' di Code Porn
17 . 2
Inizializzare una connessioneInizializzare una connessione
import 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)]
# or
args = ['city = Firenze', 'customer = True']
partner_ids = ResPartner.search(args)
17 . 5
Leggere DatiLeggere Dati
# Read
server.ResPartner.read(partner_id)['name']
# Browse
server.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 software
Un 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

Mais conteúdo relacionado

Destaque

Destaque (7)

Frepple-Odoo integration - Odoo experience days 2016
Frepple-Odoo integration - Odoo experience days 2016Frepple-Odoo integration - Odoo experience days 2016
Frepple-Odoo integration - Odoo experience days 2016
 
Odoo the next generation erp
Odoo  the next generation erpOdoo  the next generation erp
Odoo the next generation erp
 
Odoo (OpenERP) Manufacturing Process
Odoo (OpenERP) Manufacturing ProcessOdoo (OpenERP) Manufacturing Process
Odoo (OpenERP) Manufacturing Process
 
Jornadas Odoo 2016 - ¿Qué esperar de una nueva implantación de un ERP (Odoo)?...
Jornadas Odoo 2016 - ¿Qué esperar de una nueva implantación de un ERP (Odoo)?...Jornadas Odoo 2016 - ¿Qué esperar de una nueva implantación de un ERP (Odoo)?...
Jornadas Odoo 2016 - ¿Qué esperar de una nueva implantación de un ERP (Odoo)?...
 
The Odoo Culture
The Odoo CultureThe Odoo Culture
The Odoo Culture
 
Jornadas Odoo 2016 - Cómo crear temas multi-website con Odoo v8 - Antonio Esp...
Jornadas Odoo 2016 - Cómo crear temas multi-website con Odoo v8 - Antonio Esp...Jornadas Odoo 2016 - Cómo crear temas multi-website con Odoo v8 - Antonio Esp...
Jornadas Odoo 2016 - Cómo crear temas multi-website con Odoo v8 - Antonio Esp...
 
Be a Team Leader, not a Manager!
Be a Team Leader, not a Manager!Be a Team Leader, not a Manager!
Be a Team Leader, not a Manager!
 

Semelhante a Da e Verso Odoo - Pycon Sette 2016

GTUG NFC Presentation
GTUG NFC PresentationGTUG NFC Presentation
GTUG NFC Presentation
Myti S.r.l.
 

Semelhante a Da e Verso Odoo - Pycon Sette 2016 (20)

Da e verso odoo xml rpc, erppeek e python
Da e verso odoo  xml rpc, erppeek e pythonDa e verso odoo  xml rpc, erppeek e python
Da e verso odoo xml rpc, erppeek e python
 
MongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDBMongoDB User Group Padova - Overviews iniziale su MongoDB
MongoDB User Group Padova - Overviews iniziale su MongoDB
 
Al telefono con Adhearsion e Ruby
Al telefono con Adhearsion e RubyAl telefono con Adhearsion e Ruby
Al telefono con Adhearsion e Ruby
 
Continous Delivery & HQ Code
Continous Delivery & HQ CodeContinous Delivery & HQ Code
Continous Delivery & HQ Code
 
Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web  dall'antichità all'avanguardia e ritornoSviluppo web  dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritorno
 
Come sviluppo le applicazioni web
Come sviluppo le applicazioni webCome sviluppo le applicazioni web
Come sviluppo le applicazioni web
 
Penetration Testing con Python - Network Sniffer
Penetration Testing con Python - Network SnifferPenetration Testing con Python - Network Sniffer
Penetration Testing con Python - Network Sniffer
 
Introduzione ai Big Data e alla scienza dei dati - Exploratory Data Analysis
Introduzione ai Big Data e alla scienza dei dati - Exploratory Data AnalysisIntroduzione ai Big Data e alla scienza dei dati - Exploratory Data Analysis
Introduzione ai Big Data e alla scienza dei dati - Exploratory Data Analysis
 
Programmazione web libera dai framework
Programmazione web libera dai frameworkProgrammazione web libera dai framework
Programmazione web libera dai framework
 
Deploy MongoDB su Infrastruttura Amazon Web Services
Deploy MongoDB su Infrastruttura Amazon Web ServicesDeploy MongoDB su Infrastruttura Amazon Web Services
Deploy MongoDB su Infrastruttura Amazon Web Services
 
#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)#dd12 Applicazioni a tre voci (Android e Domino)
#dd12 Applicazioni a tre voci (Android e Domino)
 
Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality Code
 
Devianze
DevianzeDevianze
Devianze
 
Camera Parser
Camera ParserCamera Parser
Camera Parser
 
Guida al Computer - Lezione 193 - Windows 10 - D.N.S.
Guida al Computer - Lezione 193 - Windows 10 - D.N.S.Guida al Computer - Lezione 193 - Windows 10 - D.N.S.
Guida al Computer - Lezione 193 - Windows 10 - D.N.S.
 
MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009
 
MongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework MeetingMongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework Meeting
 
Drupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e DrupalDrupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e Drupal
 
GTUG NFC Presentation
GTUG NFC PresentationGTUG NFC Presentation
GTUG NFC Presentation
 
node.js e Postgresql
node.js e Postgresqlnode.js e Postgresql
node.js e Postgresql
 

Da e Verso Odoo - Pycon Sette 2016

  • 1. 1 Da e Verso OdooDa e Verso Odoo XML-RPC, Erppeek e PythonXML-RPC, Erppeek e Python PyCon Sette - 2016 - Firenze - Apulia Software s.r.l.
  • 2. 2 Apulia SoftwareApulia Software Francesco "OpenCode" ApruzzeseFrancesco "OpenCode" Apruzzese
  • 3. 3 . 1 Bisogna conoscere Odoo?Bisogna conoscere Odoo?
  • 5. 4 Tratto da una storia veraTratto da una storia vera
  • 6. 5 Comunicare con OdooComunicare con Odoo NET-RPCNET-RPC
  • 7. 6 Cosè NET-RPC?Cosè NET-RPC? RPC: Remote Procedure Call NET-RPC è un protocollo di comunicazione che permette di eseguire chiamate a procedure remote utilizzando i socket ed il modulo Pickle per Python. DEPRECATO
  • 8. 7 Come funziona NET-RPC?Come funziona NET-RPC? Non funziona! Se vuoi usare qualcosa di antico ritorna alle schede forate!
  • 9. 8 Comunicare con OdooComunicare con Odoo XML-RPCXML-RPC
  • 10. 9 Cosè XML-RPC?Cosè XML-RPC? XML: eXtensible Markup Language RPC: Remote Procedure Call XML-RPC è un protocollo di comunicazione cross platform che permette di eseguire chiamate a procedure remote utilizzando lo standard XML come veicolo per il trasferimento dei dati attraverso una connessione in rete
  • 11. 10 Come funziona XML-RPC?Come funziona XML-RPC?
  • 12. 11 . 1 Come utilizzare XML-RPCCome utilizzare XML-RPC Un po' di Code PornUn po' di Code Porn
  • 13. 11 . 2 Inizializzare una connessioneInizializzare una connessione import xmlrpclib username = 'admin' # the user password = 'admin' # the password of the user dbname = 'odoo' # the database # Get the uid sock_common = xmlrpclib.ServerProxy( 'http://localhost:8069/xmlrpc/common') uid = sock_common.login(dbname, username, password) sock = xmlrpclib.ServerProxy( 'http://localhost:8069/xmlrpc/object')
  • 14. 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)
  • 15. 11 . 4 RicercheRicerche args = [('city', 'ilike', 'Roma')] ids = sock.execute(dbname, uid, password, 'res.partner', 'search', args)
  • 16. 11 . 5 Leggere DatiLeggere Dati fields = ['name', 'street'] data = sock.execute(dbname, uid, password, 'res.partner', 'read', ids, fields) # ids = id list print data [{'name': 'Mario Rossi', 'street': 'Roma', 'id': 51}]
  • 17. 11 . 6 Aggiornare un RecordAggiornare un Record values = {'vat': 'ZZ1ZZZ'} # data to update result = sock.execute(dbname, uid, password, 'res.partner', 'write', ids, values)
  • 18. 11 . 7 Cancellare un recordCancellare un record result = sock.execute(dbname, uid, password, 'res.partner', 'unlink', ids)
  • 19. 12 Comunicare con OdooComunicare con Odoo JSON-RPCJSON-RPC
  • 20. 13 Cosè JSON-RPC?Cosè JSON-RPC? JSON: JavaScript Object Notation RPC: Remote Procedure Call JSON-RPC, come l'XML-RPC, è un protocollo di comunicazione cross platform che permette di eseguire chiamate a procedure remote utilizzando il formato JSON per i dati
  • 21. 14 . 1 Come utilizzare JSON-RPCCome utilizzare JSON-RPC Un po' di Code PornUn po' di Code Porn
  • 22. 14 . 2 Inizializzare una connessioneInizializzare una connessione import jsonrpclib # server proxy object url = "http://localhost:8069/jsonrpc" server = jsonrpclib.Server(url) DB = 'odoo' USER = 'admin' PASS = 'admin' # login uid = server.call(service="common", method="login", args=[DB, USER, PASS])
  • 23. 14 . 3 Qualche aiuto...Qualche aiuto... # helper function for invoking model methods def invoke(model, method, *args): args = [DB, uid, PASS, model, method] + list(args) return server.call(service="object", method="execute", args=args)
  • 24. 14 . 4 Chiamata funzioneChiamata funzione args = { 'name' : 'Stefano Lavori', 'fiscalcode' : 'APPLED50G13E569P', 'create_uid': uid, } partner_id = invoke('res.partner', 'create', args)
  • 25. 15 Comunicare con OdooComunicare con Odoo ERPPEEKERPPEEK
  • 26. 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 autonomo da riga di comando per navigare tra gli oggetti di Odoo ed i loro metodi.
  • 27. 17 . 1 Come utilizzare ERPPEEK come libreriaCome utilizzare ERPPEEK come libreria Un po' di Code PornUn po' di Code Porn
  • 28. 17 . 2 Inizializzare una connessioneInizializzare una connessione import erppeek server = erppeek.Client( 'http://localhost:8069', db='demo', user='admin', password='admin')
  • 29. 17 . 3 Creare un RecordCreare un Record data = {'name': 'Mario Rossi', 'street': 'Via Verdi, 15', 'city': 'Roma'} partner = server.ResPartner.create(data)
  • 30. 17 . 4 RicercheRicerche args = [('city', 'ilike', 'Firenze'), ('customer', '=', True)] # or args = ['city = Firenze', 'customer = True'] partner_ids = ResPartner.search(args)
  • 31. 17 . 5 Leggere DatiLeggere Dati # Read server.ResPartner.read(partner_id)['name'] # Browse server.ResPartner.browse(partner_id).name
  • 32. 17 . 6 Aggiornare un RecordAggiornare un Record partner = server.ResPartner.browse(partner_id) partner.name = 'Stefano Lavori'
  • 33. 17 . 7 Cancellare un recordCancellare un record server.ResPartner.unlink(partner_ids)
  • 34. 18 . 1 Come utilizzare ERPPEEK come softwareCome utilizzare ERPPEEK come software Un po' di Shell PornUn po' di Shell Porn
  • 36. 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"
  • 37. 18 . 4 Ricerche & QueryRicerche & Query ~$ erppeek -d demo -m res.groups -f full_name 'id > 0'
  • 38. 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)
  • 39. 19 . 2 È tutto vero!È tutto vero!