Saltar a contenido

Referencia del código

config.py

_ahora() → str

Devuelve la fecha y hora actual como cadena con formato DD/MM/YYYY HH:MM.

C: dict

Diccionario con la paleta de colores de la aplicación.

Clave Uso
bg Fondo principal de la ventana
header Fondo de la cabecera
accent Color de acento (botones principales, checkboxes)
text Color de texto principal
text_muted Color de texto secundario/apagado
text_priority Color de texto para tareas prioritarias
task_bg Fondo de cada fila de tarea
task_hover Fondo al pasar el ratón por una tarea
task_priority Fondo de tareas prioritarias
task_selected Fondo de la tarea seleccionada

auth/hasher.py

hash_password(plain: str) → str

Genera un hash bcrypt con salt automático (rounds=12).

verificar_password(plain: str, hash_guardado: str) → bool

Verifica una contraseña en texto plano contra un hash bcrypt almacenado.


auth/models.py

Usuario (dataclass)

Campo Tipo Descripción
nombre_usuario str Identificador único (minúsculas)
nombre_mostrar str Nombre visible en la UI
hash_password str Hash bcrypt de la contraseña
creado_el str Fecha de creación
ultimo_login str Fecha del último acceso

auth/store.py

cargar_usuarios() → list[dict]

Carga todos los usuarios desde users_data/users.json. Devuelve lista vacía si no existe.

guardar_usuarios(usuarios: list[dict]) → None

Guarda la lista de usuarios con escritura atómica.

buscar_usuario(nombre_usuario: str) → dict | None

Busca un usuario por nombre (insensible a mayúsculas). Devuelve None si no existe.

crear_usuario(nombre_usuario, nombre_mostrar, plain_password) → bool

Crea un nuevo usuario con la contraseña hasheada. Devuelve False si el usuario ya existe.

actualizar_ultimo_login(nombre_usuario: str) → None

Actualiza la marca de tiempo del último login.

existe_algún_usuario() → bool

Comprueba si hay al menos un usuario registrado.

autenticar(nombre_usuario: str, plain_password: str) → dict | None

Autentica al usuario. Devuelve el dict del usuario si las credenciales son correctas, None en caso contrario.


data/task_store.py

obtener_archivo_tareas(nombre_usuario: str) → str

Devuelve la ruta completa al archivo de tareas del usuario, creando el directorio si no existe.

guardar_tareas(tareas: list, nombre_usuario: str) → None

Guarda la lista de tareas con escritura atómica mediante archivo .tmp + os.replace().

cargar_tareas(nombre_usuario: str) → list

Carga las tareas del usuario. Si no existen pero hay un tasks.json legado, lo copia a users_data/pendiente_migracion.json para ofrecerlo durante el registro.

hay_migracion_pendiente() → bool

Comprueba si existe users_data/pendiente_migracion.json.

obtener_tareas_migracion() → list

Devuelve las tareas legadas pendientes de migración.

marcar_migracion_completada() → None

Elimina el archivo pendiente_migracion.json.


ui/login_window.py

VentanaLogin(ctk.CTk)

Ventana raíz de la aplicación. Gestiona dos estados internos: "login" y "registro".

Método Descripción
_construir_ui() Construye todos los widgets (se llama una sola vez)
_mostrar_estado_login() Muestra el formulario de acceso
_mostrar_estado_registro() Muestra el formulario de creación de cuenta
_cambiar_estado() Alterna entre login y registro
_intentar_login() Valida y ejecuta el login
_intentar_registro() Valida y ejecuta el registro
_alternar_visibilidad(entrada) Muestra/oculta la contraseña en un campo
_lanzar_app(nombre_usuario) Destruye el login y lanza MisTareasApp

ui/main_window.py

MisTareasApp(ctk.CTk)

Ventana principal. Recibe nombre_usuario: str en el constructor.

Método Descripción
_construir_ui() Construye cabecera, entrada y lista
_construir_barra_menus() Barra de menús (diferenciada por plataforma)
_añadir_tarea() Añade una nueva tarea (máx. 200 caracteres)
_alternar_tarea(indice, var) Marca/desmarca una tarea como completada
_eliminar_tarea(indice) Elimina una tarea
_alternar_prioridad(indice) Activa/desactiva la prioridad de una tarea
_seleccionar_tarea(indice) Selecciona una tarea (actualiza colores en sitio)
_mover_seleccionada(direccion) Mueve la tarea seleccionada con teclado
_iniciar_arrastre(event, indice) Inicia el drag & drop
_bucle_anim_fantasma() Bucle a ~60fps para el ghost window durante el arrastre
_iniciar_anim_hueco(nuevo_idx) Animación de apertura de hueco al arrastrar
_fin_arrastre(event) Finaliza el arrastre y reordena
_renderizar_tareas() Reconstruye todos los widgets de la lista
_guardar_tareas() Persiste las tareas (escritura atómica)
_cargar_tareas() Carga las tareas del usuario actual
_cerrar_sesion() Destruye la app y relanza VentanaLogin
_salir() Guarda y cierra la aplicación