Tarea programada #2 Valor 33.33%
El objetivo de esta tarea es utilizar la biblioteca requests, Pillow y el envío de correos electrónicos
Se debe crear una aplicación que descargue de un servidor una cantidad determinada de imágenes en formato jpg, y permita enviar las mismas por correo electrónico. A las imágenes enviadas por correo electrónico, se les podrá aplicar una modificación con ayuda de la biblioteca Pillow.
Flujo del programa
El programa debe pedir al usuario un número entre 1 y 10 que corresponden con la cantidad de imágenes con las que se trabajará.
Luego, el programa deberá solicitar al servidor las credenciales necesarias para que este le de las imágenes, por lo que deberá hacer una petición a la dirección:
El cuerpo de la petición debe ser así:
{
'user': 'user',
'password': 'python22024!'
}
Dicha petición debe ser realizada mediante el método POST, y devolverá un único string que contiene un token de autenticación, que deberá ser incluido en la siguiente petición a realizar. Dicho token tiene una vida de 5 minutos, pero debería ser suficiente para todo lo que se debe realizar.
Cuando se obtiene el token, se debe enviar una petición al servidor que incluya el token de autenticación en el encabezado y la cantidad de imágenes solicitadas por el usuario como parte del cuerpo de la petición. La dirección en la que se solicitan las imágenes es:
Esta es una petición de tipo POST.
El token de autenticación se debe enviar en el encabezado como:
Authorization : f'Bearer {token}'
El cuerpo de esta petición es:
{
"cantidad": cantidad_solicita # Número entero
}
Las imágenes deberán ser guardadas en una ubicación temporal definida por el programador, y seguidamente se le solicitará al usuario las modificaciones que le quiere aplicar al grupo de imágenes. Las acciones son:
- Blanco y negro
- Transponer
- Difuminar
- Rotar 90 grados en sentido horario
El programa debe permitirle al usuario hacer cada una de las transformaciones a las imágenes de forma individual, de modo que el usuario puede hacer una, o dos o tres, o cuatro transformaciones a las imágenes, e inclusive puede no hacerle ninguna. Una vez que una transformación se realiza, deberá desactivarse, es decir, una transformación solo se puede realizar una única vez.
Cuando el usuario finaliza las transformaciones, el sistema le deberá solicitar un correo electrónico el cual deberá tener la siguiente información:
- Un mensaje de saludo
- La información de la cantidad de imágenes enviadas
- La lista de las transformaciones que se le hicieron a cada una
- Las imágenes como un adjunto
Restricciones
- La descarga de las imágenes debe hacerse con hilos, un hilo por descarga. Es decir, si se descargan 10 imágenes, se deben hacer diez hilos.
- El envío de correo electrónico debe hacerse en un hilo aparte del principal.
- Se debe enviar el archivo requeriments.txt
- El programa debe tener al menos un log de errores donde se registren todos los errores y excepciones que se definan.
- El archivo
main
no puede contener funciones definidas. - Las funciones no pueden contener solicitudes de entrada (
inputs
) dentro de ellas. Toda la entrada de datos debe ser manejada desde elmain
y pasada como argumentos a las funciones según sea necesario. - Todas las funciones deben venir debidamente documentadas
# Documentación de una función
def calcular_total(precios, cantidades):
"""
Calcula el total de una compra en base a los precios y cantidades de los productos.
Args:
precios (list): Una lista de los precios de los productos.
cantidades (list): Una lista de las cantidades de los productos.
Returns:
float: El total de la compra.
"""
total = sum(precio * cantidad for precio, cantidad in zip(precios, cantidades))
return total