Obten la fecha laboral inmediata anterior en Python

Frecuentemente me he topado con la necesidad de realizar este cálculo, en donde ejemplo el día laboral que precede al día lunes 2022-06-13 corresponde al día viernes 2022-06-10.

Iniciamos a partir de un objeto datetime del módulo datetime que contendrá los datos de la fecha actual. El método estrella en esta ocasión es datetime.weekday(), el cual retornará una representación numérica del día de la semana al que corresponde la fecha en un rango de [0-6].

ValorDía
0Lunes
1Martes
2Miércoles
3Jueves
4Viernes
5Sábado
6Domingo

Ahora la idea principal consiste en que si la fecha corresponde al día lunes, este debe regresar tres días, el domingo dos días y el resto se debe regresar un día.

from datetime import datetime, timedelta
 
lastBusinessDay = datetime.today()
shift = timedelta(max(1, (lastBusinessDay.weekday() + 6) % 7 - 3))
lastBusinessDay = lastBusinessDay - shift

En cuanto a los asuetos o feriados, por el momento he decidido crear una lista de fechas, en la que si el día anterior es un asueto, volveré a generar un día anterior de forma recursiva.


Foto de Mario Gogh en Unsplash