Desarrollando en Manjaro: Como se hizo MPIS [modulo colorize]

mpis_logo
Saludos amigos Manjaristas.
Primero que nada me presentare ya que esta es mi primera publicación, mi nombre Harrinson Gavidia soy de Venezuela y uno de los desarrolladores de MPIS. ahora entraremos en materia, daré inicio mi apartado en el blog: Desarrollando en Manjaro. con este primer post de una serie dedicada a la programación que lleva por nombre: Como se hizo MPIS, cual servirá como tutorial para los que quieran aprender el lenguaje de programación python y como documentación para los futuros colaboradores de nuestra herramienta MPIS.

Hablaremos de la ultima versión unstable de MPIS v2.0 específicamente del modulo colorize, En las versiones anteriores la forma como se daba color a los textos era un poco tediosa. para mejorar esto sé creo un modulo [colorize] el cual se servirá para dar color a los textos en la consola. usando códigos ANSI se puede dar color a los textos en consola:
\033[valor_estilo;valor_color_texto;valor_color_fondom
  • valor_estilo => tiene un rango de 1 a 9
  • valor_color_texto => tiene un rango de 30 a 39 y de 90 a 99
  • valor_color_fondo => tiene un rango de 40 a 49 y de 100 a 109
Dicho esto solo falta mostrar como se escribe en python así que vamos con el  código:
from enum import IntEnum

class Estilo(IntEnum):
    normal = 0
    negrita = 1
    subrayado = 4
    tachado = 7
Explicando un poco el código se crea una clase con nombre Estilo la cual hereda de IntEnum que es una clase que nos proporciona una forma sencilla de hacer enumeraciones en python. la clase Estilo no es mas que una asociación de nombres | valor, se hizo esto mismo para representar los valores de los colores del texto y fondo.
class Texto(IntEnum):
    blanco = 30
    rojo = 31
    verde = 32
    amarillo = 33
    azul = 34
    morado = 35
    cian = 36
    gris = 37
    grisclaro = 38
    reset = 39
    blancoligero = 90
    rojoligero = 91
    verdeligero = 92
    amarilloligero = 93
    azulligero = 94
    moradoligero = 95
    cianligero = 96
    negroligero = 97
    grisligero = 98
class Fondo(IntEnum):
    blanco = 40
    rojo = 41
    verde = 42
    amarillo = 43
    azul = 44
    morado = 45
    cian = 46
    gris = 47
    negro = 48
    reset = 49
    blancoligero = 100
    rojoligero = 101
    verdeligero = 102
    amarilloligero = 103
    azulligero = 104
    moradoligero = 105
    cianligero = 106
    negroligero = 107
Hasta el nuestro modulo no tiene mucha utilidad, le falta lo mas importante armar el formato que da color, para ello creamos una clase la llamaremos Formato. necesitamos que la clase Formato reciba los valores de estilo, color de texto, color de fondo; y devuelva el formato en códigos ANSI. existen muchas formas de hacerlo esta es una:
class Formato:
    def __init__(self):
        self.CS = "\033["
        self.CF = "1;m"

    def aplicar(self, estilo=Estilo.normal.value,
                color_texto=Texto.reset.value,
                color_fondo=Fondo.reset.value):
        return self.CS + str(estilo) + ";"\
               + str(color_texto) + ";"\
               + str(color_fondo) + "m"

     def reset(self):
         return self.CS + self.CF
La explicación:
  • Dentro del constructor de la clase [ def __init__(self): ] se declaran dos variables CS (carácter escape) y CF (caracter fin)
  • Se definió un método [ def aplicar(self): ] el recibe los valores y retorna el formato como una cadena de caracteres con el formato ANSI.
  • Como este formato ANSI se mantiene hasta que se cambie por otro nos toca crear un método [ def reset(self): ] que devuelva a la normalidad los colores del texto en la consola lo que se logra concatenando las dos variables que se definieron en el constructor de la clase.
El modulo finaliza con una linea que nos ahorrará unas cuantas lineas de código en los demás módulos, crear una instancia de la clase Formato con el nombre colorize:
colorize = Formato()
¿Como se usa el modulo dentro de MPIS?
Les Muestro un pequeño ejemplo:
form colorize import colorize
from colorize import (Texto, Fondo, Estilo)

texto = "Texto a colorear"

print(colorize.aplicar(Estilo.negrita.value,
                       Texto.rojo.value,
                       Fondo.blanco.value)\
      + texto + colorize.reset())
Si ejecutamos el código nos da como resultado un texto en negrita de color rojo sobre un fondo blanco.
screenshot_20170118_023734
En el siguiente post hablaremos del modulo de traducción. Espero sus comentarios con gusto responderé cualquier duda o pregunta, hasta la próxima entrada.
Anuncios
Esta entrada fue publicada en Manjaro, Tutoriales y etiquetada , , , , . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s