Explorando Odoo a fondo: Cómo trabajar con la shell de la CLI y configurar IPython como REPL
Published: 2023-04-06 22:07:02

---
title: Explorando Odoo a fondo: Cómo trabajar con la shell de la CLI y configurar IPython como REPL
published: true
date: 2023-03-30 12:00:39 UTC
tags: 
canonical_url: https://blog.rafnixg.dev/explorando-odoo-a-fondo-como-trabajar-con-la-shell-de-la-cli-y-configurar-ipython-como-repl
---

Hola a todos! Hoy vamos a explorar un tema esencial para todos los programadores de Odoo que deseen profundizar en el desarrollo y uso del ORM de Odoo: la shell de la CLI de Odoo. La CLI (Command Line Interface) de Odoo es la forma en que se ejecuta Odoo en la mayora de los casos, ya sea en modo de desarrollo o en produccin. Conocer cmo funciona la CLI y cmo usarla de manera efectiva nos permitir aprovechar al mximo las herramientas y funciones de Odoo y mejorar la eficiencia de nuestro trabajo.

En este post, te guiar a travs de cmo acceder a la shell de Odoo y cmo configurarla para trabajar con IPython.

## **Cmo ejecutar una shell usando la CLI de Odoo**

Para acceder a la shell de Odoo, primero debemos asegurarnos de que Odoo est instalado en nuestro sistema. Si an no lo has hecho, te recomiendo seguir los pasos de instalacin de Odoo para tu sistema operativo o [Creando un entorno de desarrollo para Odoo 14.0 con VSCode](https://dev.to/rafnixg/creando-un-entorno-de-desarrollo-para-odoo-140-con-vscode-en-ubuntu-2204-1fa). Una vez instalado, sigue estos pasos para acceder a la shell de Odoo:

1. Abre la lnea de comandos o terminal.

2. Navega hasta el directorio de instalacin de Odoo. Normalmente, esto se encuentra en "/usr/lib/odoo" o "/opt/odoo".

3. Ejecuta el siguiente comando si tienes una instalacion desde codigo fuente:

```
./odoo-bin shell -c /path/to/odoo.conf --xmlrpc-port 8888 --longpolling-port 8899

```

Si es desde una instalcion usando los paquetes del sistema operativo

```
odoo shell -c /path/to/odoo.conf --xmlrpc-port 8888 --longpolling-port 8899

```

- `-c /path/to/odoo.conf`: especifica la ruta al archivo de configuracin de Odoo que deseas utilizar.

- `--xmlrpc-port 8888`: establece el puerto XML-RPC que utiliza Odoo para comunicarse con otras aplicaciones.

- `--longpolling-port 8899`: establece el puerto de long polling que utiliza Odoo para notificaciones en tiempo real.

Cambiamos los puertos para que no choque con los puertos de nuestra instancia de Odoo que se esta ejecutando.

Si todo funciona correctamente, deberas ver la siguiente lnea en la terminal:

```
env: <odoo.api.Environment object at 0x7efc89670ef0>
odoo: <module 'odoo' from '/usr/lib/python3/dist-packages/odoo/ __init__.py'>
openerp: <module 'odoo' from '/usr/lib/python3/dist-packages/odoo/ __init__.py'>
self: res.users(1,)
Python 3.x.x (default, MMM DD YYYY, HH:MM:SS)

```

Ahora ests en la shell de Odoo. Puedes empezar a ejecutar comandos de Odoo y explorar la plataforma ERP. Por ejemplo, puedes ejecutar el siguiente comando para el usuario que se ejecuta en esta shell Odoo:

```
print(self.name)

```

Tambin puedes interactuar con la base de datos de Odoo utilizando la sintaxis de ORM de Odoo. Por ejemplo, el siguiente comando cuenta todos los modelos de datos que tiene esta instancia de Odoo:

```
print(env['ir.model'].search_count([]))

```

## **Cmo configurar la interfaz de la shell para usar IPython como REPL**

IPython es un shell interactivo de Python que proporciona funciones avanzadas como autocompletado, resaltado de sintaxis, historial de comandos y ms. Utilizar IPython como REPL (Read-Eval-Print Loop) en lugar del shell estndar de Python puede mejorar nuestra experiencia de programacin en Odoo.

Para configurar la shell de Odoo para usar IPython como REPL, sigue estos pasos:

1. Instala IPython en tu sistema. En la mayora de los sistemas operativos, puedes instalarlo ejecutando el siguiente comando:

```
pip install ipython

```

1. Ahora que IPython est instalado, debes modificar el comando que usamos anteriormente para acceder a la shell de Odoo, incluyendo la opcin `--shell-interface ipython`. El comando modificado se ver as:

```
# Desde codigo fuente
./odoo-bin shell -c /path/to/odoo.conf --xmlrpc-port 8888 --longpolling-port 8899 --shell-interface ipython


# Binario instalado
odoo shell -c /path/to/odoo.conf --xmlrpc-port 8888 --longpolling-port 8899 --shell-interface ipython

```

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1680142682619/4e5967a9-664c-4b2e-a86c-d2d044b443f4.png)

Al ejecutar este comando, acceders a la shell de Odoo con IPython como REPL,como vemos en la imagen, lo que te permitir aprovechar sus funciones avanzadas mientras trabajas con Odoo, para salir del modo shell con IPython debes usar `ctrl+D`

## **Recomendaciones para el uso de la shell de Odoo**

### **Configuracin separada para la shell de Odoo**

Es altamente recomendable tener un archivo de configuracin separado para la shell de Odoo. Esto nos permite ajustar los parmetros especficos para la shell sin afectar la configuracin de nuestra instancia de Odoo en produccin o desarrollo. Algunos de los parmetros que podras considerar ajustar en este archivo de configuracin separado incluyen:

- `--xmlrpc-port 8888`: Establecer un puerto XML-RPC diferente para evitar conflictos con la instancia principal de Odoo.

- `--longpolling-port 8899`: Establecer un puerto de Long Polling diferente para evitar conflictos con la instancia principal de Odoo.

- Cambiar los valores de lmite de memoria (soft y hard memory limit) para asignar ms o menos recursos a la shell.

- Ajustar el nmero de workers para adaptarlo a tus necesidades especficas.

Para crear un archivo de configuracin separado, simplemente copia tu archivo de configuracin principal y modifica los parmetros mencionados anteriormente. Luego, al ejecutar la shell de Odoo, usa la opcin `-c` para especificar la ruta a este nuevo archivo de configuracin. Por ejemplo:

```
./odoo-bin shell -c /path/to/shell-odoo.conf --shell-interface ipython


odoo- shell -c /path/to/shell-odoo.conf --shell-interface ipython

```

### **Uso de libreras externas**

Al trabajar con la shell de Odoo, no ests limitado a utilizar solo las funcionalidades integradas en Odoo. Puedes aprovechar tambin las ventajas de libreras externas de Python para mejorar tu productividad y facilitar el anlisis y procesamiento de datos. Una de estas libreras es Pandas, una herramienta popular y potente para el anlisis y manipulacin de datos en Python.

Puedes importar Pandas en la shell de Odoo e interactuar con los datos utilizando sus estructuras de datos como DataFrames y Series. Por ejemplo, puedes convertir los registros de un modelo de Odoo en un DataFrame de Pandas y luego realizar anlisis y manipulacin de datos avanzados. Esto puede ser especialmente til cuando necesitas generar informes o analizar datos de forma rpida y eficiente.

Recuerda que al usar libreras externas como Pandas, es importante garantizar que estn correctamente instaladas y configuradas en tu entorno de desarrollo y, si es necesario, en el entorno de produccin.

## **Conclusin**

En resumen, la shell de la CLI de Odoo es una herramienta muy til para los desarrolladores de Odoo que desean profundizar en la programacin del ERP. A travs de la CLI, podemos interactuar con Odoo de una manera ms avanzada y personalizada. Adems, al configurar la interfaz de la shell para usar IPython como REPL, podemos aprovechar las funciones avanzadas de IPython y mejorar nuestra experiencia de programacin en Odoo.

Espero que este post te haya sido til y te haya brindado una mejor comprensin de cmo trabajar con la shell de Odoo y configurarla con IPython. Si te ha gustado este post y crees que puede ser til para otros desarrolladores de Odoo, no dudes en compartirlo en tus redes sociales. Nos vemos en un proximo post donde profundizaremos en el uso de la shell de Odoo.

Si quieren saber mas sobre IPython y la CLI de Odoo, aca les dejo los enlaces a su documentacin.

- [Documentacin Oficial de IPython](https://ipython.readthedocs.io/en/stable/)

- [Documentacin Oficial de Odoo CLI](https://www.odoo.com/documentation/master/developer/reference/cli.html)