Last active
November 25, 2024 19:56
-
-
Save IvanildoBarauna/1a0ee752826a15c21bc38bcc9e24b429 to your computer and use it in GitHub Desktop.
Cria intervalos de datas baseado em um parâmetro de agruupamento
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from typing import Union | |
| from datetime import datetime, timedelta | |
| def parse_date(date: datetime.date) -> str: | |
| """ | |
| Função para formatar a data no padrão "YYYY-MM-DD" | |
| """ | |
| return date.strftime("%Y-%m-%d") | |
| def generate_date_ranges( | |
| initial_date: Union[str, datetime.date] = "2023-11-01", | |
| final_date: Union[str, datetime.date] = datetime.strftime(datetime.now(), "%Y-%m-%d"), | |
| group_size: int = 15, | |
| ) -> list[tuple[str, str]]: | |
| """ | |
| Função para gerar as datas em grupos de X dias com base no parametro group_size | |
| Retorno: lista de tuplas com as datas inicial e final no formato "YYYY-MM-DD" | |
| """ | |
| if initial_date > final_date: | |
| raise ValueError("A data inicial não pode ser maior que a data final") | |
| if not isinstance(initial_date, (str, datetime.date)): | |
| raise TypeError("initial_date deve ser do tipo str ou datetime.date") | |
| if not isinstance(final_date, (str, datetime.date)): | |
| raise TypeError("final_date deve ser do tipo str ou datetime.date") | |
| date_list: list[tuple[str, str]] = [] | |
| if isinstance(initial_date, str): | |
| initial_date = datetime.strptime(initial_date, "%Y-%m-%d").date() | |
| if isinstance(final_date, str): | |
| final_date = datetime.strptime(final_date, "%Y-%m-%d").date() | |
| # Generate a list of dates between the initial and final dates | |
| for i in range(0, (final_date - initial_date).days + 1, group_size): | |
| ini = initial_date + timedelta(days=i) | |
| end = min(ini + timedelta(days=group_size - 1), final_date) | |
| if ini >= final_date: | |
| break | |
| date_list.append((parse_date(ini), parse_date(end))) | |
| return date_list | |
| def extract_data_from_api(initial_date: str, final_date: str): | |
| """ | |
| Exemplo de função que requer as datas para chamar a API | |
| """ | |
| print(initial_date, final_date) | |
| print("---") | |
| for i in generate_date_ranges(initial_date="2023-11-01", group_size=15): | |
| initial_date = i[0] | |
| final_date = i[1] | |
| # Aqui você pode chamar a função que precisa das datas para chamar a API passando as datas | |
| extract_data_from_api(initial_date, final_date) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment