Guía de estilo

La guía de estilo establece una serie de parámetros a seguir a la hora de programar código para e-cidadania. Estas normas son inquebrantables. La guía de estilo sigue bastante fielmente el PEP8, con algunas excepciones que vienen de la guía de estilo interna de Pocoo.

Python

Imports

Todos los imports deben estar situados en la cabecera del fichero, por debajo de la cabecera de comentarios. Los imports de módulos de sistema o de python deben preceder a los demás, y los de las librerías externas deben preceder a los de la aplicación.

Ejemplo:

import os
import sys

from extlib import function

from myapp.module import function
Ancho de línea
El código debe de ser de 80 columnas de ancho como máximo salvo en los casos de las plantillas.
Declacariones largas

Si una línea de código no cabe en 80 columnas, intenta reducirla declarando variables previamente. Si aún así no se puede se deben dividir de las siguientes formas:

Parentesis:

website = models.URLField(_('Website'), verify_exists=True,
                          max_length=200, null=True, blank=True,
                          help_text=_('The URL will be checked'))

Declaraciones:

this_is_a_very_long(function_call, 'with many parameters') \
    .that_returns_an_object_with_an_attribute

MyModel.query.filter(MyModel.scalar > 120) \
             .order_by(MyModel.name.desc()) \
             .limit(10)

Listas, tuplas y diccionarios:

items = [
    'this is the first', 'set of items', 'with more items',
    'to come in this line', 'like this'
]

dict = {
    ('mobile': phone),
    ('car': key),
    ('another': thing),
}
Indentación
La indentación debe ser de 4 espacios por nivel, sin excepciones. No se pueden utilizar tabulaciones para marcar los niveles de indentación.
Líneas en blanco

Todas las funciones y clases deben estar separadas por dos líneas en blanco. El código dentro de una clase o método por una línea en blanco.

Ejemplo:

class ListDocs(ListView):

    """
    List all documents stored whithin a space.
    """
    paginate_by = 25
    context_object_name = 'document_list'

    def get_queryset(self):
        place = get_object_or_404(Space, url=self.kwargs['space_name'])
        objects = Document.objects.all().filter(space=place.id).order_by('pub_date')
        return objects

    def get_context_data(self, **kwargs):
        context = super(ListDocs, self).get_context_data(**kwargs)
        context['get_place'] = get_object_or_404(Space, url=self.kwargs['space_name'])
        return context


def whatever(args):

    """
    A comment.
    """
    this_is_something = 0

HTML

Columnas
El código HTML no tiene límite de columnas, pero debe estar indentado de forma que se pueda localizar rápidamente cualquier elemento del documento. La disposición indentada en el desarrollo prevalece sobre el resultado renderizado de la aplicación.
Indentación
El código X/HTML debe estar indentado con 2 espacios, sin excepción.

CSS

Indentación

La indentación será de 4 espacios, siempre, igual que el código Python.

Ejemplo:

body {
    background: #FAFAFA;
    padding: 0;
    margin: 0;
    font-family: Verdana, "Lucida Sans", Arial;
    font-size: 1em;
    color: #000;
    cursor: default;
}
Colores
Los colores siempre deberán estar escritos en su código hexadecimal. Se permiten las abreviaturas de tres dígitos.
Tamaños de letra
Los tamaños de letra deben ser declarados siempre en em’s y salvo una excepción muy casual no se deben declarar en píxels.

JavaScript

Estilo de código JavaScript.