Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ repos:
- id: unasyncd
additional_dependencies: ["ruff"]
- repo: https://github.com/charliermarsh/ruff-pre-commit
rev: "v0.9.10"
rev: "v0.11.0"
hooks:
# Run the linter.
- id: ruff
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,8 @@ release: ## Bump version and create re
@make docs
@make clean
@make build
@uv lock --upgrade-package advanced-alchemy >/dev/null 2>&1
@uv run bump-my-version bump $(bump)
@uv lock --upgrade-package advanced-alchemy
@echo "${OK} Release complete 🎉"

# =============================================================================
Expand Down
2 changes: 1 addition & 1 deletion advanced_alchemy/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ class MetadataRegistry:
def __new__(cls) -> Self:
if cls._instance is None:
cls._instance = super().__new__(cls)
return cast(Self, cls._instance)
return cast("Self", cls._instance)

def get(self, bind_key: Optional[str] = None) -> MetaData:
"""Get the metadata for the given bind key."""
Expand Down
2 changes: 1 addition & 1 deletion advanced_alchemy/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -318,7 +318,7 @@ def wrap_sqlalchemy_exception( # noqa: C901, PLR0915
if wrap_exceptions is False:
raise
raise IntegrityError(
detail=cast(str, getattr(exc.orig, "detail", "There was an issue processing the statement."))
detail=cast("str", getattr(exc.orig, "detail", "There was an issue processing the statement."))
) from exc
except SQLAlchemyError as exc:
if wrap_exceptions is False:
Expand Down
4 changes: 2 additions & 2 deletions advanced_alchemy/extensions/sanic/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ def get_sessionmaker_from_request(self, request: "Request") -> async_sessionmake
SessionMakerT: The session maker.
"""
return cast(
async_sessionmaker[AsyncSession], getattr(request.app.ctx, self.session_maker_key, None)
"async_sessionmaker[AsyncSession]", getattr(request.app.ctx, self.session_maker_key, None)
) # pragma: no cover

def get_session_from_request(self, request: Request) -> AsyncSession:
Expand Down Expand Up @@ -477,7 +477,7 @@ def get_sessionmaker_from_request(self, request: Request) -> sessionmaker[Sessio
Returns:
SessionMakerT: The session maker.
"""
return cast(sessionmaker[Session], getattr(request.app.ctx, self.session_maker_key, None)) # pragma: no cover
return cast("sessionmaker[Session]", getattr(request.app.ctx, self.session_maker_key, None)) # pragma: no cover

def get_session_from_request(self, request: Request) -> "Session":
"""Retrieve the session from the request context.
Expand Down
2 changes: 1 addition & 1 deletion advanced_alchemy/extensions/sanic/extension.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ def _get_session_from_request(
session = getattr(request.ctx, config.session_key, None)
if session is None:
setattr(request.ctx, config.session_key, config.get_session())
return cast(Union["Session", "AsyncSession"], session)
return cast("Union[Session, AsyncSession]", session)

def get_session(
self, request: "Request", key: Optional[str] = None
Expand Down
2 changes: 1 addition & 1 deletion advanced_alchemy/repository/_async.py
Original file line number Diff line number Diff line change
Expand Up @@ -1320,7 +1320,7 @@ async def count(
),
uniquify=loader_options_have_wildcard,
)
return cast(int, results.scalar_one())
return cast("int", results.scalar_one())

async def update(
self,
Expand Down
2 changes: 1 addition & 1 deletion advanced_alchemy/repository/_sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -1321,7 +1321,7 @@ def count(
),
uniquify=loader_options_have_wildcard,
)
return cast(int, results.scalar_one())
return cast("int", results.scalar_one())

def update(
self,
Expand Down
16 changes: 9 additions & 7 deletions advanced_alchemy/repository/memory/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,9 @@ def get(self, key: Any, default: type[_NotSet] = _NotSet) -> T: ...
@overload
def get(self, key: Any, default: AnyObject) -> "Union[T, AnyObject]": ...

def get(self, key: Any, default: "Union[AnyObject, type[_NotSet]]" = _NotSet) -> "Union[T, AnyObject]":
def get(
self, key: Any, default: "Union[AnyObject, type[_NotSet]]" = _NotSet
) -> "Union[T, AnyObject]": # pragma: no cover
"""Get the object identified by `key`, or return `default` if set or raise a `KeyError` otherwise

Args:
Expand All @@ -87,7 +89,7 @@ def get(self, key: Any, default: "Union[AnyObject, type[_NotSet]]" = _NotSet) ->
key = self._resolve_key(key)
except KeyError as error:
if isclass(default) and not issubclass(default, _NotSet): # pyright: ignore[reportUnnecessaryIsInstance]
return cast(AnyObject, default)
return cast("AnyObject", default)
raise KeyError from error
return self._store[key]

Expand Down Expand Up @@ -136,7 +138,7 @@ def remove_all(self) -> None:
class SQLAlchemyInMemoryStore(InMemoryStore[ModelT]):
id_attribute: str = "id"

def _update_relationship(self, data: ModelT, ref: ModelT) -> None:
def _update_relationship(self, data: ModelT, ref: ModelT) -> None: # pragma: no cover
"""Set relationship data fields targeting ref class to ref.

Example:
Expand Down Expand Up @@ -171,7 +173,7 @@ class Child(Base):
else:
setattr(data, relationship.key, ref)

def _update_fks(self, data: ModelT) -> None:
def _update_fks(self, data: ModelT) -> None: # pragma: no cover
"""Update foreign key fields according to their corresponding relationships.

This make sure that `data.child_id` == `data.child.id`
Expand Down Expand Up @@ -201,7 +203,7 @@ def _update_fks(self, data: ModelT) -> None:
setattr(data, local.key, remote_value)
self._update_relationship(value, data)

def _set_defaults(self, data: ModelT) -> None:
def _set_defaults(self, data: ModelT) -> None: # pragma: no cover
"""Set fields with dynamic defaults.

Args:
Expand Down Expand Up @@ -234,7 +236,7 @@ def _set_defaults(self, data: ModelT) -> None:
continue
setattr(data, elem.key, default_value)

def changed_attrs(self, data: ModelT) -> "Iterable[str]":
def changed_attrs(self, data: ModelT) -> "Iterable[str]": # pragma: no cover
res: list[str] = []
mapper = inspect(data)
if mapper is None:
Expand Down Expand Up @@ -271,7 +273,7 @@ def _new_instances(self, instance: ModelT) -> "Iterable[ModelT]":
session.expunge_all()
return relations

def _set_relationships_for_fks(self, data: ModelT) -> None:
def _set_relationships_for_fks(self, data: ModelT) -> None: # pragma: no cover
"""Set relationships matching newly added foreign keys on the instance.

Example:
Expand Down
66 changes: 58 additions & 8 deletions advanced_alchemy/service/_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,22 +112,46 @@ class ResultConverter:
@overload
def to_schema(
self,
data: ModelOrRowMappingT,
data: "ModelOrRowMappingT",
*,
schema_type: None = None,
) -> "ModelOrRowMappingT": ...

@overload
def to_schema(
self,
data: "Union[ModelProtocol, RowMapping]",
*,
schema_type: "type[ModelDTOT]",
) -> "ModelDTOT": ...

@overload
def to_schema(
self,
data: "ModelOrRowMappingT",
total: "Optional[int]" = None,
filters: "Union[Sequence[Union[StatementFilter, ColumnElement[bool]]], Sequence[StatementFilter], None]" = None,
*,
schema_type: None = None,
) -> ModelOrRowMappingT: ...
) -> "ModelOrRowMappingT": ...

@overload
def to_schema(
self,
data: "Sequence[ModelOrRowMappingT]",
data: "Union[ModelProtocol, RowMapping]",
total: "Optional[int]" = None,
*,
schema_type: "type[ModelDTOT]",
) -> "ModelDTOT": ...

@overload
def to_schema(
self,
data: "ModelOrRowMappingT",
total: "Optional[int]" = None,
filters: "Union[Sequence[Union[StatementFilter, ColumnElement[bool]]], Sequence[StatementFilter], None]" = None,
*,
schema_type: None = None,
) -> OffsetPagination[ModelOrRowMappingT]: ...
) -> "ModelOrRowMappingT": ...

@overload
def to_schema(
Expand All @@ -136,8 +160,34 @@ def to_schema(
total: "Optional[int]" = None,
filters: "Union[Sequence[Union[StatementFilter, ColumnElement[bool]]], Sequence[StatementFilter], None]" = None,
*,
schema_type: type[ModelDTOT],
) -> ModelDTOT: ...
schema_type: "type[ModelDTOT]",
) -> "ModelDTOT": ...

@overload
def to_schema(
self,
data: "Sequence[ModelOrRowMappingT]",
*,
schema_type: None = None,
) -> "OffsetPagination[ModelOrRowMappingT]": ...

@overload
def to_schema(
self,
data: "Union[Sequence[ModelProtocol], Sequence[RowMapping]]",
*,
schema_type: "type[ModelDTOT]",
) -> "OffsetPagination[ModelDTOT]": ...

@overload
def to_schema(
self,
data: "Sequence[ModelOrRowMappingT]",
total: "Optional[int]" = None,
filters: "Union[Sequence[Union[StatementFilter, ColumnElement[bool]]], Sequence[StatementFilter], None]" = None,
*,
schema_type: None = None,
) -> "OffsetPagination[ModelOrRowMappingT]": ...

@overload
def to_schema(
Expand All @@ -146,7 +196,7 @@ def to_schema(
total: "Optional[int]" = None,
filters: "Union[Sequence[Union[StatementFilter, ColumnElement[bool]]], Sequence[StatementFilter], None]" = None,
*,
schema_type: type[ModelDTOT],
schema_type: "type[ModelDTOT]",
) -> "OffsetPagination[ModelDTOT]": ...

def to_schema(
Expand Down
15 changes: 2 additions & 13 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ maintainers = [
name = "advanced_alchemy"
readme = "README.md"
requires-python = ">=3.9"
version = "0.34.0"
version = "1.0.0"

[project.urls]
Changelog = "https://docs.advanced-alchemy.litestar.dev/latest/changelog"
Expand Down Expand Up @@ -91,7 +91,6 @@ dev = [
]
doc = [
"auto-pytabs[sphinx]>=0.5.0",
"git-cliff>=2.6.1",
"shibuya",
"sphinx>=7.0.0; python_version <= \"3.9\"",
"sphinx>=8.0.0; python_version >= \"3.10\"",
Expand Down Expand Up @@ -159,7 +158,7 @@ test = [
allow_dirty = true
commit = false
commit_args = "--no-verify"
current_version = "0.34.0"
current_version = "1.0.0"
ignore_missing_files = false
ignore_missing_version = false
message = "chore(release): bump to v{new_version}"
Expand All @@ -178,16 +177,6 @@ filename = "pyproject.toml"
replace = 'version = "{new_version}"'
search = 'version = "{current_version}"'

[[tool.bumpversion.files]]
filename = "uv.lock"
replace = """
name = "advanced-alchemy"
version = "{new_version}"
"""
search = """
name = "advanced-alchemy"
version = "{current_version}"
"""

[build-system]
build-backend = "hatchling.build"
Expand Down
Loading