Programacion Interactiva

Descubre una Nueva y Poderosa Herramienta.

FrameWork de Nueva Generacion

Acceso a tu Informacion desde cualquier Dispositivo con Navegador.

Enfoque en el Backend

Frontend de forma facil con Odoo y XML.

Creacion de Verticales

Creacion de nuevas Verticales Conquistando nuevos Mercados.

Tu marca aqui mismo

Llega a miles de personas.

Publicidad

Mostrando las entradas con la etiqueta python3. Mostrar todas las entradas
Mostrando las entradas con la etiqueta python3. Mostrar todas las entradas

martes, 4 de agosto de 2020

Demonio - Servicio para Odoo13 Ubuntu 17.x Ubuntu 18.x Ubuntu 20.x

Servicio Systemctl en Ubuntu para nuestra instalación de Odoo
FƔcil y RƔpido


Creamos el servicio en la ruta: /usr/lib/systemd/system

Usamos el comando nano /usr/lib/systemd/system/odoo-server.service y pegamos la instrucción en mi caso mi Odoo esta en el directorio /odoo13


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[Unit]

Description=Servicio Arranque Odoo13

After=network.target

[Service]

Type=simple

Restart=always

RestartSec=1

User=odoo

ExecStart=/usr/bin/python3 /odoo13/odoo-bin -c /odoo13/odoo-server.conf



[Install]

WantedBy=multi-user.target

Reiniciamos los para ctualziar los nuevos servicios disponibles:

systemctl daemon-reload

Iniciamos como prueba nuestro servicio:

systemctl start odoo-server

Habilitamos con el servicio para iniciar con el Sistema Operativo:

systemctl enable odoo-server


NOTAS:
El directorio de Python es obligatorio, se tiene que escribir la ruta completa del binario de python ya sea que este en la ruta por defecto o que lo hayamos compilado manualmente.

miƩrcoles, 8 de julio de 2020

Numero a Letra Correspondiente (Excel) - Función Python

Función para transformar un indice a su letra correspondiente
(Similar a las columnas en Excel)



El siguiente método me resulto muy útil al momento de realizar un reporte en Excel con columnas dinÔmicas, por medio de un indice que podia incrementar el no. de columnas a insertar, con ello logre tener un reporte muy dinamico, mi problema era conocer que letra le correspondía al indice, ya que desconocía el no. de columnas finales.

Mi problema lo solucione con el siguiente metodo:


1
2
3
4
5
6
7
8
def indice_to_column_string(n):
    string = ""
    while n > 0:
        n, remainder = divmod(n - 1, 26)
        string = chr(65 + remainder) + string
    return string

print(indice_to_column_string(28))


La variable que recibe mi metodo es el indice del cual quisiera saber la columna correspondiente.


miƩrcoles, 3 de junio de 2020

Nginx SSL - ERR_SSL_PROTOCOL_ERROR - No se puede conectar por SSL (Solución)

Solución al error con Nginx ERR_SSL_PROTOCOL_ERROR




139857146823744:error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error:../ssl/record/rec_layer_s3.c:1528:SSL alert number 80


El error esta en la configuración de nuestro sitio nginx, para ser exactos en el apartado de configuración ssl debemos modificar y de ser necesario cambiar o reemplazar los sig. parÔmetros:


    ssl_prefer_server_ciphers on;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;


TEST de CONEXION SSL



openssl s_client -connect jlbelleza.es:443 -servername midominio.mx


El parƔmetro midominio.mx es el sitio al cual se estƔn conectando e implementando el certificado SSL.

Implementando STP con Python

Como utilizar SFTP desde Python


El fragmento para poder copiar un archivo a un servidor sftp es el siguiente:
import paramiko
import os

paramiko.util.log_to_file('logfile.log')

host = "101.102.103.104"
port = 22
transport = paramiko.Transport((host, port))
password = "pass"
username = "user"
transport.connect(username = username, password = password)


sftp = paramiko.SFTPClient.from_transport(transport)

filepath = '~/remote/file'
localpath = '~/local/file'
sftp.get(filepath, localpath)

sftp.close()
transport.close()

Espero que les sea de utilizad.

Solucion al error con la libreria sassc: error: no such option: --stdin ()

Solución al error con la libreria sassc
error: no such option: --stdin




Solución al Error:
sassc: error: no such option: --stdin

Line 13 in 3c11cf9
libsass==0.12.3

Como verÔn la solución es la versión de la librería.

jueves, 21 de mayo de 2020

Solución al error con Nginx ssl_error_bad_cert_domain

Solución al Error ssl_error_bad_cert_domain


Si tenemos un error al configurar nuestro dominio nginx con letsencrypt se debe a que el certificado ssl requiere expandir a ambas url, para ello ejecutamos el comando:

 letsencrypt certonly --standalone -d midominio.mx -d www.midominio.mx


La configuración de nginx quedaria (midominio.mx) --> /etc/nginx/sites-enabled:

upstream oddo {
    server 127.0.0.1:8069;
}

server {
    listen      443 default;
    server_name midominio.mx www.midominio.mx;

    access_log  /var/log/nginx/oddo.access.log;
    error_log   /var/log/nginx/oddo.error.log;

    ssl on;
    ssl_certificate /etc/letsencrypt/live/midominio.mx/cert.pem;
    ssl_certificate_key /etc/letsencrypt/live/midominio.mx/privkey.pem;
    keepalive_timeout   60;

    #ssl_ciphers             HIGH:!ADH:!MD5;
    #ssl_protocols           SSLv3 TLSv1;
    ssl_prefer_server_ciphers on;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    proxy_buffers 16 64k;
    proxy_buffer_size 128k;

    location / {
        proxy_pass  http://oddo;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_redirect off;

        proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header    X-Forwarded-Proto https;
        proxy_read_timeout 300000;

    }

    location ~* /web/static/ {
        proxy_cache_valid 200 60m;
        proxy_buffering on;
        expires 864000;
        proxy_pass http://oddo;
    }
}

server {
    listen      80;
    server_name midominio.mx www.midominio.mx;

    add_header Strict-Transport-Security max-age=2592000;
    rewrite ^/.*$ https://$host$request_uri? permanent;
}

jueves, 4 de octubre de 2018

Instsalación Odoo 12 en Linux

Instalación Odoo 12 en Linux, Ubuntu Server y Desktop 16.x , Ubuntu 17.x y Ubuntu 18.x


PASOS PARA LA INSTALACIƓN: 


Antes que nada necesitamos instalar las dependencias que utiliza Odoo (una dependencia es una aplicación o una biblioteca requerida por otro programa para poder funcionar correctamente. Por ello se dice que dicho programa depende de tal aplicación o biblioteca).
Antes de instalar las dependencias, necesitamos una actualizacion de los repositorios:
sudo apt-get update && sudo apt-get upgrade
Creamos un directorio en la ruta /opt llamada Odoo:
cd /opt
Despues:
sudo mkdir odoo
Cambiamos los permisos de la carpeta odoo al usuario que usara esta ruta (german es el usuario del sistema):
sudo chown german.german * -R odoo
Descargamos Odoo desde el Repositorio Oficial:
sudo git clone https://www.github.com/odoo/odoo --depth 1 --branch 12.0 --single-branch .
Instalamos las dependencias de la aplicación:
sudo pip install -r /opt/odoo/doc/requirements.txt
sudo pip install -r /opt/odoo/requirements.txt

Creamos nuestro Usuario Postgres


Entramos al prompt de postgres:
sudo su postgres
Creamos el Usuario:
createuser -s -P -e odoo
Tecleamos la contraseña (odoo) 2 veces. Ahora para evitar algún error modificamos el template principal de postgres (template1)
psql template1
Y una vez dentro del template:
alter role odoo with password 'odoo';
Para salir del prompt de postgres solo ejecutamos:

psql \q

Instalación Dependencias Externas


sudo apt-get install nodejs -y
sudo apt-get install npm -y
apt-get install node-less
sudo npm install -g less
sudo npm install -g less-plugin-clean-css
sudo ln -s /usr/local/bin/lessc /usr/bin/lessc
sudo ln -s /usr/bin/nodejs /usr/bin/node
sudo apt-get install sassc

Iniciamos nuestro Servidor de Odoo 12


Creamos nuestro archivo de configuracion de Odoo, para ello vamos al directorio de instalación (/opt/odoo/) y ejecutamos:
python odoo-bin -c odoo.conf -s
Lo que estamos haciendo es crear un archivo de configuración para Odoo.
Ahora debemos pausar la ejecución del servidor con la combinación de teclas ctr+c.
Listo, ahora editamos el archivo de configuración llamado odoo.conf, con el editor vi, vim, nano o gedit si estÔn en modo grÔfico y modificamos los valores:
db_host = localhost
db_maxconn = 64
db_name = False
db_password = odoo
db_port = 5432
db_template = template1
db_user = odoo
Guardamos y ahora para ejecutar el servidor odoo, usamos el comando:
python /opt/odoo/odoo-bin -c /opt/odoo/odoo.conf
Una Captura de Odoo 12:

Desde mi perspectiva Odoo 12 es 3 veces mas rapido y mejor optimizado en cuestion del manejo de Datos, podemos optimizar aĆŗn mas el rendimiento montando un Servidor Web (Nginx) con un certificado de Serguridad HTTPS.
Y ahora con el manejo de Multi Sitios Web.

jueves, 9 de agosto de 2018

Definición y lectura de campos multi Compañia en Odoo

Lectura de campos de tipo propiedad con Odoo



Los campos multi-compañia o propiedad permiten al usuario tener un control interno por compañia dentro de la base de datos, esto permite la segmentación de la información para que una Base de Datos conserve sus propias particularidades, configuración, valores, etc.
Los datos de tipo propiedad podemos encontrarlos dentro de Clientes o Productos, principalmente para la parte Contable.

Como podemos definir un campo de tipo propiedad, antes de la Api  se definia un campo llamandolo fields.property pero con la migración a la nueva api, el valor property es cambiado por el parametro company_dependent, por ejemplo, voy a definir una tarifa secundaria dentro de Clientes, pero quiero que esta tarifa sea unica por CompaƱia:

class ResPartner(models.Model):
    _inherit = 'res.partner'

    second_product_pricelist = fields.Many2one('product.pricelist', 
         'Tarifa Secundaria', company_dependent=True)

Ahora, como podemos dar lectura al campo de tipo propiedad para obtener el valor, aqui entra en función el Contexto (context), utilizamos un parametro llamado force_company  dentro del código, por ejemplo si tengo 2 compaƱias, una con el ID 1 la otra con el ID 2, la lectura seria:

# Company 1
partner_br = self.env['res.partner'].with_context(force_company=1).browse(256)
second_product_pricelist_company_1 = partner_br.second_product_pricelist.id

#Company 2

partner_br = self.env['res.partner'].with_context(force_company=2).browse(256)
second_product_pricelist_company_2 = partner_br.second_product_pricelist.id

El parametro force_company recibe el ID de la compaƱia de la cual se obtendran los valores y el browse del ejemplo es el ID de un Cliente.

No se olviden comentar ...

viernes, 20 de abril de 2018

Instalación Odoo 11 con Docker

Instalación de Odoo en un Docker Ubuntu


    Las herramientas de virtualización son una gran ayuda en el mundo de las tecnologias de información, ya que encapsulan los servicios, librerias y herramientas necesarias para la ejecución de programas, aplicaciones, servicios, etc. al mismo tiempo que lo hacen portable e independiente del Sistema Operativo, anterior a docker podiamos encontrar hypervisor como una de las mas conocidas, en la actualidad docker tiene ventajas sobre otras y se ha vuelto una de las mas importantes, en el mundo de Odoo desde la versión 10 y ahora versión 11 es casi un estandar para los desarrolladores, ya que nos permite tener diferentes instancias o proyectos de forma independiente con la posibilidad de poder llevar este contenedor al entorno de Producción de un cliente de forma facil y rapida, homologando la versión de Python, la versión de sus librerias y las aplicaciones.

En Odoo podemos encontrar el Docker oficial desde Github o el repositorio oficial de Docker:
  • https://github.com/odoo/docker
  • https://hub.docker.com/_/odoo/
La versión oficial contiene una serie de instrucciones para poder hacer nuestra instalación y quede lista para ponerse en marcha para nuestros desarrollos o en nuestro Cliente para su uso final.

En este Post quiero enseñar una maner alternativa a la oficial, usando la imagen (docker) de Ubuntu y montando nuestro Contenedor para instalar Odoo, Postgres y las librerias requeridas para la ejecución de Odoo.

1.   Instalación de Docker
Lo mas importante es tener instalado nuestro docker en el Servidor o Maquina donde vamos a trabajar, en mi caso utilizo Ubuntu 17.04 y los pasos para instalador docker son:


Actualizar los Repositorios:

sudo apt-get update


Instalar las librerias necesarias:

 sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

AƱadir el repositorio Docker :

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -


sudo apt-key fingerprint 0EBFCD88


sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

sudo apt-get update


sudo apt-get install docker-ce


Debemos crear una cuenta en la Pagina Oficial https://hub.docker.com/

Como paso final de la instalación debemos hacer un loggin en nuestro Sistema Operativo:

docker login

2.   Descarga de Imagen Ubuntu

En este ejemplo usare Ubuntu 16.04 como mi imagen base para ello ejecuto en terminal

sudo docker pull ubuntu:16.04

Podremos visualizar nuestras Imagenes con el comando:

sudo docker images


3.   Creación de nuestro Contenedor

Crearemos un contenedor con las siguientes caracteristicas:
  • Con el puerto 8069 abierto para acceder desde el anfitrion
  • Con el Puerto 22 abierto
  • Con una Terminal Interactiva
  • Con un Directorio Compartido entre huesped (docker) y anfitrion (SO)

docker run -it -p 22 -p 8069:8069 -v /opt/odoo:/home/odoo --name odoo_11_dev ubuntu:16.04

Es importante indicar la versión de la Imagen descargada para ello al final indicamos ubuntu:16.04
(docker run -it -p 22 -p 8069:8069 -v /opt/odoo:/home/odoo --name odoo_11_dev ubuntu:16.04)

El resultado es una consolta interactiva, en la cual podemos ejecutar comandos.

Si cerramos la terminal el docker seguira corriendo y ya no existe necesidad de ejecutar nuevamente el comando anterior, ahora debemos ejecutar el comando para listar los contenededores activos:

docker ps


Si queremos ver todos los que hemos creado:

docker ps -a

Para poder ingresar al contenedor activo:

docker attach odoo_11_dev

Si no vemos la terminal pasados unos segundos es importante dar un enter mas o dos.

4.   Instalación de Aplicaciones

Una ves que tenemos nuestro Contenedor Ubuntu 16.04, vamos a instalar las aplicaciones y librerias.

Primero debemos hacer un update a los repositorios:

apt-get update

Instalamos Python 3 para Odoo 11:

apt-get install python3 -y

Instalamos Pip 3:

apt-get install python3-pip -y

Instalamos algunas dependencias de Odoo:

apt-get install python3-dev libxml2-dev libxslt1-dev libevent-dev \
libsasl2-dev libldap2-dev libpq-dev libpng12-dev libjpeg-dev \
poppler-utils node-less node-clean-css python3-pypdf2 npm python3-babel \
python3-decorator python3-docutils -y

Creamos un Usuario del Sistema para Gestionar Odoo

useradd -d /home/odoo -s /bin/bash odoo

Cambiamos la contraseƱa del usuario:

passwd odoo

Instalamos Git

apt-get install git

Descargamos Odoo, dentro de la carpeta /opt

cd /opt

git clone https://github.com/odoo/odoo --branch 11.0

Cambiamos los permisos de la carpeta hacia el usuario odoo:

chown odoo.odoo /opt/odoo -R

Instalamos las dependencias de odoo

pip3 install /opt/odoo/requirements.txt -r

pip3 install /opt/odoo/doc/requirements.txt -r

Instalacion de Wkhtmltopdf:

apt-get install wget -y

wget https://nightly.odoo.com/extra/wkhtmltox-0.12.1.2_linux-jessie-amd64.deb

dpkg -i wkhtmltox-0.12.1.2_linux-jessie-amd64.deb

apt-get -f install


Instalamos Postgres:

apt-get install postgresql

Iniciamos Postgres:

service postgresql start

Creamos el usuario de Postgres para Odoo:

su postgres

createuser -s -P -e odoo

ContraseƱa: odoo

Instalamos un Editor de Textos, por ejemplo nano:

apt-get install nano

Cambiamos al usuario odoo:

su odoo

Ejecutamos Odoo y creamos nuestro Archivo de configuración:

python3 /opt/odoo/odoo-bin -c odoo_server.conf -s

Editamos el Archivo de Configuración y modificamos los Parametros de Base de Datos:

nano odoo_server.conf

db_host = localhost
db_password = odoo
db_port = 5432
db_sslmode = prefer
db_template = template1
db_user = odoo


Una ves Editado, guardamos con el Comando Ctrl + O

Volvemos a ejecutar sin el  parametro -s

python3 /opt/odoo/odoo-bin -c odoo_server.conf

Y listo, en nuestro navegador podemos acceder a Odoo:

Ante cualquier error de fuentes podemos consultar:
https://poncesoft.blogspot.mx/2016/05/solucion-al-error-bundle.html