Skip to content

Various fixes for Django 4.2 #1536

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

Merged
merged 12 commits into from
Jun 20, 2023
Merged

Conversation

Alexerson
Copy link
Contributor

@Alexerson Alexerson commented Jun 7, 2023

I’m adding more Django 4.2 new types. I’m picking up the easier ones, and rather than having 5 one-line PR, I figured I would have them all in there. Let me know if you see things to fix I missed.

My strategy is to start from the stubgen output, so I’m also adding the new fields from 4.1 (or before) that are missing in the files I’m editing.

Related issues

@Alexerson
Copy link
Contributor Author

Alexerson commented Jun 7, 2023

I’m trying to improve the signature for NegatedExpression, but the current proposition is the best I can do, and it’s a bit disappointing. I’ll try again tomorrow if noone jumped in.

Also, I wanted Combinable.__invert__ to be -> NegatedExpression, because that would be logical with the implementation, but it causes all sort of issues that I don’t know how to fix.

@Alexerson Alexerson mentioned this pull request Jun 7, 2023
30 tasks
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.

Thanks!

We also tend to add "stub" generics to django-stubs-ext to monkeypatch them.

@Alexerson
Copy link
Contributor Author

We also tend to add "stub" generics to django-stubs-ext to monkeypatch them.

Ok, I need to look into this.

@intgr intgr changed the title More django 4.2 fixes More Django 4.2 fixes Jun 15, 2023
@intgr
Copy link
Collaborator

intgr commented Jun 16, 2023

Not to rush you, but I'd like to make a release soonish (#1550), and most changes in this MR look good.

Maybe we can defer NegatedExpression and ExpressionWrapper to a separate PR and merge this?

@Alexerson
Copy link
Contributor Author

I'll have some time this morning. Either I finalize it, or I'll move it to a separate PR!

@Alexerson
Copy link
Contributor Author

Ok, so I added some type: ignore. I believe they make sense. I’m not 100% sure how to add the generics to django-stubs-ext though, if someone can show me the way (maybe in another PR so we can close this?).

@intgr
Copy link
Collaborator

intgr commented Jun 16, 2023

For monkeypatching you just need to add the classes to this list: https://github.com/typeddjango/django-stubs/blob/master/django_stubs_ext/django_stubs_ext/patch.py#L49-L74

Copy link
Collaborator

@intgr intgr left a comment

Choose a reason for hiding this comment

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

Awesome! One minor issue, looks minor enough that I can apply the fix myself and then it's good to go.

def __init__(self, expression: _E, output_field: Field) -> None: ...
expression: _E

class NegatedExpression(ExpressionWrapper, Generic[_E]):
Copy link
Collaborator

Choose a reason for hiding this comment

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

If you do it like this, then the _E argument of ExpressionWrapper and _E argument of NegatedExpression won't be connected.

For example since .expression member comes from ExpressionWrapper

from django.db.models.expressions import NegatedExpression, Exists
x: NegatedExpression[Exists]
reveal_type(x.expression)  # note: Revealed type is "Any"

This fixes it:

Suggested change
class NegatedExpression(ExpressionWrapper, Generic[_E]):
class NegatedExpression(ExpressionWrapper[_E]):

Copy link
Collaborator

Choose a reason for hiding this comment

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

This kind of mistake would be harder to make if we used disallow_any_generics (#1339)

@@ -8,6 +8,7 @@
from django.contrib.syndication.views import Feed
from django.core.files.utils import FileProxyMixin
from django.core.paginator import Paginator
from django.db.models.expressions import ExpressionWrapper, NegatedExpression
Copy link
Collaborator

@intgr intgr Jun 18, 2023

Choose a reason for hiding this comment

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

Oof, this import will fail with Django 4.1 and earlier, since NegatedExpression class only appeared in 4.2.

Also we clearly have a blind spot in our CI since it didn't detect this.

@sobolevn Any ideas how to handle backwards compatibility in django-stubs-ext monkeypatching?

Copy link
Collaborator

Choose a reason for hiding this comment

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

PR #1552 will add CI coverage for such surprises.

Copy link
Collaborator

Choose a reason for hiding this comment

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

Anyway I'd remove NegatedExpression monkeypatching for now, to unblock this PR again.

I've created issue #1555 to solve it in the future.

Copy link
Collaborator

@intgr intgr left a comment

Choose a reason for hiding this comment

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

Let's get this merged finally.

@intgr intgr changed the title More Django 4.2 fixes Various fixes for Django 4.2 Jun 20, 2023
@intgr intgr merged commit 5ad4d1c into typeddjango:master Jun 20, 2023
descope bot referenced this pull request in descope/django-descope Jul 18, 2023
This PR contains the following updates:

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

---

### Release Notes

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

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

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

#### Headline changes

-   **mypy 1.4:** Recommended mypy version updated to 1.4.x
- Support for `django-split-settings`, `django-configurations` and other
Django settings addons with `strict_settings = false` option, [see
README for
details](https://togithub.com/typeddjango/django-stubs#how-to-use-a-custom-library-to-handle-django-settings)
- We have now adopted [mypy's
stubtest](https://mypy.readthedocs.io/en/stable/stubtest.html) to
automatically find discrepancies between Django and django-stubs.

If you want to contribute to django-stubs but are not sure where to
start, have a look at [stubtest's TODO
list](https://togithub.com/typeddjango/django-stubs/blob/master/scripts/stubtest/allowlist_todo.txt)
file, which lists the many issues discovered by stubtest.

##### Django 4.2 changes

- Applied Django 4.2 deprecations by
[@&#8203;Alexerson](https://togithub.com/Alexerson) in
[https://github.com/typeddjango/django-stubs/pull/1523](https://togithub.com/typeddjango/django-stubs/pull/1523)
- Updated global settings and `AppConfig` class to match Django 4.2 by
[@&#8203;Alexerson](https://togithub.com/Alexerson) in
[https://github.com/typeddjango/django-stubs/pull/1524](https://togithub.com/typeddjango/django-stubs/pull/1524)
- Added types for new 'system checks' in Django 4.2 by
[@&#8203;Alexerson](https://togithub.com/Alexerson) in
[https://github.com/typeddjango/django-stubs/pull/1526](https://togithub.com/typeddjango/django-stubs/pull/1526)
- Added `ManifestStaticFilesStorage` new parameters by
[@&#8203;Alexerson](https://togithub.com/Alexerson) in
[https://github.com/typeddjango/django-stubs/pull/1528](https://togithub.com/typeddjango/django-stubs/pull/1528)
- Added new methods to `Sitemap` class by
[@&#8203;Alexerson](https://togithub.com/Alexerson) in
[https://github.com/typeddjango/django-stubs/pull/1527](https://togithub.com/typeddjango/django-stubs/pull/1527)
- Added new `headers=` parameter to `(Async)RequestFactory` and
`(Async)Client` classes by
[@&#8203;Alexerson](https://togithub.com/Alexerson) in
[https://github.com/typeddjango/django-stubs/pull/1529](https://togithub.com/typeddjango/django-stubs/pull/1529)
- Additional fixes by [@&#8203;intgr](https://togithub.com/intgr) in
[https://github.com/typeddjango/django-stubs/pull/1537](https://togithub.com/typeddjango/django-stubs/pull/1537)
- GDAL-related GeoDjango updates in Django 4.2 by
[@&#8203;Alexerson](https://togithub.com/Alexerson) in
[https://github.com/typeddjango/django-stubs/pull/1525](https://togithub.com/typeddjango/django-stubs/pull/1525)
- Added ORM `^` and `~` operator support, JSON lookup classes, Postgres
lookup classes, `ModelForm` changes, `json_script` template filter
parameters by [@&#8203;Alexerson](https://togithub.com/Alexerson) in
[https://github.com/typeddjango/django-stubs/pull/1536](https://togithub.com/typeddjango/django-stubs/pull/1536)
- Added and updated `db.backends` `DatabaseIntrospection` and
`DatabaseOperations` classes by
[@&#8203;GabDug](https://togithub.com/GabDug) in
[https://github.com/typeddjango/django-stubs/pull/1571](https://togithub.com/typeddjango/django-stubs/pull/1571)

##### Stubs additions

- Added `QuerySet._result_cache` attribute and `_fetch_all()` method by
[@&#8203;adamchainz](https://togithub.com/adamchainz) in
[https://github.com/typeddjango/django-stubs/pull/1505](https://togithub.com/typeddjango/django-stubs/pull/1505)
- Added `ModelAdmin.search_help_text` attribute by
[@&#8203;adamchainz](https://togithub.com/adamchainz) in
[https://github.com/typeddjango/django-stubs/pull/1546](https://togithub.com/typeddjango/django-stubs/pull/1546)
- Added email console handler `EmailBackend.write_message()` method by
[@&#8203;adamchainz](https://togithub.com/adamchainz) in
[https://github.com/typeddjango/django-stubs/pull/1547](https://togithub.com/typeddjango/django-stubs/pull/1547)
- Added `ModelAdmin.get_formset_kwargs()` method by
[@&#8203;adamchainz](https://togithub.com/adamchainz) in
[https://github.com/typeddjango/django-stubs/pull/1545](https://togithub.com/typeddjango/django-stubs/pull/1545)
- Added `Signal._live_receivers()` method by
[@&#8203;adamchainz](https://togithub.com/adamchainz) in
[https://github.com/typeddjango/django-stubs/pull/1551](https://togithub.com/typeddjango/django-stubs/pull/1551)
- Added `SQLCompiler._order_by_pairs()` method by
[@&#8203;adamchainz](https://togithub.com/adamchainz) in
[https://github.com/typeddjango/django-stubs/pull/1586](https://togithub.com/typeddjango/django-stubs/pull/1586)
- Added `memcache_key_warnings()` function by
[@&#8203;rvanlaar](https://togithub.com/rvanlaar) in
[https://github.com/typeddjango/django-stubs/pull/1562](https://togithub.com/typeddjango/django-stubs/pull/1562)

##### Stubs fixes

- Fixed `create_model_instance` incorrect data argument type by
[@&#8203;namper](https://togithub.com/namper) in
[https://github.com/typeddjango/django-stubs/pull/1521](https://togithub.com/typeddjango/django-stubs/pull/1521)
- Marked `RequestSite.{save,delete}` methods as `NoReturn` since they
always raise by [@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/1530](https://togithub.com/typeddjango/django-stubs/pull/1530)
- Updated `SafeExceptionReporterFilter` attributes and removed obsolete
`CLEANSED_SUBSTITUTE` by
[@&#8203;mthuurne](https://togithub.com/mthuurne) in
[https://github.com/typeddjango/django-stubs/pull/1540](https://togithub.com/typeddjango/django-stubs/pull/1540)
- Changed `AppConfig.default_auto_field` to attribute instead of method
by [@&#8203;mthuurne](https://togithub.com/mthuurne) in
[https://github.com/typeddjango/django-stubs/pull/1541](https://togithub.com/typeddjango/django-stubs/pull/1541)
- Fixed `default_error_messages` attribute type of base `Field` and
`GenericIPAddressField` classes by
[@&#8203;asottile](https://togithub.com/asottile) in
[https://github.com/typeddjango/django-stubs/pull/1538](https://togithub.com/typeddjango/django-stubs/pull/1538)
- Improved spatialite `DatabaseWrapper` attributes by
[@&#8203;filbasi](https://togithub.com/filbasi) in
[https://github.com/typeddjango/django-stubs/pull/1544](https://togithub.com/typeddjango/django-stubs/pull/1544)
- Improved types for Signal `dispatch.dispatcher` by
[@&#8203;GabDug](https://togithub.com/GabDug) in
[https://github.com/typeddjango/django-stubs/pull/1567](https://togithub.com/typeddjango/django-stubs/pull/1567)
- Accept `str` field names for `Window.order_by()`, allow `None` for
`asc/desc` arguments by [@&#8203;GabDug](https://togithub.com/GabDug) in
[https://github.com/typeddjango/django-stubs/pull/1574](https://togithub.com/typeddjango/django-stubs/pull/1574)
- Updated many `django.utils.*` types from stubtest by
[@&#8203;GabDug](https://togithub.com/GabDug) in
[https://github.com/typeddjango/django-stubs/pull/1575](https://togithub.com/typeddjango/django-stubs/pull/1575)
- Updated many `db.migrations.operations` types from stubtest by
[@&#8203;GabDug](https://togithub.com/GabDug) in
[https://github.com/typeddjango/django-stubs/pull/1583](https://togithub.com/typeddjango/django-stubs/pull/1583)
- Added `StepValueValidator`, fixed argument for
`SRIDCacheEntry`/`EmailValidator`, improved `urls.resolvers` types by
[@&#8203;GabDug](https://togithub.com/GabDug) in
[https://github.com/typeddjango/django-stubs/pull/1589](https://togithub.com/typeddjango/django-stubs/pull/1589)

##### Plugin changes

- Fixed `ForeignKey` queryset filters on un-swapped models by
[@&#8203;UnknownPlatypus](https://togithub.com/UnknownPlatypus) in
[https://github.com/typeddjango/django-stubs/pull/1495](https://togithub.com/typeddjango/django-stubs/pull/1495)
- Add `strict_settings` option, allow runtime fallbacks for custom
settings by [@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/1557](https://togithub.com/typeddjango/django-stubs/pull/1557)
- Add "Settings" section to README by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/1581](https://togithub.com/typeddjango/django-stubs/pull/1581)
- Automatically reset mypy cache when plugin settings change by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/1578](https://togithub.com/typeddjango/django-stubs/pull/1578)
- Fixed unhandled exception `KeyError: 'model_bases'` and related errors
by [@&#8203;intgr](https://togithub.com/intgr) in
[https://github.com/typeddjango/django-stubs/pull/1563](https://togithub.com/typeddjango/django-stubs/pull/1563)

##### django-stubs-ext

- Added `TypedDatabaseRouter` as database router base class by
[@&#8203;intgr](https://togithub.com/intgr) in
[https://github.com/typeddjango/django-stubs/pull/1522](https://togithub.com/typeddjango/django-stubs/pull/1522)

##### CI/testing

- CI: Replace isort with Ruff import sorting by
[@&#8203;intgr](https://togithub.com/intgr) in
[https://github.com/typeddjango/django-stubs/pull/1507](https://togithub.com/typeddjango/django-stubs/pull/1507)
- CI: Auto-remove unused imports using Ruff by
[@&#8203;intgr](https://togithub.com/intgr) in
[https://github.com/typeddjango/django-stubs/pull/1508](https://togithub.com/typeddjango/django-stubs/pull/1508)
- CI: Enable Ruff pyupgrade fixes by
[@&#8203;intgr](https://togithub.com/intgr) in
[https://github.com/typeddjango/django-stubs/pull/1509](https://togithub.com/typeddjango/django-stubs/pull/1509)
- CI: Run django-stubs-ext tests in full build matrix by
[@&#8203;intgr](https://togithub.com/intgr) in
[https://github.com/typeddjango/django-stubs/pull/1552](https://togithub.com/typeddjango/django-stubs/pull/1552)
- Remove typecheck test and clean things up by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/1556](https://togithub.com/typeddjango/django-stubs/pull/1556)
- Add stubtest with lots of errors (currently) by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/1560](https://togithub.com/typeddjango/django-stubs/pull/1560)
- Removed extra `--generate-allowlist` by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/1576](https://togithub.com/typeddjango/django-stubs/pull/1576)

##### Housekeeping

- Removed unsupported Django versions from package classifiers by
[@&#8203;intgr](https://togithub.com/intgr) in
[https://github.com/typeddjango/django-stubs/pull/1553](https://togithub.com/typeddjango/django-stubs/pull/1553)
- Removed try-except around import of `ArrayField` by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/1558](https://togithub.com/typeddjango/django-stubs/pull/1558)
- Reverted: Fix crash when psycopg2 is not installed by
[@&#8203;intgr](https://togithub.com/intgr) in
[https://github.com/typeddjango/django-stubs/pull/1565](https://togithub.com/typeddjango/django-stubs/pull/1565)
- Removed usage of `mypy_extensions` by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/1566](https://togithub.com/typeddjango/django-stubs/pull/1566)
- Upgrade to Mypy 1.4.0 by
[@&#8203;christianbundy](https://togithub.com/christianbundy) in
[https://github.com/typeddjango/django-stubs/pull/1572](https://togithub.com/typeddjango/django-stubs/pull/1572)
- Chore: set Black Python target to 3.8+ explicitely by
[@&#8203;GabDug](https://togithub.com/GabDug) in
[https://github.com/typeddjango/django-stubs/pull/1573](https://togithub.com/typeddjango/django-stubs/pull/1573)
- Update `flake8` plugins by
[@&#8203;sobolevn](https://togithub.com/sobolevn) in
[https://github.com/typeddjango/django-stubs/pull/1579](https://togithub.com/typeddjango/django-stubs/pull/1579)
- CI: Run tests and pre-commit using newest Python version by
[@&#8203;intgr](https://togithub.com/intgr) in
[https://github.com/typeddjango/django-stubs/pull/1582](https://togithub.com/typeddjango/django-stubs/pull/1582)
- Removed duplicate "import all" test file by
[@&#8203;adamchainz](https://togithub.com/adamchainz) in
[https://github.com/typeddjango/django-stubs/pull/1587](https://togithub.com/typeddjango/django-stubs/pull/1587)
- Update compatible-mypy to 1.4.x by
[@&#8203;intgr](https://togithub.com/intgr) in
[https://github.com/typeddjango/django-stubs/pull/1588](https://togithub.com/typeddjango/django-stubs/pull/1588)
- Version 4.2.2 release (django-stubs, django-stubs-ext) by
[@&#8203;intgr](https://togithub.com/intgr) in
[https://github.com/typeddjango/django-stubs/pull/1590](https://togithub.com/typeddjango/django-stubs/pull/1590)

#### New Contributors

- [@&#8203;namper](https://togithub.com/namper) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/1521](https://togithub.com/typeddjango/django-stubs/pull/1521)
- [@&#8203;filbasi](https://togithub.com/filbasi) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/1544](https://togithub.com/typeddjango/django-stubs/pull/1544)
- [@&#8203;GabDug](https://togithub.com/GabDug) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/1567](https://togithub.com/typeddjango/django-stubs/pull/1567)
- [@&#8203;rvanlaar](https://togithub.com/rvanlaar) made their first
contribution in
[https://github.com/typeddjango/django-stubs/pull/1562](https://togithub.com/typeddjango/django-stubs/pull/1562)

**Full Changelog**:
typeddjango/django-stubs@4.2.1...4.2.2

</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

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

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
None yet
Development

Successfully merging this pull request may close these issues.

3 participants