Código fonte para calendario_ons

"""

Módulo para gerar calendário operativo segundo o critério adotado pelo ONS

OBJETIVO: utilizar para o cálculo de ENA por semana operativa

"""

import pendulum

[documentos]def from_date(data_string=None, hoje=False): """Gera dados do calendário operativo diário, segundo o critério adotado pelo ONS. Com base numa data de entrada é calculado os dados necessários para os processos de modelagem segundo o ONS. Args: data_string (str): (DD-MM-YYYY) data base na qual se deseja ter as informações. hoje (bool): Habilita o uso da data no momento da execução. | Returns: dict: Dados de calendário necessários para os processos de modelagem do ONS. | 'chave' : valor | 'inicio': primeiro dia da semana operativa (DateTime) | 'final' : último dia da semana operativo (DateTime) | 'dias-realizados-semana': quantos dias da semana operativa são de realizado (int) | 'semana-operativa': valor da semana operativa do mes (int) | 'rev' : numeração da revisão da semana (int) | 'semana-operativa-ano': número da semana operativa do ano (int) """ data_requerida = pendulum.today('America/Sao_Paulo') if hoje else pendulum.from_format(data_string, 'DD-MM-YYYY') if data_requerida.day_of_week == pendulum.SATURDAY: inic_semana_operativa = data_requerida final_semana_operativa = data_requerida.add(days=6) semana_operativa_do_mes = final_semana_operativa.week_of_month semana_operativa_do_ano = final_semana_operativa.week_of_year dias_realizados = 0 else: # pega o primeiro dia da semana operativa # O "+1" corrige o início da semana de domingo para sábado inic_semana_operativa = data_requerida.subtract(days=(data_requerida.day_of_week+1)) # Calcula qual será o último dia da semana operativa # O 5 ao invés de 6(dias da semana sem contar o atual) corrige o início da semana operativa para o sábado final_semana_operativa = data_requerida.add(days=(5 - data_requerida.day_of_week)) # Numeral que representa a semana operativa do mês semana_operativa_do_mes = final_semana_operativa.week_of_month # Numeral que representa a semana operativa do ano semana_operativa_do_ano = final_semana_operativa.week_of_year dias_realizados = data_requerida.day_of_week+1 resultado = {'inicio': inic_semana_operativa, 'final': final_semana_operativa, 'dias-realizados-semana': dias_realizados, 'semana-operativa': semana_operativa_do_mes, 'rev': semana_operativa_do_mes-1, 'semana-operativa-ano': semana_operativa_do_ano } return resultado