From 007f9f937ef38a6d3bb66ca1a7dc0506fbb9b379 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 30 Oct 2026 15:50:46 +0000 Subject: [PATCH 1/8] chore(deps): update ruff requirement from <0.17,>=0.16 to >=0.16,<0.18 Updates the requirements on [ruff](https://github.com/astral-sh/ruff) to permit the latest version. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.16.0...0.17.2) --- updated-dependencies: - dependency-name: ruff dependency-version: 0.17.2 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 5ed5482f..d3c574a7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -121,7 +121,7 @@ dev = [ "pytest>=7.0", "pytest-cov>=4.0", "pytest-repeat>=0.9.4", - "ruff>=0.16,<0.17", + "ruff>=0.16,<0.18", "ty==0.0.91", "vulture>=2.16,<3", "deptry>=0.25,<0.26", From 5596e8c1e83793258fbb193fa460dd839f835bdf Mon Sep 17 00:00:00 2001 From: Bruno da Cunha de Oliveira Date: Fri, 30 Oct 2026 12:52:56 -0300 Subject: [PATCH 2/8] fix: align datetime imports with Ruff 0.17 (#319) --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 47a5dcfd..cc6d9bca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,8 @@ e este projeto adere ao [Versionamento Semântico](https://semver.org/lang/pt-BR ### Corrigido +- Os imports de `datetime` usam o alias `dt`, exigido pelo Ruff 0.17, para manter a verificação de lint aprovada (#319). + ## [0.11.1] - 2026-10-29 From a730c32a2e7ae6ee07230ced883bf9bec4e5f2fd Mon Sep 17 00:00:00 2001 From: Bruno da Cunha de Oliveira Date: Fri, 30 Oct 2026 12:53:02 -0300 Subject: [PATCH 3/8] fix: align datetime imports with Ruff 0.17 (#319) --- src/dataframeit/core.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/dataframeit/core.py b/src/dataframeit/core.py index 12a11082..0e10fa55 100644 --- a/src/dataframeit/core.py +++ b/src/dataframeit/core.py @@ -3,7 +3,7 @@ from __future__ import annotations import dataclasses -import datetime +import datetime as dt import hashlib import importlib.util import itertools @@ -672,8 +672,8 @@ def _same_value(validated: object, value: object) -> bool: # noqa: PLR0911 (uma and abs(value) >= _EXACT_INT_IN_FLOAT ): return False - if type(validated) is datetime.date and isinstance(value, datetime.datetime): - return value == datetime.datetime.combine(validated, datetime.time()) + if type(validated) is dt.date and isinstance(value, dt.datetime): + return value == dt.datetime.combine(validated, dt.time()) return bool(validated == value) From b41ccea176f47f5bf8fd0b2f2c6bd2d9fac0a880 Mon Sep 17 00:00:00 2001 From: Bruno da Cunha de Oliveira Date: Fri, 30 Oct 2026 12:53:07 -0300 Subject: [PATCH 4/8] fix: align datetime imports with Ruff 0.17 (#319) --- src/dataframeit/utils.py | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/src/dataframeit/utils.py b/src/dataframeit/utils.py index 5c393f94..c715936e 100644 --- a/src/dataframeit/utils.py +++ b/src/dataframeit/utils.py @@ -12,7 +12,7 @@ import ast import collections.abc -import datetime +import datetime as dt import json import math import numbers @@ -491,7 +491,7 @@ def _without_optional(annotation: object) -> object: # Data, hora e duração: o pyarrow converte cada um destes tipos nos outros e o # número em cada um deles. O datetime depois de um date perde a hora, e o int # depois de um date ou de um timedelta vira data ou duração. -_TEMPORAL = (datetime.date, datetime.datetime, datetime.time, datetime.timedelta) +_TEMPORAL = (dt.date, dt.datetime, dt.time, dt.timedelta) # Pares que o pyarrow converte um no outro quando o primeiro vem antes: o True # depois de um float vira 1.0, e o texto depois de um bytes vira bytes. _CONVERTED_PAIRS = ((float, bool), (bytes, str)) @@ -534,10 +534,10 @@ def _mixes_converted_types(annotation: object) -> bool: Decimal, str, bytes, - datetime.datetime, - datetime.date, - datetime.time, - datetime.timedelta, + dt.datetime, + dt.date, + dt.time, + dt.timedelta, ) _NUMBERS = (int, float, Decimal) # A classe de `_KINDS` do número que não é subclasse de nenhuma delas, como o @@ -571,16 +571,15 @@ def _group_kinds(group: list, classes: set) -> set | None: if cls is type(None) or cls is type(pd.NaT) or issubclass(cls, (dict, *_SEQUENCES)): continue members = [value for value in group if type(value) is cls] - if issubclass(cls, datetime.datetime): + if issubclass(cls, dt.datetime): kinds.update( - _AWARE_DATETIME if value.tzinfo is not None else datetime.datetime - for value in members + _AWARE_DATETIME if value.tzinfo is not None else dt.datetime for value in members ) elif issubclass(cls, float): if not all(math.isnan(value) for value in members): kinds.add(float) elif (issubclass(cls, Decimal) and any(value.is_nan() for value in members)) or ( - issubclass(cls, datetime.time) and any(value.tzinfo is not None for value in members) + issubclass(cls, dt.time) and any(value.tzinfo is not None for value in members) ): return None else: @@ -683,8 +682,8 @@ def _to_polars(values: pd.Series, annotation: object) -> PolarsSeries: (int, polars.Int64), (float, polars.Float64), (bool, polars.Boolean), - (datetime.date, polars.Date), - (datetime.datetime, polars.Datetime), + (dt.date, polars.Date), + (dt.datetime, polars.Datetime), ) if _mixes_converted_types(annotation): msg = f"A anotação {annotation} junta tipos que o pyarrow converte uns nos outros." @@ -1314,9 +1313,9 @@ def list_layers(annotation: object, target: type) -> int | None: complex, Decimal, Enum, - datetime.date, - datetime.time, - datetime.timedelta, + dt.date, + dt.time, + dt.timedelta, ) From 54081ed0374c6462db28f6a886134b801fd8e3f5 Mon Sep 17 00:00:00 2001 From: Bruno da Cunha de Oliveira Date: Fri, 30 Oct 2026 12:53:12 -0300 Subject: [PATCH 5/8] fix: align datetime imports with Ruff 0.17 (#319) --- tests/test_checkpoint_robusto.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_checkpoint_robusto.py b/tests/test_checkpoint_robusto.py index a733b404..d69d647e 100644 --- a/tests/test_checkpoint_robusto.py +++ b/tests/test_checkpoint_robusto.py @@ -1,6 +1,6 @@ """Checkpoint que falha ao gravar e retomada a partir de CSV/XLSX.""" -import datetime +import datetime as dt import warnings from enum import Enum from typing import Annotated, Literal, NewType, Optional, TypeVar @@ -418,7 +418,7 @@ def grava(df, path, *_): def test_checkpoint_textual_serializa_data_dentro_de_dict(tmp_path): ckpt = tmp_path / "ckpt.csv" - _save_checkpoint(pd.DataFrame({"meta": [{"quando": datetime.date(2026, 9, 24)}]}), ckpt) + _save_checkpoint(pd.DataFrame({"meta": [{"quando": dt.date(2026, 9, 24)}]}), ckpt) assert pd.read_csv(ckpt)["meta"][0] == '{"quando": "2026-09-24"}' From 8902a3cc8ace5d706732d2eba9e0f9ab24cd5166 Mon Sep 17 00:00:00 2001 From: Bruno da Cunha de Oliveira Date: Fri, 30 Oct 2026 12:53:16 -0300 Subject: [PATCH 6/8] fix: align datetime imports with Ruff 0.17 (#319) --- tests/test_conditional.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test_conditional.py b/tests/test_conditional.py index bf5c1587..6fcb836e 100644 --- a/tests/test_conditional.py +++ b/tests/test_conditional.py @@ -2,7 +2,7 @@ import collections import collections.abc -import datetime +import datetime as dt import logging import os import re @@ -1487,12 +1487,12 @@ class _Cadastro(BaseModel): porte: Literal["pequeno", "grande"] = "pequeno" rotulo: Annotated[str, "rótulo"] = "" codigo: str | int = "" - inicio: datetime.date | None = None + inicio: dt.date | None = None bruto: bytes = b"" fase: complex = 0j preco: Decimal | None = None - hora: datetime.time | None = None - prazo: datetime.timedelta | None = None + hora: dt.time | None = None + prazo: dt.timedelta | None = None @pytest.mark.parametrize( From ea333a8716fcef1ec3e09baea8ad6a033986c129 Mon Sep 17 00:00:00 2001 From: Bruno da Cunha de Oliveira Date: Fri, 30 Oct 2026 12:53:21 -0300 Subject: [PATCH 7/8] fix: align datetime imports with Ruff 0.17 (#319) --- tests/test_multiple_data_types.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_multiple_data_types.py b/tests/test_multiple_data_types.py index be5cf589..ff869334 100644 --- a/tests/test_multiple_data_types.py +++ b/tests/test_multiple_data_types.py @@ -7,7 +7,7 @@ - dict """ -import datetime +import datetime as dt import importlib.util import sys import warnings @@ -305,13 +305,13 @@ def test_inteiro_sem_nulo_fica_como_estava(self): assert from_pandas(df, info)["id"].dtype == pl.UInt8 def test_coluna_de_data_continua_data(self): - data = pl.DataFrame({"texto": ["a"], "dia": [datetime.date(2024, 1, 2)]}) + data = pl.DataFrame({"texto": ["a"], "dia": [dt.date(2024, 1, 2)]}) df, info = to_pandas(data) result = from_pandas(df, info) assert result["dia"].dtype == pl.Date - assert result["dia"].to_list() == [datetime.date(2024, 1, 2)] + assert result["dia"].to_list() == [dt.date(2024, 1, 2)] def test_campo_do_modelo_que_estava_na_entrada_sai_do_pandas(self): data = pl.DataFrame({"texto": ["a"], "nota": [7]}) From 43e552db45b696279c19ba7477fad3a520154f61 Mon Sep 17 00:00:00 2001 From: Bruno da Cunha de Oliveira Date: Fri, 30 Oct 2026 12:53:26 -0300 Subject: [PATCH 8/8] fix: align datetime imports with Ruff 0.17 (#319) --- tests/test_retomada_assinada.py | 36 ++++++++++++++++----------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/tests/test_retomada_assinada.py b/tests/test_retomada_assinada.py index 9f7adbdc..49fd8d16 100644 --- a/tests/test_retomada_assinada.py +++ b/tests/test_retomada_assinada.py @@ -2,7 +2,7 @@ import contextlib import csv -import datetime +import datetime as dt import warnings from collections.abc import Mapping, Sequence from collections.abc import Set as AbstractSet @@ -633,7 +633,7 @@ def llm(text, *args, **kwargs): class ComData(BaseModel): - quando: dict[str, datetime.date] + quando: dict[str, dt.date] class ComTupla(BaseModel): @@ -645,7 +645,7 @@ class ComChaveInt(BaseModel): _TIPADOS = { - ComData: ("quando", lambda texto: {texto: datetime.date(2024, 1, 2)}), + ComData: ("quando", lambda texto: {texto: dt.date(2024, 1, 2)}), ComTupla: ("par", lambda texto: (1, texto)), ComChaveInt: ("mapa", lambda texto: {1: texto, 10: texto, 2: texto}), } @@ -736,8 +736,8 @@ def so_com_itens(cls, valor, info): class DatasDepoisDoInicio(BaseModel): - inicio: datetime.date - datas: list[datetime.date] + inicio: dt.date + datas: list[dt.date] @model_validator(mode="after") def depois_do_inicio(self): @@ -748,7 +748,7 @@ def depois_do_inicio(self): class DatasEmTexto(BaseModel): - datas: list[datetime.date] + datas: list[dt.date] @field_serializer("datas") def em_texto(self, valor): @@ -787,10 +787,10 @@ def avanca(cls, valor): ExclamaAteDuasVezes: lambda texto: {"n": [texto]}, FiltraPorOutroCampo: lambda texto: {"tem_itens": True, "itens": [texto]}, DatasDepoisDoInicio: lambda texto: { - "inicio": datetime.date(2024, 1, 1), - "datas": [datetime.date(2024, 1, 2)], + "inicio": dt.date(2024, 1, 1), + "datas": [dt.date(2024, 1, 2)], }, - DatasEmTexto: lambda texto: {"datas": [datetime.date(2024, 1, 2)]}, + DatasEmTexto: lambda texto: {"datas": [dt.date(2024, 1, 2)]}, } @@ -987,11 +987,11 @@ class Nota(Enum): class Estrito(BaseModel): model_config = ConfigDict(strict=True) - datas: list[datetime.date] + datas: list[dt.date] par: tuple[int, str] cores: list[Cor] - dia: datetime.date - quando: datetime.datetime + dia: dt.date + quando: dt.datetime cor: Cor nivel: Nivel nota: Nota @@ -1000,8 +1000,8 @@ class Estrito(BaseModel): class Escalares(BaseModel): - dia: datetime.date - quando: datetime.datetime + dia: dt.date + quando: dt.datetime cor: Cor nivel: Nivel nota: Nota @@ -1010,11 +1010,11 @@ class Escalares(BaseModel): _RESPOSTA_TIPADA = { - "datas": [datetime.date(2024, 1, 2)], + "datas": [dt.date(2024, 1, 2)], "par": (1, "a"), "cores": [Cor.AZUL], - "dia": datetime.date(2024, 1, 2), - "quando": datetime.datetime(2024, 1, 2, 3, 4, 5), # noqa: DTZ001 (o XLSX não guarda fuso) + "dia": dt.date(2024, 1, 2), + "quando": dt.datetime(2024, 1, 2, 3, 4, 5), # noqa: DTZ001 (o XLSX não guarda fuso) "cor": Cor.AZUL, "nivel": Nivel.BAIXO, "nota": Nota.A, @@ -1064,7 +1064,7 @@ def resposta(text): class EstritoComNumero(BaseModel): model_config = ConfigDict(strict=True) - datas: list[datetime.date] + datas: list[dt.date] n: int