Guía de estilo

A guía de estilo establece unha serie de normas a seguir cando se programa en e-cidadania. Estas normas son inquebrantables. A guía de estilo segue moi preto o documento PEP8, con algunhas excepcións que veñen da guía de estilo interna de Pocoo.

Python

Imports

Todos os imports deben estar situados na cabeceira do arquivo, por debaixo do comentario de cabeceira. Os imports de módulos python deben preceder a todos os demais, e as librarías externas ou módulos de terceiras partes deben preceder aos das aplicacións.

Exemplo:

import os
import sys

from extlib import function

from myapp.module import function
Ancho de liña (columnas)
O código debe ser sempre de 80 columnas de ancho, permítese un par de columnas extra en casos de necesidade.
Declaracións longas

Se unha liña de código non cabe en 80 columnas, intenta reducilo declarando variables previamente. Se aínda non encaixa, podes dividir as liñas da seguinte forma:

Sentencias con paréntese:

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

Declaracións:

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 e 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),
}
Sangría
A sangría debe ser sempre de 4 espazos por nivel. Non se permite o uso de tabulacións para sangrar.
Liñas en branco

Cada función e clase debe estar separado por dúas liñas en branco. O código dentro dunha clase ou método debe estar separado por unha liña en branco.

Exemplo:

class ListDocs(ListView):
    ----blank line----
    """
    List all documents stored whithin a space.
    """
    paginate_by = 25
    context_object_name = 'document_list'
    ----blank line----
    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
    ----blank line----
    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
----blank line----
----blank line----
def whatever(args):
    ----blank line----
    """
    A comment.
    """
    this_is_something = 0

HTML

Columnas
O código HTML non ten límite de columnas, pero debe estar sangrado de forma que se poida localizar rapidamente cada elemento no documento. O estilo de sangrado precede ao resultado interpretado no navegador.
Sangría

O código X/HTML debe estar sangrado con 4 espazos por nivel igual que o código python, sen excepcións.

Note

Poida que haxa código antigo que siga a anterior norma de sangría que establecía dous espazos por nivel. Se ves algún arquivo así agradeceríamos que nos enviases un parche para solucionalo.

CSS

Sangría

A sangría é de 4 espazos, igual que no código python.

Exemplo:

body {
    background: #FAFAFA;
        padding: 0;
        margin: 0;
        font-family: Verdana, "Lucida Sans", Arial;
        font-size: 1em;
        color: #000;
        cursor: default;
}
Cores
As cores deben ser escritos sempre en hexadecimal. Permítese utilizar abreviaturas de tres díxitos.
Tamaño de fonte
O tamaño de fonte debe estar especificado sempre en em’s salvo que sexa un requisito da presentación.

JavaScript

Ao código javascript aplícanselle as mesmas normas que ao código python.