Skip to main content

asao-erp

Odoo Community from Python, through a verified command line. Read, group, page, print PDFs and browse the operation catalog, for notebooks, scripts and staff statistics.

from asao_erp import Client, ops, to_frame

erp = Client(profile="my-odoo")          # odoo-cli and its local profile
monthly = erp.group(ops.sales.quotation_list, by=["date_order:month"],
                    aggregate=["amount_total:sum"], filter=[["state", "=", "sale"]])
to_frame(monthly)

Odoo is a registered trademark of Odoo S.A. This project is not affiliated with or endorsed by Odoo S.A.

Install

pip install asao-erp            # or: pip install 'asao-erp[pandas]'

asao-erp holds no credential and never calls Odoo itself: every call goes through a command line, so the catalog's checks, readiness rules and refusals apply exactly as on the command line. Install the command line too, either of:

  • odoo-cli, for an Odoo you configure locally: Client(profile="my-odoo"). Set the profile up once with odoo-cli profile set; the credential stays in the environment or the OS keyring, never in your notebook.
  • The governed asao CLI, for an ASAO organization: Client(organization="...", connection="..."). Calls then act with the caller's ASAO login, within the permissions their role grants: reads, and, with a domain's write key, the verified writes. A high-risk one (posting, payments, rates) runs only after a colleague approves the exact request (asao aerp approval request, then approve); deletes and prints stay with odoo-cli.

Name a binary that is not on PATH with binary= or ASAO_ERP_CLI.

Use

Call Does
read(op, filter, limit, offset, order, id) One page of records of a read operation
iterate(op, filter, page) Every record, page by page
group(op, by, aggregate, filter) Groups computed by Odoo: "date_order:month", "amount_total:sum"; each group has count
print(op, id, to) A document's PDF (ops.finance.invoice_print)
operations(domain), describe(op) The catalog, and one operation's contract
execute(op, id, values) Any operation. A write runs only with Client(..., allow_writes=True)
to_frame(rows) A pandas DataFrame, with relations as names

ops lists every operation by domain, so the editor completes them (ops.finance.invoice_list). A failure raises ErpError with the command line's code, message and remediation.

What is verified, and what is not

The catalog's operations are verified on the stock Odoo Community image: 1267 on 19.0, and 1170 on 20.0, a candidate series that runs only with allow_unverified=True until it is supported. A public conformance run checks them again every week. Before each call, the command line checks the Odoo it reaches:

  • Is it Odoo, and which series?
  • Are the needed modules installed?
  • Is it customised where a write acts?

A write on a customised Odoo is held back (AERP_ENVIRONMENT_UNVERIFIED). It runs only with allow_unverified=True.

Customised Odoo is not guaranteed. On an Odoo changed beyond the stock image (Enterprise, third-party or in-house modules, Studio, automations, fields added by hand), operations cannot be verified, and nothing guarantees that they work as described or without error. What you accept there runs at your own risk.

Develop

python -m unittest discover -s tests     # a fake command line, no network

examples/vscode/ is a sample VS Code workspace with a statistics notebook.

This repository is exported from the ASAO monorepo (see SOURCE.md). Issues and pull requests are welcome. An accepted change is applied in the monorepo and arrives with the next export.

License

Apache License 2.0. See LICENSE and NOTICE.

Tiếng Việt

asao-erp cho phép làm việc với Odoo Community bằng Python: đọc, gộp nhóm, phân trang, in PDF và tra catalog. Thư viện hợp cho notebook và cho nhân viên làm thống kê. Mọi lệnh đi qua odoo-cli (profile cục bộ) hoặc asao (theo tổ chức ASAO). SDK không giữ mật khẩu.

ASAO chỉ kiểm chứng trên bản Odoo chuẩn. Với Odoo đã tuỳ biến, ASAO không bảo đảm thao tác chạy đúng; dùng allow_unverified=True trên Odoo đó là tự chịu rủi ro.

Metadata

Release files for asao-erp 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for asao-erp 0.1.0
File Size Uploaded Provenance
asao_erp-0.1.0.tar.gz 30.1 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for asao-erp 0.1.0
File Interpreter ABI Platform
asao_erp-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 56.4 kB

Release files / asao_erp-0.1.0.tar.gz

Download URL asao_erp-0.1.0.tar.gz
Size 30.1 kB
Tags Source
SHA-256 checksum
How to use checksums
d1beed7295b6d7b8e72f4a466034c72bd0f5374e0705f6abdfd913d555e1a0ab
BLAKE2b-256 checksum
How to use checksums
a880572584050af7cf788ec0d715936477b964e771fe79e19a07cd702acbb82e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / asao_erp-0.1.0-py3-none-any.whl

Download URL asao_erp-0.1.0-py3-none-any.whl
Size 26.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9215510a18d782c8b1ddd7e89c8e9c440d9a908bbccfaaaa58938e048e589291
BLAKE2b-256 checksum
How to use checksums
8c0cc72953679a63e236b9ab9ea23e93ff73e6ead6e28b3e174e6bfb6e481b4b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Security for asao-erp 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for asao_erp-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page