Skip to main content

Simple RPC client for Odoo

Project description

Odoo Connect

A simple library to use Odoo RPC.

PyPI version

Usage

import odoo_connect
odoo = env = odoo_connect.connect(url='http://localhost:8069', username='admin', password='admin')
so = env['sale.order']
so.search_read([('create_uid', '=', 1)], [])

Rationale

OdooRPC or Odoo RPC Client are both more complete and mimic internal Odoo API. Then aio-odoorpc provides an asynchronous API.

This library provides only a simple API for connecting to the server and call methods, so the maintenance should be minimal.

Note that each RPC call is executed in a transaction. So the following code on the server, will add one to every line ordered quantity or fail and do nothing. However, RPC client libraries will perform multiple steps, on a failure, already executed code was committed. You can end with race conditions where some other code sets product_uom_qty to 0 before you increment it. A better way of doing this is to implement a function on Odoo side and call it.

lines = env['sale.order.line'].search([
	('order_id.name', '=', 'S00001')
])
# this is fine on the server, but not in RPC (multiple transactions)
for line in lines:
	if line.product_uom_qty > 1:
		line.product_uom_qty += 1
# single transaction
lines.increment_qty([('product_uom_qty', '>', 1)])

Export and import data

A separate package provides utilities to more easily extract data from Odoo. It also contains utility to get binary data (attachments) and reports; however this requires administrative permissions.

Since Odoo doesn't accept all kind of values, the format package will help with converting between python values and values returned by Odoo.

The provided function will return a table-like (list of lists) structure with the requested data. You can also pass ir.filters names or ir.exports names instead of, respectively, domains and fields. Note that this doesn't support groupping.

import odoo_connect.data as odoo_data
so = env['sale.order']

# Read data as usual
data = so.search_read_dict([('state', '=', 'sale')], ['name', 'partner_id.name'])
so.read_group([], ['amount_untaxed'], ['partner_id', 'create_date:month'])
odoo_data.add_url(so, data)

# Exporting flattened data
all_data = odoo_data.export_data(so, [('state', '=', 'sale')], ['name', 'partner_id.name'])
with io.StringIO(newline='') as f:
    w = csv.writer(f, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    w.writerows(all_data.to_csv())
all_data.to_pandas()  # as a data frame
all_data.to_dbapi(con, 'table_name')  # create a table

# Import data using Odoo's load() function
odoo_data.load_data(so, data)

# Import data using writes and creates (or another custom method)
for batch in odoo_data.make_batches(data):
	# add ids by querying the model using the 'name' field
	# if you remove 'id' from the data, only create() is called
	odoo_data.add_fields(so, batch, 'name', ['id'])
	odoo_data.load_data(so, batch, method='write')

Explore

Provides a simple abstraction for querying data with a local cache. It may be easier than executing and parsing a read(). Also, auto-completion for fields is provided in jupyter.

from odoo_connect.explore import explore
sale_order = explore(env['sale.order'])
sale_order = sale_order.search([], limit=1)
sale_order.read()

Development

You can use a vscode container and open this repository inside it. Alternatively, clone and setup the repository manually.

git clone $url
cd odoo-connect
# Install dev libraries
pip install -r requirements.txt
./pre-commit install
# Run some tests
pytest

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

odoo-connect-0.5.0.tar.gz (35.2 kB view details)

Uploaded Source

Built Distribution

odoo_connect-0.5.0-py3-none-any.whl (26.1 kB view details)

Uploaded Python 3

File details

Details for the file odoo-connect-0.5.0.tar.gz.

File metadata

  • Download URL: odoo-connect-0.5.0.tar.gz
  • Upload date:
  • Size: 35.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for odoo-connect-0.5.0.tar.gz
Algorithm Hash digest
SHA256 4547544849e56f83444734e2ee79f12c2678296cc94c0c3401069b43714f0dd2
MD5 0a7cd8ab9c1f9c9d966ce705266f8910
BLAKE2b-256 3f136ac469c50c5c2e03fbfecd8472e7f6c611d4c8a78c0b7d19c7cc149fb6d8

See more details on using hashes here.

File details

Details for the file odoo_connect-0.5.0-py3-none-any.whl.

File metadata

File hashes

Hashes for odoo_connect-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 11e80205ef89fa37a774f6c1d6c26b04d2128aa92aa095d17b9c5abbdeac9432
MD5 63ecc7db3781c89f53d49a0bf1fc2aaf
BLAKE2b-256 3e357fce2fee982c9ab65baaa3baccc7d9212efb86d67994850c04455c714d07

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page