sqlakit 0.17.0__tar.gz → 0.18.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. {sqlakit-0.17.0 → sqlakit-0.18.0}/PKG-INFO +1 -1
  2. {sqlakit-0.17.0 → sqlakit-0.18.0}/pyproject.toml +1 -1
  3. {sqlakit-0.17.0 → sqlakit-0.18.0}/pyproject.toml.orig +1 -1
  4. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/asyncio/orm.py +17 -1
  5. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/orm.py +17 -1
  6. {sqlakit-0.17.0 → sqlakit-0.18.0}/LICENSE +0 -0
  7. {sqlakit-0.17.0 → sqlakit-0.18.0}/README.md +0 -0
  8. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/__init__.py +0 -0
  9. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/_base.py +0 -0
  10. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/_cli.py +0 -0
  11. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/_db.py +0 -0
  12. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/_debugserver.py +0 -0
  13. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/_discovery.py +0 -0
  14. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/_model.py +0 -0
  15. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/_query.py +0 -0
  16. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/_recording.py +0 -0
  17. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/_registry.py +0 -0
  18. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/_routing.py +0 -0
  19. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/_sql.py +0 -0
  20. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/asyncio/__init__.py +0 -0
  21. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/asyncio/_db.py +0 -0
  22. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/asyncio/_registry.py +0 -0
  23. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/asyncio/sql.py +0 -0
  24. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/debugserver.html +0 -0
  25. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/exceptions.py +0 -0
  26. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/py.typed +0 -0
  27. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/pytest_plugin.py +0 -0
  28. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/sql.py +0 -0
  29. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/testing.py +0 -0
  30. {sqlakit-0.17.0 → sqlakit-0.18.0}/sqlakit/types.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sqlakit
3
- Version: 0.17.0
3
+ Version: 0.18.0
4
4
  Summary: A toolkit for SQLAlchemy applications.
5
5
  Keywords: sqlalchemy,database,orm,sql,asyncio
6
6
  Author: Anton Ruhlov
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sqlakit"
3
- version = "0.17.0"
3
+ version = "0.18.0"
4
4
  description = "A toolkit for SQLAlchemy applications."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "sqlakit"
3
- version = "0.17.0"
3
+ version = "0.18.0"
4
4
  description = "A toolkit for SQLAlchemy applications."
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -545,12 +545,28 @@ class QueryDescriptor(Generic[QueryT]):
545
545
 
546
546
  query = QueryDescriptor(AppQuery)
547
547
  ```
548
+
549
+ Given `Query` itself, as `ModelMixin` does, it reads as a query of the model
550
+ it is read from: `User.query` is a `Query[User]`, so `User.query.get(1)` is
551
+ a `User | None`.
548
552
  """
549
553
 
550
554
  def __init__(self, query_class: type[QueryT]) -> None:
551
555
  self.query_class = query_class
552
556
 
553
- def __get__(self, instance: object | None, owner: type[Any]) -> QueryT:
557
+ # `ClassVar` cannot hold a type variable, so the base declares the query
558
+ # every model has and a read narrows it to the model it is read from.
559
+ @overload
560
+ def __get__(
561
+ self: QueryDescriptor[Query[Any]],
562
+ instance: object | None,
563
+ owner: type[ModelT],
564
+ ) -> Query[ModelT]: ...
565
+
566
+ @overload
567
+ def __get__(self, instance: object | None, owner: type[Any]) -> QueryT: ...
568
+
569
+ def __get__(self, instance: object | None, owner: type[Any]) -> Query[Any]:
554
570
  return self.query_class(owner, owner.db)
555
571
 
556
572
 
@@ -533,12 +533,28 @@ class QueryDescriptor(Generic[QueryT]):
533
533
 
534
534
  query = QueryDescriptor(AppQuery)
535
535
  ```
536
+
537
+ Given `Query` itself, as `ModelMixin` does, it reads as a query of the model
538
+ it is read from: `User.query` is a `Query[User]`, so `User.query.get(1)` is
539
+ a `User | None`.
536
540
  """
537
541
 
538
542
  def __init__(self, query_class: type[QueryT]) -> None:
539
543
  self.query_class = query_class
540
544
 
541
- def __get__(self, instance: object | None, owner: type[Any]) -> QueryT:
545
+ # `ClassVar` cannot hold a type variable, so the base declares the query
546
+ # every model has and a read narrows it to the model it is read from.
547
+ @overload
548
+ def __get__(
549
+ self: QueryDescriptor[Query[Any]],
550
+ instance: object | None,
551
+ owner: type[ModelT],
552
+ ) -> Query[ModelT]: ...
553
+
554
+ @overload
555
+ def __get__(self, instance: object | None, owner: type[Any]) -> QueryT: ...
556
+
557
+ def __get__(self, instance: object | None, owner: type[Any]) -> Query[Any]:
542
558
  return self.query_class(owner, owner.db)
543
559
 
544
560
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes