Analizar código python con pylint desde Docker
Posted on dom 12 junio 2016 in Tutorial de Docker • 3 min read
Hace un tiempo escribí un artículo sobre analizar código python con pylint.
En este caso se tomará el artículo de pruebas unitarias con Docker y el de pylint para mostrar como se ejecuta el análisis de código python con Docker.
Los artículos anteriores sobre Docker son:
-
Iniciando Django con docker usando docker-compose con postgresql como microservicio.
-
Crear un entorno de Integración y Despligue continue con Docker para node.js.
-
Ejecutar una prueba de unittest en Python con un contenedor Docker.
-
Montar una Plataforma como servicio (PaaS) con Dokku (docker).
-
Instalar Jenkins por medio de Docker y crear una imagen Docker de Jenkins
-
Crear un contenedor Docker como entorno de desarrollo para Sails.js.
-
Correr aplicaciones de escritorio desde un contenedor Docker.
-
Usar dockerui para la gestión de imágenes y contenedores de Docker
El archivo Dockerfile
cambió un poco con respecto al usado con las pruebas unitarias, ahora se usará como base a Debian, se instalará pylint por medio de apt-get y lo demás queda igual que en el artículo de pruebas unitarias.
A continuación el archivo Dockerfile
:
FROM debian
MAINTAINER Ernesto Crespo
RUN apt-get update
RUN apt-get install -y pylint
RUN apt-get clean
WORKDIR /app
COPY . /app
Los archivos que se usarán son los mismos utilizados en el de pruebas unitarias que se encuentra en el repositorio de github.
raizcuadrada
├── Dockerfile
├── LICENSE
├── raizcuadrada.py
├── raizcuadrada_test.py
└── README.md
El módulo raizcuadrada.py
tiene lo siguiente:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Se importa el módulo math para calcular la raiz cuadrada.
"""
import math
#Función raiz cuadrada.
def Raiz(a):
"""Si a es mayor o igual a cero se calcula la raiz cuadrada"""
if a >= 0:
return math.sqrt(a)
#Si es menor a cero se genera una excepción donde se informa que a debe ser mayor o igual a cero.
else:
raise ValueError("a debe ser >= 0")
if __name__ == '__main__':
#Se importa el módulo doctest
import doctest
#Se realiza la prueba al archivo raizcuadra.txt
doctest.testfile("raizcuadrada.txt")
La construcción de la imagen Docker se hace con el siguiente comando:
docker build -t prueba-python .
Para ejecutar el análisis desde docker se ejecuta:
docker run -v "$PWD:/app" -ti prueba-python pylint raizcuadrada.py
Y el resultado es el siguiente:
docker run -v "$PWD:/app" -ti prueba-python pylint raizcuadrada.py
No config file found, using default configuration
************* Module raizcuadrada
C: 16, 0: Line too long (101/80) (line-too-long)
C: 12, 0: Invalid function name "Raiz" (invalid-name)
C: 12, 0: Invalid argument name "a" (invalid-name)
Report
======
9 statements analysed.
Messages by category
--------------------
+-----------+-------+---------+-----------+
|type |number |previous |difference |
+===========+=======+=========+===========+
|convention |3 |NC |NC |
+-----------+-------+---------+-----------+
|refactor |0 |NC |NC |
+-----------+-------+---------+-----------+
|warning |0 |NC |NC |
+-----------+-------+---------+-----------+
|error |0 |NC |NC |
+-----------+-------+---------+-----------+
Messages
--------
+--------------+------------+
|message id |occurrences |
+==============+============+
|invalid-name |2 |
+--------------+------------+
|line-too-long |1 |
+--------------+------------+
Global evaluation
-----------------
Your code has been rated at 6.67/10
Raw metrics
-----------
+----------+-------+------+---------+-----------+
|type |number |% |previous |difference |
+==========+=======+======+=========+===========+
|code |9 |36.00 |NC |NC |
+----------+-------+------+---------+-----------+
|docstring |4 |16.00 |NC |NC |
+----------+-------+------+---------+-----------+
|comment |3 |12.00 |NC |NC |
+----------+-------+------+---------+-----------+
|empty |9 |36.00 |NC |NC |
+----------+-------+------+---------+-----------+
Statistics by type
------------------
+---------+-------+-----------+-----------+------------+---------+
|type |number |old number |difference |%documented |%badname |
+=========+=======+===========+===========+============+=========+
|module |1 |NC |NC |100.00 |0.00 |
+---------+-------+-----------+-----------+------------+---------+
|class |0 |NC |NC |0 |0 |
+---------+-------+-----------+-----------+------------+---------+
|method |0 |NC |NC |0 |0 |
+---------+-------+-----------+-----------+------------+---------+
|function |1 |NC |NC |100.00 |100.00 |
+---------+-------+-----------+-----------+------------+---------+
Duplication
-----------
+-------------------------+------+---------+-----------+
| |now |previous |difference |
+=========================+======+=========+===========+
|nb duplicated lines |0 |NC |NC |
+-------------------------+------+---------+-----------+
|percent duplicated lines |0.000 |NC |NC |
+-------------------------+------+---------+-----------
De esta forma se puede ejecutar el análisis del código python con pylint usando Docker.
¡Haz tu donativo! Si te gustó el artículo puedes realizar un donativo con Bitcoin (BTC) usando la billetera digital de tu preferencia a la siguiente dirección: 17MtNybhdkA9GV3UNS6BTwPcuhjXoPrSzV
O Escaneando el código QR desde la billetera: