Epic_2_Sprint_1 Create a shared version utility - robbiemu/aclarai GitHub Wiki
pyproject.toml
Tarea: Crear una utilidad compartida para leer la versión del proyecto desde Descripción
Implementar una utilidad centralizada en el paquete aclarai-shared
que lea el número de versión directamente desde el fichero pyproject.toml
raíz. Esta utilidad proporcionará una constante global (ACLARAI_VERSION
) que será expuesta directamente en el nivel superior del paquete aclarai_shared
para facilitar su uso. Esto establece una única fuente de verdad para el versionado del proyecto y elimina la necesidad de mantener versiones hardcodeadas en múltiples lugares.
Alcance
Incluido
- Creación de un nuevo fichero:
shared/aclarai_shared/utils/version.py
. - Implementación de una función robusta
find_project_root()
que navegue hacia arriba en el árbol de directorios para localizar elpyproject.toml
raíz. - Implementación de una función
get_version()
que utilicetomllib
(contomli
como fallback) para parsear elpyproject.toml
y extraer el valor de la claveproject.version
. - Definición de una constante global
ACLARAI_VERSION
enversion.py
. - Creación del fichero
shared/aclarai_shared/utils/__init__.py
para asegurar queutils
sea un paquete de Python. - Modificación del fichero
shared/aclarai_shared/__init__.py
para importar y exportar la constanteACLARAI_VERSION
, haciéndola accesible desde el nivel superior del paquete. - Añadir
tomli
como una dependencia principal enshared/pyproject.toml
para garantizar la compatibilidad con Python < 3.11.
Excluido
- La refactorización de los servicios para que importen y utilicen la nueva constante
ACLARAI_VERSION
. (Se abordará en la siguiente tarea). - La implementación de tests de integración para esta nueva utilidad.
- La creación o modificación de cualquier hook de pre-commit.
Criterios de Aceptación
- El fichero
shared/aclarai_shared/utils/version.py
existe y contiene la constanteACLARAI_VERSION
. - Al importar
ACLARAI_VERSION
directamente desde el paquete compartido (e.g.,from aclarai_shared import ACLARAI_VERSION
), su valor coincide exactamente con la cadena de versión definida en elpyproject.toml
raíz. - La lógica para encontrar el
pyproject.toml
raíz es robusta y no depende del directorio de trabajo actual (cwd
).
Dependencias (estas son particularmente las cosas en este EPIC que necesitan ser hechas)
- Tarea: Establecer la Versión del Proyecto en
pyproject.toml
Raíz: La claveversion
debe existir en elpyproject.toml
raíz para que esta utilidad pueda leerla.
Entregables
- Nuevo fichero:
shared/aclarai_shared/utils/version.py
. - Nuevo fichero:
shared/aclarai_shared/utils/__init__.py
. - Fichero modificado:
shared/aclarai_shared/__init__.py
. - Fichero modificado:
shared/pyproject.toml
.
Estimación de Esfuerzo (en días)
- 1 día
Riesgos y Mitigaciones
- Riesgo: La lógica para encontrar el directorio raíz (
find_project_root
) podría ser frágil y fallar en ciertos entornos de despliegue.- Mitigación: La implementación se basará en
Path(__file__).resolve().parents
para una navegación fiable del sistema de ficheros, en lugar de depender deos.getcwd()
.
- Mitigación: La implementación se basará en
- Riesgo: La modificación del
__init__.py
principal podría introducir problemas de importación circular si la utilidad de versión dependiera de otros componentes del paquete compartido.- Mitigación: El módulo
version.py
será diseñado para tener un mínimo de dependencias, importando únicamente módulos de la librería estándar de Python (pathlib
,tomllib
) y ninguna otra utilidad deaclarai_shared
.
- Mitigación: El módulo
Notas Técnicas
-
La lógica de la utilidad se implementará en
shared/aclarai_shared/utils/version.py
. -
El fichero
shared/aclarai_shared/__init__.py
será modificado para exponer la constante:# shared/aclarai_shared/__init__.py # ... otros imports existentes ... # Importar la constante para que esté disponible en el nivel superior del paquete from .utils.version import ACLARAI_VERSION # Actualizar la lista __all__ para incluir la nueva constante __all__ = [ # ... otros exports existentes ... "ACLARAI_VERSION", ]
-
El consumo de la constante en otros servicios será simple y directo:
# Ejemplo en un servicio como aclarai-core from aclarai_shared import ACLARAI_VERSION print(f"Versión del servicio: {ACLARAI_VERSION}")