Una librería de Python completa para gestionar conexiones y operaciones con Odoo
Project description
Manager Odoo API
Una librería de Python completa y fácil de usar para gestionar conexiones y operaciones con Odoo a través de XML-RPC.
🚀 Características Principales
- Conexión sencilla: Conecta a cualquier instancia de Odoo con credenciales simples
- Operaciones CRUD completas: Create, Read, Update, Delete en cualquier modelo
- Soporte multi-compañía: Trabaja con múltiples compañías en la misma instancia
- Integración con pandas: Crea registros masivos desde DataFrames
- Upsert inteligente: Crea o actualiza registros basado en IDs externos
- Validación robusta: Manejo de errores y validación de datos
- Type hints: Código completamente tipado para mejor desarrollo
📦 Instalación
pip install managerodooapi
🔧 Uso Básico
Configuración inicial
from managerodooapi import OdooConnector, Credentials
# Configurar credenciales
creds = Credentials(
url="http://localhost:8069",
db="mi_base_de_datos",
username="admin",
password="admin"
)
# Crear conector (se conecta automáticamente)
odoo = OdooConnector(creds)
Operaciones básicas
# Buscar registros
partner_ids = odoo.search('res.partner', [('is_company', '=', True)], limit=10)
# Leer registros
partners = odoo.read('res.partner', domain=[('is_company', '=', True)],
fields=['name', 'email', 'phone'])
# Crear registro
new_partner_id = odoo.create('res.partner', {
'name': 'Nuevo Cliente',
'email': 'cliente@ejemplo.com',
'is_company': True
})
# Actualizar registros
odoo.update('res.partner', [new_partner_id], {'phone': '+1234567890'})
# Eliminar registros
odoo.delete('res.partner', [new_partner_id])
Operaciones avanzadas
import pandas as pd
# Crear registros desde DataFrame
df = pd.DataFrame({
'name': ['Cliente 1', 'Cliente 2', 'Cliente 3'],
'email': ['c1@ejemplo.com', 'c2@ejemplo.com', 'c3@ejemplo.com']
})
field_map = {
'name': 'name',
'email': 'email'
}
result = odoo.create_from_df('res.partner', df, field_map,
static_values={'is_company': True})
print(f"Creados {result['total_created']} registros")
# Upsert (crear o actualizar)
partner_id, was_created = odoo.upsert_by_external_id(
'res.partner', 'ref', 'CLI001',
{'name': 'Cliente Actualizado', 'email': 'nuevo@ejemplo.com'}
)
Soporte multi-compañía
# Trabajar con una compañía específica
company_id = 1
# Buscar solo en esa compañía
partners = odoo.read('res.partner', company_id=company_id)
# Crear registro en esa compañía
new_id = odoo.create('res.partner', {'name': 'Partner'}, company_id=company_id)
Operaciones específicas de Odoo
# Confirmar órdenes de venta
order_ids = [1, 2, 3]
odoo.confirm_sale_order(order_ids)
# Ejecutar cualquier método de Odoo
result = odoo.execute_kw(
odoo.creds.db, odoo.uid, odoo.creds.password,
'sale.order', 'action_confirm', [order_ids]
)
📚 Ejemplos Completos
Gestión de Productos
from managerodooapi import OdooConnector, Credentials
# Conectar
creds = Credentials("http://localhost:8069", "mi_db", "admin", "admin")
odoo = OdooConnector(creds)
# Crear categoría de producto
category_id = odoo.create('product.category', {'name': 'Electrónicos'})
# Crear productos
products_data = [
{
'name': 'Laptop Gaming',
'list_price': 1299.99,
'categ_id': category_id,
'type': 'product'
},
{
'name': 'Mouse Inalámbrico',
'list_price': 29.99,
'categ_id': category_id,
'type': 'product'
}
]
created_ids = odoo.create('product.product', products_data)
print(f"Productos creados: {created_ids}")
# Actualizar precios con descuento del 10%
for product_id in created_ids:
product_data = odoo.read('product.product',
domain=[('id', '=', product_id)],
fields=['list_price'])[0]
new_price = product_data['list_price'] * 0.9
odoo.update('product.product', [product_id], {'list_price': new_price})
Importación masiva desde Excel
import pandas as pd
# Leer archivo Excel
df = pd.read_excel('clientes.xlsx')
# Mapear columnas
field_map = {
'Nombre': 'name',
'Email': 'email',
'Teléfono': 'phone',
'Ciudad': 'city'
}
# Valores estáticos para todos los registros
static_values = {
'is_company': True,
'customer_rank': 1
}
# Importar en lotes
result = odoo.create_from_df('res.partner', df, field_map,
static_values=static_values, batch_size=100)
print(f"Procesados: {result['total_processed']}")
print(f"Creados: {result['total_created']}")
print(f"Errores: {len(result['errors'])}")
# Mostrar errores si los hay
for error in result['errors']:
print(f"Error: {error}")
🛠️ API Reference
OdooConnector
La clase principal para todas las operaciones con Odoo.
Métodos principales:
search(model, domain, limit, company_id): Buscar IDs de registrosread(model, fields, domain, limit, company_id): Leer datos de registroscreate(model, values, company_id): Crear uno o múltiples registrosupdate(model, ids, values, company_id): Actualizar registros existentesdelete(model, ids, company_id): Eliminar registroscreate_from_df(model, df, field_map, ...): Crear registros desde DataFrameupsert_by_external_id(...): Crear o actualizar por ID externoexecute_kw(...): Ejecutar cualquier método de Odoo
Credentials
Clase para almacenar credenciales de conexión.
@dataclass
class Credentials:
url: str # URL del servidor Odoo
db: str # Nombre de la base de datos
username: str # Usuario
password: str # Contraseña
🤝 Contribuir
Las contribuciones son bienvenidas. Por favor:
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
📄 Licencia
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
🐛 Reportar Issues
Si encuentras algún bug o tienes una sugerencia, por favor crea un issue en GitHub.
📞 Soporte
Para soporte técnico o preguntas, puedes:
- Crear un issue en GitHub
- Revisar la documentación
- Consultar los ejemplos incluidos
Desarrollado con ❤️ para la comunidad Odoo
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file managerodooapi-0.1.0.tar.gz.
File metadata
- Download URL: managerodooapi-0.1.0.tar.gz
- Upload date:
- Size: 12.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
22bdfc118d5f25dedd0e927d5359f49362557dbff373fe061c7119d2f4b45822
|
|
| MD5 |
ac8060883672090d77dee1b870b55711
|
|
| BLAKE2b-256 |
9c6b41dc29b9011b3a68132e03a68b665053e65e342967cfb28cb843e8a6474f
|
File details
Details for the file managerodooapi-0.1.0-py3-none-any.whl.
File metadata
- Download URL: managerodooapi-0.1.0-py3-none-any.whl
- Upload date:
- Size: 8.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c0deae3204657a8e44b7e0d2657b0fa919196923e25856b29999823f7adbde3c
|
|
| MD5 |
8d846da8d6826652e6997d9306986d6e
|
|
| BLAKE2b-256 |
990763599699f7ec97c58f5727a4a5d08dba64683504e544cffe6332fa30e138
|