Se propone centrarse en la parte de recuento para los proyectos. El recuento es realizado por 3 librerías diferentes:
- openstv
Librería que implementa diferentes sistemas de recuento.
- agora-tally
Librería/comando "wrapper" sobre openstv, de forma que parsea los votos en el formato utilizado por Agora Voting y lo traduce al formato admitido por openstv, para luego extraer los resultados en un formato admitido por Agora Voting.
- agora-results
Librería/comando que utiliza agora-tally para realizar recuento, pero que funciona mediante un pipeline de configuración, una lista de funciones y sus argumentos para calcular resultados complejos. Por ejemplo, permite consolidar resultados de varias preguntas o varios recuentos, aplicar criterios de paridad, etc.
Se proponen los siguientes proyectos:
Aumentar la seguridad de agora-results, convirtiendo el sistema de Pipes de agora-results para (ver [1] [2] como ejemplo):
- Registrar con un decorador las funciones válidas
- Validar el input del usuario para comprobar que sigue un formato válido (usando un validador de json-schema [3] en vez de el validador del ejemplo, que no es estándar)
- Que los pipes se declaren como clases
[1] https://github.com/agoravoting/authapi/blob/master/authapi/pipelines/base.py [2] https://github.com/agoravoting/authapi/blob/master/authapi/pipelines/field_register.py [3] https://pypi.python.org/pypi/jsonschema
Cada pipe del agora-results debería de tener una serie de test unitarios. Ahora mismo agora-results no tiene soporte de tests-unitarios. También habría que añadir documentación sobre cómo crear nuevos pipes y cual es su funcionamiento básico en agora-results, documentando los formatos de entrada y de salida de los pipes.
El soporte de STV está anticuado e inactivo. Volver a añadir soporte de MeekSTV en agora-tally, añadiendo tests unitarios y documentando su funcionamiento. Los tests unitarios deberían de incluir ejemplos grandes también, con miles de votos, de hecho lo suyo sería que buscaran resultados de votaciones reales.