Skip to content

Commit f157153

Browse files
authored
Merge pull request #370 from pythoncanarias/issue#369
Añadir fichero CONTRIBUTING.md
2 parents 7bdc810 + 43d4fd3 commit f157153

2 files changed

Lines changed: 115 additions & 0 deletions

File tree

CONTRIBUTING.md

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
## Cómo contribuir a este proyecto
2+
3+
Si quieres contribuir a este proyecto, hay muchas cosas que puedes hacer.
4+
Tenemos una etiqueta en los _issues_ del [repositorio de este
5+
proyecto](https://github.com/pythoncanarias/pycan-web/issues) para
6+
[aquellas tareas que pensamos que son un buen punto de partida](https://github.com/pythoncanarias/pycan-web/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)
7+
para empezar a contribuir
8+
al desarrollo.
9+
10+
Además de las tareas propias de desarrollo, hay muchas otras formas de ayudar,
11+
una de las principales es aportar nuevas ideas para mejorar la web, así
12+
como avisarnos de cualquier error que encuentres en la misma.
13+
14+
Para contribuir como desarrollador, en el documento [README.md](README.md) se
15+
explica cómo montar un entorno de desarrollo propio usando _Docker_ y
16+
_Docker Compose_.
17+
18+
## Notas para los desarrolladores
19+
20+
El desarrollo consiste en una aplicación Django, y algunas partes de _frontend_
21+
escritas en _javascript_ plano. Por el momento no nos hemos decidido a usar
22+
ningún _framework_, aunque algunos del equipo tenemos una cierta preferencia
23+
por [vue.js](https://vuejs.org/).
24+
25+
Se ha intentado seguir en lo posible las prácticas habituales en Django, pero
26+
en algunos casos se han realizado modificaciones sobre lo que podría
27+
considerarse un proyecto Django _estándar_. Explicaremos estas divergencias en las
28+
siguientes secciones.
29+
30+
### Organización de código de las aplicaciones de Django
31+
32+
Como hay muchas aplicaciones o _apps_, las tenemos todas todas bajo una única
33+
carpeta `apps`, para reducir la cantidad de _ruido_ en
34+
la carpeta raíz. Si crees necesario añadir una nueva _app_, créala por favor al
35+
mismo nivel que las actuales.
36+
37+
### Estilo de código
38+
39+
Intentamos adaptarnos lo más posible a la recomendaciones del
40+
[PEP-8](https://www.python.org/dev/peps/pep-0008/), pero somos más flexibles en
41+
el tema de la longitud de caracteres de la línea, intentamos mantenerlo por
42+
debajo de 96 caracteres por línea.
43+
44+
Algunos de nosotros usamos la herramienta [black](https://github.com/psf/black)
45+
para formatear el código, pero no se considera obligatorio.
46+
47+
### Dependecias
48+
49+
Intentamos mantener el número de dependencias bajo. Un alto número de
50+
dependencias frena las actualizaciones generales, que es un objetivo que
51+
queremos mejorar. Eso no significa que no se acepten nuevas dependencias, pero
52+
sí que pedimos que analices primero si las ventajas de usar esa nueva librería
53+
realmente nos aportan una funcionalidad importante.
54+
55+
### Separación entre lógica de negocio, modelos y vistas
56+
57+
Intentamos (pero no siempre conseguimos) mantener el código de los modelos y de
58+
las vistas lo más sencillo y directo posible. Mantenemos la idea de que es
59+
preferible tener las reglas de negocio y el código más importante en ficheros
60+
de servicios aparte, donde un fichero de servicios es simplemente un fichero
61+
Python en el que se incorpora todo el código relativo a un dominio o
62+
aplicación.
63+
64+
Veamos, por ejemplo, la _app_ `notice`, que se usa para enviar notificaciones
65+
a los miembros ante determinados eventos, como por ejemplo el aviso un mes
66+
antes de que se venza su permanencia a la organización.
67+
68+
En la clase `apps.notice.models.Notice` se definen algunos métodos, pero
69+
solo aquellos que afectan o cambian el estado del propio modelo, sin
70+
ninguna tercera parte implicada. En concreto, no existe un método
71+
para enviar la notificación en si.
72+
73+
Este acto de enviar la notificación está implementado por separado, dentro del
74+
módulo `apps.notica.tasks`, primero porque es relativamente complejo y segundo,
75+
e incluso más importante, porque involucra a más elementos que el `notice` en
76+
cuestión: implica saber de la existencia de un sistema de colas, del subsistema
77+
de envío de mensajes ([sendgrid](https://sendgrid.com/) en nuestro caso), etc.
78+
79+
En resumen, se recomiendo que las clases definan métodos unicamente para
80+
consultar o cambiar su estado interno, pero que cualquier interacción con
81+
otras clases o componentes debe realizarse fuera de la clase, preferiblemente
82+
en un módulo aparte.
83+
84+
85+
### Asigna nombres únicos a las clases
86+
87+
Hay muchas razones para esto, pero veamos solo una. Si nos encontramos con una
88+
nueva clase mientras examinamos el código, lo deseable es que una búsqueda o un
89+
_grep_ por el nombre de la clase nos devuelva solo la definición y los usos de
90+
la misma. Cualquier otra cosa que aparezca será ruido. Si tengo dos clases con
91+
el mismo nombre en ficheros diferentes, esto solo complica el entender en que
92+
contextos y de que forma se usa cada una de las clases. Razones similares se
93+
pueden argumentar para las variables o constantes globales.
94+
95+
De la misma forma que no existe en español dos sinónimos que signifiquen
96+
_exactamente_ lo mismo (Siempre hay algún matiz que los diferencia) no deberían
97+
existir en nuestro programa dos clases que se llamen exactamente iguales,
98+
porque, si fuera así, ¿por qué no son la misma?
99+
100+
Tenemos ahora mismo en nuestro código un ejemplo de dos clases con el mismo
101+
nombre, la clase `Membership` en `organization.models` y la clase
102+
`Membership` en el módulo `members.models`. Es verdad que el programa
103+
funciona, porque las clases están aisladas en sus propios módulos, pero hubiera
104+
sido preferible haber buscado otro nombre que no estuviera en conflicto con uno
105+
ya existente (`@jileon`: Yo lo sé bien ya que fui yo el que creó la clase
106+
duplicada).
107+
108+
109+
### Funciones vs clases para vistas
110+
111+
Para las vistas, preferimos, en general, usar funciones en vez de vistas
112+
basadas en clases. En ningún caso debe entenderse esta recomendación como una
113+
prohibición de usar _CBV_, es solo que preferimos usarlas para casos sencillos
114+
y/o triviales, y usar funciones para todo lo demás.

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Website of [Python Canarias](https://pythoncanarias.es/) 🚀   happily mad
1313

1414
## Table of contents
1515

16+
- [Contributing to this project](CONTRIBUTING.md).
1617
- [Development setup](docs/dev.md)
1718
- [Production setup](docs/prod.md)
1819
- [Adding new app](docs/new-app.md)

0 commit comments

Comments
 (0)