- Directrices de Desarrollo de Pyragua
- Participando en el desarrollo de Pyragua
- Documentación y Teoría
- Licencia de Pyragua
- Guía del código
- Estructura del repositorio
- Directrices para el código fuente
- Convenciones para los mensajes de error
- Otras convenciones
- El ChangeLog
- Tests con PyUnit?
- Mensajes de Logs
- Créditos del código
- Parches
- Trac: Tareas, Bugs y características
- Acceso al repositorio de SVN
- Branches de Pyragua
- Relesases
- Internacionalización y Localización
Directrices de Desarrollo de Pyragua
Participando en el desarrollo de Pyragua
La página del semillero de desarrolo Pyrox es http://pyrox.utp.edu.co.
Listas de Correo
Documentación y Teoría
Agregar enlaces a la documentación generada por el semillero relacionada con Pyragua de alguna forma, y también a páginas extener
Licencia de Pyragua
Guía del código
Consejos para empezar a estudiar el código.
Estructura del repositorio
Directrices para el código fuente
Python utiliza la identaciones para determinar los bloques de código, por lo que el código de python es muy consistente. Para Pyragua utilizamos los siguientes estándares, que son muy parecidos a los recomendados para Python.
Para el desarrollo seguimos la siguiente guía de estilo. En esta página hay mucho más que una guía de estilo, también hay muchas recomendaciones para escribir código más pythonico. A continuación precisaremos algunos elementos que no se definen en esta guía, o que son solo recomendaciones.
Identación
Todo el código de Pyragua debe estar identado con espacios en blanco y usaremos siempre 4. Pyragua será configurable, pero por defecto usará esta esta configuración para el código.
Al momento de agrupar métodos relacionados se pueden utilizar dos lineas en blanco.
Nombres
Para atributos privados se recomienda el uso de nombres iniciados con '' (doble guión bajo).
Comentarios
Es muy importante actualizar los comentarios cuando se realicen cambios en el código. No se desea tener comentarios contradictorios.
Documentación
Las Docstrings son todas las cadenas que aparecen al principio de un móduolo, clase, función, o método. Esas cadenas se transforman en el atributo doc del objeto, y es la cadena que se imprime al ejecutar help(nombre_funcion_o_metodo_o_etc).
Por lo general todos los módulos, las clases, los paquetes, y los métodos públicos y funciones deben tener cadenas de documentación. Los paquetes se documentan en el archivo init.py del paquete.
Para la documentación de Pyragua se utilizará Epydoc por lo tanto parte de los estándares de documentación que se manejarán harán uso de la sintáxis de este.
#-*- coding: utf-8 -*- '''Cadena de documentación del módulo.''' class MiClase: '''Esta es mi clase.''' def __init__(self): '''Documentación de un método público.''' def func(a, b): '''Documentación de esta función. @param a: Descripción del parámetro a @type a: número @param b: Descripción de b @type b: cadena @raise exception: Descripción de las circunstancias en las cuales se levanta exception @rtype: Retorna número o None @return: Descripción del valor retornado por '''
Este tipo de documentación es reconocida por el interprete. Sin embargo, también hay otro tipo de cadenas de documentación que pueden utilizarse, y ques on reconocidas por aplicaciones externas para la creación de documentación. Las cadenas literales situadas después de una igualación de una variable, es la documentación de esa variable.
g = 'module attribute (module-global variable)' """Est es la docstring de g.""" values = [] """@ivar values: Documentación de values.""" class AClass: c = 'class attribute' """Esta es la docstring AClass.c's.""" def __init__(self): """Method __init__'s docstring.""" self.i = 'instance attribute' """Documentación de self.i's.""" def f(x): """Function f's docstring.""" return x**2 f.a = 1 """Documentación del atributo de función f.a.""" #: Descripcioń de la siguiente variable. siguiente_variable = 1 en_linea = 0 #: Documentación en linea reconocida por Epydoc
def function(arg): """Esta es la docstring __doc__ de function.""" """ Esta es una docstring adicional, ignorada por el compilador de byte-code, pero extraída por utilidades de documentación. """ pass
Excepciones
La captura de excepciones genéricas se debe evitar en la medida de lo posible.
try: f = open("archivo.txt") except: pass
Una captura de excepciones de esa forma no permite conocer con precisión qué error fue el que realmente ocurrió. Además, pocas veces se desea darle el mismo tratamiento a todas las excepciones. Debería por tanto especificarse en la clausula except, el nombre de la excepción que se quiere capturar, y las excepciones inesperadas no se deben capturar.
try: f = open("archivo.txt") except IOError: print "Error de entrada/salida"
Si el error es diferente a uno de entrada, se muestra un mensaje respectivo, y se pueden hacer más cosas al respecto. Además, si hay algún otro tipo de error, como por ejemplo, un error sintáctico en el código, no se ignora silenciosamente, ni se trata igual que un error de entrada salida.
Convenciones para los mensajes de error
Otras convenciones
El ChangeLog
Pyragua tiene en su directorio raíz un archivo llamado ChangeLog, donde los desarrolladores deben registrar los cambios relevantes realizados.
Los cambios relevantes son los relacionados con cambios en APIs (nombres de funciones y métodos), cambios en nombres de clases, cambio en nombres de archivos, o en los casos en que se elimina alguno, y otros cambios que se dejan a criterio del desarrollador, y que se considere importante anunciar (correcciones de bugs también).
Se hará uso del formato de ChangeLog definido por la GNU que se puede encontrar en http://www.gnu.org/software/emacs/manual/html_node/emacs/Format-of-ChangeLog.html. Como ejemplo del ChangeLog pueden mirar el ChangeLog actual de Pyragua http://pyragua.pyroxdev.org/browser/branches/pyragua0.2.5/ChangeLog.
Tests con PyUnit?
Escribiendo los tests antes de codigicar
Mensajes de Logs
Uso de logging.
Créditos del código
Parches
Trac: Tareas, Bugs y características
La herramienta para manejo de proyectos que utilizamos para Pyragua es Trac. La base de Trac son los tickets, y es la forma en que este maneja las tareas de un proyecto, los bugs y las características sugeridas por otras personas. La idea es manejar algunas cosas en común que se deben definir en cada ticket de cada tipo creado.
Tareas
Una tarea (task) corresponde a algo que se debe realizar en un milestone de un proyecto. Se deben tener las siguientes consideraciones al momento de crear un ticket correspondiente a una tarea:
- El ticket summary debe ser lo suficientemente descriptivo y no demasiado extenso, ya que el área en donde se muestra es pequeña.
- La descripción de la tarea debe comenzar con un párrafo en donde se indique claramente cual es el objetivo de esta.
- En la descripción también se deben escribir ideas generales relacionadas con la implementación de la tarea.
- Se recomienda insertar enlaces que sirvan como referencia a lo que se afirma en la descripción.
- Deben colocarse algunas palabras para la búsqueda en el campo keywords del formulario de nuevo ticket.
