From 8a5cc9ffe5ef00ed149917e3363c8080b1be8641 Mon Sep 17 00:00:00 2001 From: Stainless Bot Date: Fri, 8 Sep 2023 16:37:30 +0000 Subject: [PATCH] chore(internal): updates --- pyproject.toml | 1 + src/increase/_compat.py | 12 +++++++++--- src/increase/_types.py | 3 ++- src/increase/_utils/__init__.py | 1 + src/increase/_utils/_utils.py | 6 +++++- 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 7665c93f2..9001ea113 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,6 +34,7 @@ nox = "^2023.4.22" nox-poetry = "^1.0.3" + [build-system] requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" diff --git a/src/increase/_compat.py b/src/increase/_compat.py index f8e73e40a..fed1df050 100644 --- a/src/increase/_compat.py +++ b/src/increase/_compat.py @@ -120,10 +120,10 @@ def model_copy(model: _ModelT) -> _ModelT: return model.copy() # type: ignore -def model_json(model: pydantic.BaseModel) -> str: +def model_json(model: pydantic.BaseModel, *, indent: int | None = None) -> str: if PYDANTIC_V2: - return model.model_dump_json() - return model.json() # type: ignore + return model.model_dump_json(indent=indent) + return model.json(indent=indent) # type: ignore def model_dump(model: pydantic.BaseModel) -> dict[str, Any]: @@ -132,6 +132,12 @@ def model_dump(model: pydantic.BaseModel) -> dict[str, Any]: return cast("dict[str, Any]", model.dict()) # pyright: ignore[reportDeprecated, reportUnnecessaryCast] +def model_parse(model: type[_ModelT], data: Any) -> _ModelT: + if PYDANTIC_V2: + return model.model_validate(data) + return model.parse_obj(data) # pyright: ignore[reportDeprecated] + + # generic models if TYPE_CHECKING: diff --git a/src/increase/_types.py b/src/increase/_types.py index 09637bd74..be81ef400 100644 --- a/src/increase/_types.py +++ b/src/increase/_types.py @@ -31,7 +31,8 @@ _T = TypeVar("_T") # Approximates httpx internal ProxiesTypes and RequestFiles types -ProxiesTypes = Union[str, Proxy, Dict[str, Union[None, str, Proxy]]] +ProxiesDict = Dict[str, Union[None, str, Proxy]] +ProxiesTypes = Union[str, Proxy, ProxiesDict] FileContent = Union[IO[bytes], bytes] FileTypes = Union[ # file (or bytes) diff --git a/src/increase/_utils/__init__.py b/src/increase/_utils/__init__.py index 05a82c731..b45dc1b1b 100644 --- a/src/increase/_utils/__init__.py +++ b/src/increase/_utils/__init__.py @@ -1,6 +1,7 @@ from ._utils import flatten as flatten from ._utils import is_dict as is_dict from ._utils import is_list as is_list +from ._utils import is_given as is_given from ._utils import is_mapping as is_mapping from ._utils import parse_date as parse_date from ._utils import coerce_float as coerce_float diff --git a/src/increase/_utils/_utils.py b/src/increase/_utils/_utils.py index a5541bec8..dde4b457d 100644 --- a/src/increase/_utils/_utils.py +++ b/src/increase/_utils/_utils.py @@ -7,7 +7,7 @@ from pathlib import Path from typing_extensions import Required, Annotated, TypeGuard, get_args, get_origin -from .._types import NotGiven, FileTypes +from .._types import NotGiven, FileTypes, NotGivenOr from .._compat import is_union as _is_union from .._compat import parse_date as parse_date from .._compat import parse_datetime as parse_datetime @@ -100,6 +100,10 @@ def _extract_items( return [] +def is_given(obj: NotGivenOr[_T]) -> TypeGuard[_T]: + return not isinstance(obj, NotGiven) + + # Type safe methods for narrowing types with TypeVars. # The default narrowing for isinstance(obj, dict) is dict[unknown, unknown], # however this cause Pyright to rightfully report errors. As we know we don't