Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed TemplateResponse.cookies attribute and SimpleCookie type #1702

Merged
merged 3 commits into from
Dec 4, 2023

Conversation

apollo13
Copy link
Contributor

I have made things!

This definition makes it usable even in pyright's strict mode. See microsoft/pyright#5927 for details.

Related issues

None that I know off.

@adamchainz Does that make sense? :)

@flaeppe
Copy link
Member

flaeppe commented Sep 11, 2023

django.http.SimpleCookie is mentioned as backwards compatibility for 2.1. While the update here is correct. I'd suggest using http.cookies.SimpleCookie instead

@apollo13
Copy link
Contributor Author

@flaeppe What do you mean? Remove it from cookies.pyi and directly reference it in response.pyi?

Copy link
Member

@sobolevn sobolevn left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SimpleCookie is defined as generic in typeshed: https://github.com/python/typeshed/blob/32535ee8952dffecbe7a9fd04e5ed8ba0f1c8da2/stdlib/http/cookies.pyi#L60

So, let's make it generic here as well:

_T = TypeVar("_T")

SimpleCookie: TypeAlias = cookies.SimpleCookie[_T]

@apollo13
Copy link
Contributor Author

If I use a typevar then pyright complains:

  /home/florian/sources/unpoly/python-unpoly/test.py:7:13 - error: Type of "cookies" is partially unknown
    Type of "cookies" is "SimpleCookie[Unknown]" (reportUnknownMemberType)

@sobolevn
Copy link
Member

sobolevn commented Sep 11, 2023

Add a typevar to your code as well :)
Or a specific type argument.

@flaeppe
Copy link
Member

flaeppe commented Sep 11, 2023

@flaeppe What do you mean? Remove it from cookies.pyi and directly reference it in response.pyi?

I wasn't aware that it was used by other parts of the stubs. Do we really have to follow the alias for backwards compatibility in other parts of the stubs? All we really do is lose type information.

e.g. template/response.pyi uses http.cookies.SimpleCookie

I think we should declare http.cookies.SimpleCookie[str] for HttpResponseBase in http.response?

@apollo13
Copy link
Contributor Author

How would that look like. My code simply tries to do:

response.cookies["abc"].value

Want me to add an explicit cast around that? To be honest, the way cookies is used, Any is as good as any.

@flaeppe
Copy link
Member

flaeppe commented Sep 11, 2023

I think we should declare http.cookies.SimpleCookie[str] for HttpResponseBase in http.response?

Reason being that we've declared:

def set_cookie(
self,
key: str,

And

def set_signed_cookie(self, key: str, value: str, salt: str = ..., **kwargs: Any) -> None: ...

i.e. key: str correlating to the type argument of SimpleCookie

@apollo13
Copy link
Contributor Author

Does key: str really belong to the type argument? As far as I can tell that is passed down into Morsel and only used for coded_value, the key property is always str: https://github.com/python/typeshed/blob/32535ee8952dffecbe7a9fd04e5ed8ba0f1c8da2/stdlib/http/cookies.pyi#L31

But I have to admit that I do not know typing well enough (nor what coded_value actually is).

@flaeppe
Copy link
Member

flaeppe commented Sep 11, 2023

Oh, I see, my mistake. That's interesting, the documentation says this

Morsel.coded_value
The encoded value of the cookie — this is what should be sent.

But I only see that it's adjustable via Morsel.set. And Django only seem to use __setitem__. I guess it's SimpleCookie[Any] then, unless we can draw some other conclusion from value: str?

@flaeppe
Copy link
Member

flaeppe commented Sep 11, 2023

Or it's actually SimpleCookie[str] from the fact that Morsel.set isn't used. Might be even more true, at least right now.

@apollo13
Copy link
Contributor Author

I have no idea, both are fine for me. Just tell me if you want me to adjust the MR to str and if/what I should to with templates/response.pyi. Should they both import from django.http.cookies or should we utilize http.cookies from the stdlib directly.

@@ -1,5 +1,8 @@
from http import cookies
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
from http import cookies
from http.cookies import SimpleCookie as SimpleCookie

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That does not fix the issue though since then it will still we generic.

@flaeppe
Copy link
Member

flaeppe commented Sep 11, 2023

I have no idea, both are fine for me. Just tell me if you want me to adjust the MR to str and if/what I should to with templates/response.pyi. Should they both import from django.http.cookies or should we utilize http.cookies from the stdlib directly.

I think we should use SimpleCookie[str] on HttpResponseBase too. I also find it interesting that it's a TypeVar on SimpleCookie in typeshed, since the implementation seem to use string?

Ref: https://github.com/python/cpython/blob/1ee50e2a78f644d81d341a08562073ad169d8cc7/Lib/http/cookies.py#L607-L612

The documentation also only talks about strings regarding SimpleCookie

Ref: https://docs.python.org/3/library/http.cookies.html#http.cookies.SimpleCookie

But perhaps there's something else that I'm missing.

@adamchainz
Copy link
Contributor

adamchainz commented Sep 11, 2023

It may not be that typeshed is correct with the Generic there, it was added a long time ago in a "big updates" commit with little review: python/typeshed#248 .

@flaeppe
Copy link
Member

flaeppe commented Sep 11, 2023

I see, that explains it a bit, for the curious one I opened these 2 issues:

@apollo13
Copy link
Contributor Author

apollo13 commented Sep 13, 2023 via email

This definition makes it usable even in pyright's strict mode.
See microsoft/pyright#5927 for details.
from typing import Any

SimpleCookie: Any
from http.cookies import SimpleCookie as SimpleCookie
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we keep this or simply remove it?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's keep it as long as Django has this alias.

@apollo13
Copy link
Contributor Author

I have updated the PR to mostly use http.cookies.SimpleCookie directly. I think this would be the preferred approach now?

@sobolevn
Copy link
Member

We need to wait for the next mypy release

@intgr
Copy link
Collaborator

intgr commented Oct 17, 2023

We need to wait for the next mypy release

Mypy 1.6 was released last week and we have updated to it. Is this PR unblocked now?

@flaeppe
Copy link
Member

flaeppe commented Oct 17, 2023

Not at all sure how typeshed is released really, but this is the relevant commit. If that's useful: python/typeshed@c9bf034

1 similar comment
@flaeppe

This comment was marked as duplicate.

@intgr
Copy link
Collaborator

intgr commented Oct 17, 2023

Ah OK. The typeshed stdlib stubs aren't "released" per se, every mypy release includes a vendored copy of typeshed.

Unfortunately this change didn't make the cut for mypy 1.6: https://github.com/python/mypy/blob/v1.6.0/mypy/typeshed/stdlib/http/cookies.pyi#L60

But I heard mypy 1.7 should be out in a few weeks.

@intgr intgr added the blocked Blocked by some other PR, discussion or third party dependency. label Oct 17, 2023
@intgr
Copy link
Collaborator

intgr commented Oct 31, 2023

@intgr intgr added the pyright Related to pyright type checker label Nov 9, 2023
@intgr intgr changed the title Properly type SimpleCookie. Fix SimpleCookie type in pyright Nov 9, 2023
@intgr intgr changed the title Fix SimpleCookie type in pyright Fix SimpleCookie type Nov 9, 2023
@intgr intgr self-assigned this Nov 9, 2023
@intgr intgr mentioned this pull request Nov 10, 2023
@intgr intgr removed the blocked Blocked by some other PR, discussion or third party dependency. label Dec 4, 2023
@intgr intgr changed the title Fix SimpleCookie type Fixed TemplateResponse.cookies and SimpleCookie type Dec 4, 2023
@intgr intgr changed the title Fixed TemplateResponse.cookies and SimpleCookie type Fixed TemplateResponse.cookies attribute and SimpleCookie type Dec 4, 2023
@intgr intgr merged commit 9720b27 into typeddjango:master Dec 4, 2023
36 checks passed
descope bot added a commit to descope/django-descope that referenced this pull request Dec 30, 2023
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [django-stubs](https://togithub.com/typeddjango/django-stubs)
([changelog](https://togithub.com/typeddjango/django-stubs/releases)) |
dev | patch | `4.2.3` -> `4.2.7` |

---

### Release Notes

<details>
<summary>typeddjango/django-stubs (django-stubs)</summary>

###
[`v4.2.7`](https://togithub.com/typeddjango/django-stubs/releases/tag/4.2.7)

[Compare
Source](https://togithub.com/typeddjango/django-stubs/compare/4.2.6...4.2.7)

#### Headline changes

-   **mypy 1.7:** Recommended mypy version updated to 1.7.x
- Improved type inference for `ManyToManyField` and
`Model.<manytomany>.through`
- If you previously imported `RelatedManager` or `ManyRelatedManager`,
update those to django-stubs-ext:
`from django_stubs_ext.db.models.manager import ManyRelatedManager,
RelatedManager`
- It's now allowed to override Django's `@cached_property` properties
with class variables or `@property` properties.
- Even though Django 5.0 was released yesterday, this version does not
yet include any changes specific to Django 5.0.

#### Plugin improvements

- Improved `ManyToManyDescriptor` and fixed `Model.<manytomany>.through`
typing by [@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1805
- Fixed `Self`-typed custom queryset methods to be compatible with
`QuerySet` by [@&#8203;moranabadie](https://togithub.com/moranabadie) in
[typeddjango/django-stubs#1852

#### django-stubs-ext

- django-stubs-ext: Export `RelatedManager`, `ManyRelatedManager`
stub-only classes by [@&#8203;intgr](https://togithub.com/intgr) in
[typeddjango/django-stubs#1834
- Updated `TypedModelMeta` `ordering` attribute to allow `OrderBy`
objects by
[@&#8203;HansAarneLiblik](https://togithub.com/HansAarneLiblik) in
[typeddjango/django-stubs#1847

#### Stubs fixes

- Added missing `search_help_text=` parameter to `ChangeList.__init__()`
by [@&#8203;quinox](https://togithub.com/quinox) in
[typeddjango/django-stubs#1801
- Allow additional types for SQL parameters in `migrations.RunSQL()` by
[@&#8203;UnknownPlatypus](https://togithub.com/UnknownPlatypus) in
[typeddjango/django-stubs#1803
- Allow custom Form class in `SuccessMessageMixin.form_valid()` by
[@&#8203;SukiCZ](https://togithub.com/SukiCZ) in
[typeddjango/django-stubs#1812
- Fixed `db_comment=` parameter position for
`django.db.models.Field.__init__()` by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1815
- Added missing `RelatedField.__init__()` method and removed
`ForeignObject.__init__(db_constraint=)` parameter in Field constructors
by [@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1816
- Fixed argument types of `assertNumQueries()` and
`assertQuerySetEqual()` by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1823
- Fixed `get_deleted_objects()` return from `list[Model]` -> `list[str]`
by [@&#8203;golgor](https://togithub.com/golgor) in
[typeddjango/django-stubs#1825
- Removed incorrect `django.db.models` re-exports by
[@&#8203;intgr](https://togithub.com/intgr) in
[typeddjango/django-stubs#1835
- Fixed `TemplateResponse.cookies` attribute and `SimpleCookie` type by
[@&#8203;apollo13](https://togithub.com/apollo13) in
[typeddjango/django-stubs#1702

#### Stubs improvements

- Added stubs for `django.contrib.postgres.expressions` by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1765
- Improved hints of `django.contrib.gis.gdal.libgdal` by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1811
- Simulate `@deconstructible` as a mixin class by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1818
- Improved types for `django.db.models.enums.*` modules by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1819
- Added `BaseExpression.contains_subquery()` method (update to Django
4.2.7) by [@&#8203;intgr](https://togithub.com/intgr) in
[typeddjango/django-stubs#1827
- Improved types for multiple methods of `QuerySet` by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1822
- Improved `Collector` and `NestedObjects` attributes, methods by
[@&#8203;intgr](https://togithub.com/intgr) in
[typeddjango/django-stubs#1826
- Added `django.db.models.functions.MD5()` database function by
[@&#8203;kevinmarsh](https://togithub.com/kevinmarsh) in
[typeddjango/django-stubs#1830
- Constrained multiple `BaseModelAdmin` attributes to be either list or
tuple by [@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1832
- Constrained multiple `BaseModelAdmin` methods to return either list or
tuple by [@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1833
- Accurately infer `capfirst()` `None` return by
[@&#8203;intgr](https://togithub.com/intgr) in
[typeddjango/django-stubs#1842
- Various improvements in `django.core.management.commands` modules by
[@&#8203;UnknownPlatypus](https://togithub.com/UnknownPlatypus) in
[typeddjango/django-stubs#1829
- Added `Model._do_update()` method signature by
[@&#8203;pfouque](https://togithub.com/pfouque) in
[typeddjango/django-stubs#1854

##### Stubs improvements: @&#8203;cached_property

- Reuse `functools.cached_property` definition instead of defining our
own by [@&#8203;intgr](https://togithub.com/intgr) in
[typeddjango/django-stubs#1771
- Updated `@property` attributes to `@cached_property` part 1 by
[@&#8203;UnknownPlatypus](https://togithub.com/UnknownPlatypus) in
[typeddjango/django-stubs#1761
- Updated `@property` attributes to `@cached_property` part 2 by
[@&#8203;UnknownPlatypus](https://togithub.com/UnknownPlatypus) in
[typeddjango/django-stubs#1768
- Updated Expression classes `output_field` to `@cached_property` or
`ClassVar` and improves type by
[@&#8203;UnknownPlatypus](https://togithub.com/UnknownPlatypus) in
[typeddjango/django-stubs#1769

#### Housekeeping

- Moved plugin generated `<Model>_RelatedManager` entries to allowlist
by [@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1806
- Moved `RelatedManager` to
`django.db.models.fields.related_descriptors` by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1814
- Restored `RelatedManager`, `ManyRelatedManager` to inherit from
`Manager` not `BaseManager` by
[@&#8203;intgr](https://togithub.com/intgr) in
[typeddjango/django-stubs#1843
- Upgraded to mypy 1.7.0 by [@&#8203;intgr](https://togithub.com/intgr)
in
[typeddjango/django-stubs#1837
- Unify plugin check for model type info by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1853
- Version 4.2.7 release (django-stubs, django-stubs-ext) by
[@&#8203;intgr](https://togithub.com/intgr) in
[typeddjango/django-stubs#1856

#### New Contributors

- [@&#8203;SukiCZ](https://togithub.com/SukiCZ) made their first
contribution in
[typeddjango/django-stubs#1812
- [@&#8203;golgor](https://togithub.com/golgor) made their first
contribution in
[typeddjango/django-stubs#1825
- [@&#8203;HansAarneLiblik](https://togithub.com/HansAarneLiblik) made
their first contribution in
[typeddjango/django-stubs#1847
- [@&#8203;apollo13](https://togithub.com/apollo13) made their first
contribution in
[typeddjango/django-stubs#1702
- [@&#8203;pfouque](https://togithub.com/pfouque) made their first
contribution in
[typeddjango/django-stubs#1854

**Full Changelog**:
typeddjango/django-stubs@4.2.6...4.2.7

###
[`v4.2.6`](https://togithub.com/typeddjango/django-stubs/releases/tag/4.2.6)

[Compare
Source](https://togithub.com/typeddjango/django-stubs/compare/4.2.5...4.2.6)

#### Headline changes

- Fixed several bugs in version 4.2.5. Thanks to everyone for
contributing fixes on a short order!
- Removed direct mypy dependency. If you are using mypy, please add an
explicit `mypy` dev dependency to your project, or install django-stubs
with the extra `django-stubs[compatible-mypy]`.

Mypy remains **the only supported type checker**. Improvements for other
type checkers may be considered in the future, pull requests welcome.
See
[#&#8203;1628](https://togithub.com/typeddjango/django-stubs/issues/1628)
for details.

#### Plugin fixes

- Fixed `as_manager()` and `from_queryset()` when combined with `Self`
types
([#&#8203;1788](https://togithub.com/typeddjango/django-stubs/issues/1788))
by [@&#8203;moranabadie](https://togithub.com/moranabadie) in
[typeddjango/django-stubs#1789
- Fix IndexError crash when using `from_queryset()` of custom Manager
subclass by [@&#8203;moranabadie](https://togithub.com/moranabadie) in
[typeddjango/django-stubs#1786
- Revert "Use `parse_bool` implementation from mypy" by
[@&#8203;intgr](https://togithub.com/intgr) in
[typeddjango/django-stubs#1792
    (Turns out this was not necessary and will be reverted)

#### Stubs fixes

- Fixed `Field.formfield()`, `GeometryField.formfield()` method
arguments by [@&#8203;brianhelba](https://togithub.com/brianhelba) in
[typeddjango/django-stubs#1778

#### Stubs improvements

- Various improvements in `django.core.management` modules by
[@&#8203;UnknownPlatypus](https://togithub.com/UnknownPlatypus) in
[typeddjango/django-stubs#1787
- Various improvments in `django.db.backend.base` modules by
[@&#8203;UnknownPlatypus](https://togithub.com/UnknownPlatypus) in
[typeddjango/django-stubs#1791

#### Housekeeping

- Drop hard dependency on mypy by
[@&#8203;intgr](https://togithub.com/intgr) in
[typeddjango/django-stubs#1782
- Version 4.2.6 release (django-stubs only) by
[@&#8203;intgr](https://togithub.com/intgr) in
[typeddjango/django-stubs#1794

**Full Changelog**:
typeddjango/django-stubs@4.2.5...4.2.6

###
[`v4.2.5`](https://togithub.com/typeddjango/django-stubs/releases/tag/4.2.5)

[Compare
Source](https://togithub.com/typeddjango/django-stubs/compare/4.2.4...4.2.5)

#### Headline changes

-   **mypy 1.6:** Recommended mypy version updated to 1.6.x
- Next django-stubs version (4.2.6) will remove direct mypy dependency.
If you are using mypy, please add an explicit `mypy` dev dependency to
your project, or install django-stubs with the extra
`django-stubs[compatible-mypy]`.

Mypy remains **the only supported type checker**. Improvements for other
type checkers may be considered in the future, pull requests welcome.
See
[#&#8203;1628](https://togithub.com/typeddjango/django-stubs/issues/1628)
for details.
-   Officially added Python 3.12 support

#### Stubs fixes

- Made `default_storage` produce a `Storage` object by
[@&#8203;brianhelba](https://togithub.com/brianhelba) in
[typeddjango/django-stubs#1665
- Fixed wrong type hints for `SyndicationFeed` methods by
[@&#8203;WhyNotHugo](https://togithub.com/WhyNotHugo) in
[typeddjango/django-stubs#1705
- Fixed variance of `Migration.operations` attribute by
[@&#8203;asottile](https://togithub.com/asottile) in
[typeddjango/django-stubs#1707
- Fixed variance of all `Migration` list attributes by
[@&#8203;brianhelba](https://togithub.com/brianhelba) in
[typeddjango/django-stubs#1710
- Adjust `bases=` parameter in `CreateModel` migration op to allow for
mixins by [@&#8203;asottile](https://togithub.com/asottile) in
[typeddjango/django-stubs#1708
- Fixed `_Composable` protocol for compatibility with `psycopg2-stubs`
change by [@&#8203;andersk](https://togithub.com/andersk) in
[typeddjango/django-stubs#1714
- Various fixes and improvements in `django.views` modules by
[@&#8203;GabDug](https://togithub.com/GabDug) in
[typeddjango/django-stubs#1716
- Removed `null` and `validators` arguments from
`ManyToManyField.__init__` by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1720
- Various fixes and improvements in `django.test` modules by
[@&#8203;UnknownPlatypus](https://togithub.com/UnknownPlatypus) in
[typeddjango/django-stubs#1752
- Fixed `BaseModelForm`, `ErrorList`, `ErrorDict` constructor
`renderer=` parameter by [@&#8203;GabDug](https://togithub.com/GabDug)
in
[typeddjango/django-stubs#1690

#### Stubs improvements

- Annotated return value of all `deconstruct` methods by
[@&#8203;brianhelba](https://togithub.com/brianhelba) in
[typeddjango/django-stubs#1695
- Added missing arguments to `SQLCompiler` methods by
[@&#8203;ashm-tech](https://togithub.com/ashm-tech) in
[typeddjango/django-stubs#1689
- Added missing `max_length` attribute to `forms.FileField` by
[@&#8203;GabDug](https://togithub.com/GabDug) in
[typeddjango/django-stubs#1715
- Added missing type arguments to various generic classes by
[@&#8203;GabDug](https://togithub.com/GabDug) in
[typeddjango/django-stubs#1717
- Added missing `Layer.num_feat` attribute (GeoDjango) by
[@&#8203;niconoe](https://togithub.com/niconoe) in
[typeddjango/django-stubs#1722
- Specify `AbstractBaseUser.REQUIRED_FIELDS` as `ClassVar` by
[@&#8203;WhyNotHugo](https://togithub.com/WhyNotHugo) in
[typeddjango/django-stubs#1737
- Improve `fields.Field.formfield()` method by
[@&#8203;WhyNotHugo](https://togithub.com/WhyNotHugo) in
[typeddjango/django-stubs#1739
- Added `ModelStateFieldsCacheDescriptor.__get__` method by
[@&#8203;asottile](https://togithub.com/asottile) in
[typeddjango/django-stubs#1743
- Update `Model._meta` to `ClassVar[Options[Self]]` by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1732
- Improved `django.test.signals` types by
[@&#8203;UnknownPlatypus](https://togithub.com/UnknownPlatypus) in
[typeddjango/django-stubs#1751
- Updated Django to 4.2.6 and updated stubs by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[typeddjango/django-stubs#1757
- Require 1 callable argument for `@cached_property` decorated method by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1766
- Allow `psycopg2.sql.SQL` in `QuerySet.raw()` by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1767
- Added missing stubs in `django.middleware.csrf` module by
[@&#8203;UnknownPlatypus](https://togithub.com/UnknownPlatypus) in
[typeddjango/django-stubs#1770
- Various improvements in `django.core.cache` modules by
[@&#8203;UnknownPlatypus](https://togithub.com/UnknownPlatypus) in
[typeddjango/django-stubs#1774
- Improved `Field.formfield()`, `GeometryField.formfield()` methods by
[@&#8203;brianhelba](https://togithub.com/brianhelba) in
[typeddjango/django-stubs#1724
- Fixed query `F.resolve_expression()` return type by
[@&#8203;schinckel](https://togithub.com/schinckel) in
[typeddjango/django-stubs#1659

#### Plugin improvements

- Resolve dynamic `Manager` methods through manager MRO by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1701
- Use `functools.cached_property` instead of Django's in mypy plugin by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1721
- Improved hints for `ReverseOneToOneDescriptor` and start using it by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1733
- Add better support for `ManyToManyField`'s `through` model by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1719
- Resolve any `settings.AUTH_USER_MODEL` used as `to=` in relation by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1746
- Added missing `_default_manager` symbol to generated `through` model
by [@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1745

#### Plugin crash fixes

- Gracefully handle unwanted types when creating fallback managers by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1728
    Fixes some `AssertionError` crashes.
- Handle mismatching types in queryset method resolving gracefully by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1727
    Fixes some `AssertionError` crashes.
- Fixed crash on bad arguments for model relationship fields by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1735
    Fixes some `ValueError` crashes.

#### Documentation

- Fixed link to `django_stubs_ext` by
[@&#8203;tony](https://togithub.com/tony) in
[typeddjango/django-stubs#1747
&
[typeddjango/django-stubs#1748
- Add version 4.2.4 to version compatibility table by
[@&#8203;intgr](https://togithub.com/intgr) in
[typeddjango/django-stubs#1758

#### Housekeeping

- Removed a bunch of unused code by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1687
- Removed redefinition of inherited `deconstruct` methods. by
[@&#8203;brianhelba](https://togithub.com/brianhelba) in
[typeddjango/django-stubs#1693
&
[typeddjango/django-stubs#1694
- Use `parse_bool` implementation from mypy by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1703
- Specify error codes in `# type: ignore` comments for plugin code by
[@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1726
- Specify error codes in `# type: ignore` comments in stubs files by
[@&#8203;UnknownPlatypus](https://togithub.com/UnknownPlatypus) in
[typeddjango/django-stubs#1734
- CI: Enable testing with Python 3.12 by
[@&#8203;intgr](https://togithub.com/intgr) in
[typeddjango/django-stubs#1759
- Bump mypy from 1.5.1 to 1.6.0 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[typeddjango/django-stubs#1764
- Tests: Add mypy error codes to typecheck by
[@&#8203;UnknownPlatypus](https://togithub.com/UnknownPlatypus) in
[typeddjango/django-stubs#1773
- chore: Migrate from flake8 to ruff by
[@&#8203;GabDug](https://togithub.com/GabDug) in
[typeddjango/django-stubs#1718
- Update black version by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[typeddjango/django-stubs#1776
- Added test to verify that `Manager.from_queryset()` handles invalid
argument types by [@&#8203;flaeppe](https://togithub.com/flaeppe) in
[typeddjango/django-stubs#1731
- Version 4.2.5 release (django-stubs, django-stubs-ext) by
[@&#8203;intgr](https://togithub.com/intgr) in
[typeddjango/django-stubs#1777

#### New Contributors

- [@&#8203;ashm-tech](https://togithub.com/ashm-tech) made their first
contribution in
[typeddjango/django-stubs#1689
- [@&#8203;WhyNotHugo](https://togithub.com/WhyNotHugo) made their first
contribution in
[typeddjango/django-stubs#1705
- [@&#8203;niconoe](https://togithub.com/niconoe) made their first
contribution in
[typeddjango/django-stubs#1722
- [@&#8203;schinckel](https://togithub.com/schinckel) made their first
contribution in
[typeddjango/django-stubs#1659

**Full Changelog**:
typeddjango/django-stubs@4.2.4...4.2.5

###
[`v4.2.4`](https://togithub.com/typeddjango/django-stubs/releases/tag/4.2.4)

[Compare
Source](https://togithub.com/typeddjango/django-stubs/compare/4.2.3...4.2.4)

Most important changes:

- This version add Mypy `1.5.*` support and update `[compatible-mypy]`
extra to use `1.5.*`.
- We also update our stubs to be compatible with Django `4.2.5` (and all
prior versions of `4.2`).
- `django_stubs_ext/` folder was renamed to be just `ext/`, it should
not affect users (unless you install it from git)
- We no longer assume the `objects` attribute to be present on generic
Model classes. As per the [django
documentation](https://docs.djangoproject.com/en/4.2/topics/db/managers/#django.db.models.Model.\_default_manager),
code working with generic models should use the `_default_manager`
attribute instead.

This time there is no corresponding release of `django-stubs-ext`.

#### Plugin changes

- We now forbid to instantiate abstract models
[typeddjango/django-stubs#1663
[@&#8203;flaeppe](https://togithub.com/flaeppe)
- Manager attributes are now `ClassVar`s
[typeddjango/django-stubs#1672
[@&#8203;flaeppe](https://togithub.com/flaeppe)

Thanks a lot to all contributors and maintainers! 🎉

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Renovate
Bot](https://togithub.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy42NC4yIiwidXBkYXRlZEluVmVyIjoiMzcuNjQuMiIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->

Co-authored-by: descope[bot] <descope[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
pyright Related to pyright type checker
Development

Successfully merging this pull request may close these issues.

5 participants