Sarah Boyce
c914f54237
Added Selenium tests to daily builds.
2023-06-17 11:39:49 +02:00
Ashwin Dharne
5762b839ff
Fixed typo in docs/topics/db/fixtures.txt.
2023-06-16 19:34:06 +02:00
Olivier Le Thanh Duong
1b754d638d
Fixed #34629 -- Added filtering support to GIS aggregates.
2023-06-16 12:20:13 +02:00
Mariusz Felisiak
c1cff3c471
Refs #34629 -- Changed SDOAGGRTYPE wrapping to Func() in GIS aggregates on Oracle.
2023-06-16 12:20:13 +02:00
Jacob Rief
1fe0b167af
Fixed #34473 -- Fixed step validation for form fields with non-zero minimum value.
2023-06-16 08:38:28 +02:00
sarahboyce
549d6ffeb6
Added GitHub action to run Selenium tests.
2023-06-15 10:49:37 +02:00
Akash Kumar Sen
5d20e02078
Fixed #33414 -- Fixed creating diamond-shaped MTI objects for common ancestor with primary key that has a default.
...
Co-authored-by: Simon Charette <charette.s@gmail.com>
2023-06-15 08:16:11 +02:00
Simon Charette
1c4f5f314e
Refs #32143 -- Removed superflous constraints on excluded query.
...
The outer query reference is not necessary when alias can be reused and
can even be harmful by confusing query planers.
Refs #34597 .
2023-06-14 09:44:49 +02:00
Simon Charette
cfc9c94d97
Refs #32143 -- Adjusted a comment about subquery usage in Query.split_exclude().
2023-06-14 08:20:39 +02:00
David Smith
0cfcab4eec
Fixed date_time_picker_shortcuts() tests on Windows.
...
Windows does not allow overriding TIME_ZONE as time.tzset() is only
available on Unix.
2023-06-14 08:01:14 +02:00
nessita
26aedbbc08
Updated PyPI setup access in prerequisites checklist of release how-to.
2023-06-13 21:02:56 -03:00
anthony kugel
68d0f95262
Fixed #34649 -- Fixed headless deprecation warning on Selenium 4.8+.
...
Thanks David Smith for the report and initial patch.
2023-06-13 13:09:12 +02:00
Mariusz Felisiak
06881341d4
Refs #30220 -- Bumped required version of Selenium to 3.8.0.
...
Follow up to 8d010f3986
.
2023-06-13 10:12:52 +02:00
sarahboyce
decbfa834f
Made SeleniumTests.test_select_multiple less flaky by adding explicit Selenium wait.
2023-06-13 08:26:34 +02:00
Nina Menezes
1699f8b52a
Fixed #34628 -- Improved icons accessibility of related widget wrapper in admin.
...
This improves accessibility of icons by making them larger and grayscale
(when not selected).
2023-06-12 08:31:28 +02:00
Nick Pope
e042024b28
Allowed custom formatting of lazy() objects.
...
This allows for formatting of lazy objects which have a custom formatter
defined by overriding the default implementation from `object`.
2023-06-12 06:09:20 +02:00
Nick Pope
fd97b0471b
Allowed multiplication of lazy() objects with int return type.
2023-06-12 05:59:40 +02:00
Nick Pope
45466f11f2
Removed function call overhead when preparing proxy class for lazy().
...
We can avoid the function call and assignment overhead which could be
significant when instantiating many lazy objects. It's still easy enough
to read too.
2023-06-12 05:53:30 +02:00
Ran Benita
ae94077e7d
Made proxy class in lazy() prepare eagerly.
...
Previously, the proxy class was prepared lazily:
lazy_identity = lazy(identity, int)
lazy_identity(10) # prepared here
lazy_identity(10)
This has a slight advantage that if the lazy doesn't end up getting
used, the preparation work is skipped, however that's not very likely.
Besides this laziness, it is also inconsistent in that the methods which
are wrapped directly (__str__ etc.) are prepared already when __proxy__
is defined, and there is a weird half-initialized state.
This change it so that everything is prepared already on the first line
of the example above.
2023-06-12 05:45:44 +02:00
Ran Benita
b214845f0f
Improved order of methods in proxy class in lazy().
...
This order reads more naturally and puts methods into three groups:
1. The methods required to support the implementation of __proxy__, e.g.
__deepcopy__ doesn't come from `object` and __reduce__ is
overridden to support behavior required explicitly for pickling of
lazy objects.
2. Methods that are specifically overridden from `object` which we
don't want to inherit from the provided resultclasses. These will be
skipped later when we add methods from the resultclasses.
3. Additional methods - that is _add__, __radd__, and __mod__ - don't
come from `object`, but typically from `str` and `int` which are the
most common use cases.
Co-authored-by: Nick Pope <nick@nickpope.me.uk>
2023-06-12 05:33:02 +02:00
Nick Pope
e0e0204477
Added more tests for django.utils.functional.lazy().
2023-06-12 05:29:30 +02:00
Neeraj Kumar
1d9d32389c
Fixed #34638 -- Fixed admin change list selected row highlight on editable boolean fields.
...
Regression in 0aa2f16e63
.
Thanks Andrei Shabanski for the report.
2023-06-11 15:01:06 +02:00
David Smith
e9bd5b4876
Refs #34233 -- Updated black target-version to Python 3.10.
2023-06-11 14:57:13 +02:00
XDEv11
221c27bd6a
Added tests for HttpResponseBase.charset/reason_phrase setters.
2023-06-10 20:43:05 +02:00
Mariusz Felisiak
caf80cb41f
Fixed #34645 -- Restored alignment for admin date/time timezone warnings.
...
Regression in 96a598356a
.
2023-06-09 21:37:23 +02:00
sarahboyce
531f557f92
Fixed #23049 -- Added %a and %A support to Date.strftime.
...
This enables the admin to display the day as locale's abbreviated/full
name if %a/%A is used in the date format.
2023-06-09 12:18:17 +02:00
Anders Kaseorg
b81e974e9e
Fixed #34604 -- Corrected fallback SQL for n-ary logical XOR.
...
An n-ary logical XOR Q(…) ^ Q(…) ^ … ^ Q(…) should evaluate to true
when an odd number of its operands evaluate to true, not when exactly
one operand evaluates to true.
2023-06-08 20:41:18 +02:00
Ran Benita
ee36e101e8
Optimized lazy() by removing use of @total_ordering.
...
@total_ordering is slow. Using the following micro-benchmark
(resultclasses intentionally omitted to narrow the scope):
import cProfile
from django.utils.functional import lazy
def identity(x): return x
cProfile.run("for i in range(10000): str(lazy(identity)(1))")
Before:
380003 function calls in 0.304 seconds
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.016 0.016 0.304 0.304 <string>:1(<module>)
10000 0.002 0.000 0.002 0.000 bench.py:5(double)
10000 0.005 0.000 0.006 0.000 functional.py:100(__cast)
10000 0.007 0.000 0.013 0.000 functional.py:106(__str__)
10000 0.005 0.000 0.017 0.000 functional.py:140(__wrapper__)
10000 0.020 0.000 0.258 0.000 functional.py:60(lazy)
10000 0.039 0.000 0.039 0.000 functional.py:68(__proxy__)
10000 0.010 0.000 0.012 0.000 functional.py:77(__init__)
10000 0.002 0.000 0.002 0.000 functional.py:84(__prepare_class__)
10000 0.025 0.000 0.075 0.000 functools.py:186(total_ordering)
10000 0.015 0.000 0.028 0.000 functools.py:189(<setcomp>)
10000 0.024 0.000 0.044 0.000 functools.py:37(update_wrapper)
10000 0.005 0.000 0.005 0.000 functools.py:67(wraps)
10000 0.074 0.000 0.114 0.000 {built-in method builtins.__build_class__}
1 0.000 0.000 0.304 0.304 {built-in method builtins.exec}
150000 0.023 0.000 0.023 0.000 {built-in method builtins.getattr}
10000 0.004 0.000 0.004 0.000 {built-in method builtins.max}
80000 0.025 0.000 0.025 0.000 {built-in method builtins.setattr}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
10000 0.003 0.000 0.003 0.000 {method 'update' of 'dict' objects}
After:
240003 function calls in 0.231 seconds
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.016 0.016 0.231 0.231 <string>:1(<module>)
10000 0.002 0.000 0.002 0.000 bench.py:5(double)
10000 0.006 0.000 0.012 0.000 functional.py:105(__str__)
10000 0.005 0.000 0.017 0.000 functional.py:159(__wrapper__)
10000 0.015 0.000 0.186 0.000 functional.py:60(lazy)
10000 0.022 0.000 0.022 0.000 functional.py:68(__proxy__)
10000 0.010 0.000 0.012 0.000 functional.py:76(__init__)
10000 0.002 0.000 0.002 0.000 functional.py:83(__prepare_class__)
10000 0.004 0.000 0.006 0.000 functional.py:99(__cast)
10000 0.023 0.000 0.043 0.000 functools.py:37(update_wrapper)
10000 0.004 0.000 0.004 0.000 functools.py:67(wraps)
10000 0.102 0.000 0.124 0.000 {built-in method builtins.__build_class__}
1 0.000 0.000 0.231 0.231 {built-in method builtins.exec}
70000 0.011 0.000 0.011 0.000 {built-in method builtins.getattr}
50000 0.007 0.000 0.007 0.000 {built-in method builtins.setattr}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
10000 0.003 0.000 0.003 0.000 {method 'update' of 'dict' objects}
2023-06-08 09:17:50 +02:00
Ran Benita
a57d5d9bbc
Made bytes and str return types no longer mutually exclusive in lazy().
...
They are no longer special cased.
2023-06-08 09:15:40 +02:00
Ran Benita
459f30f73e
Removed unnecessary wrapping of __bytes__ in proxy class in lazy().
2023-06-08 09:15:40 +02:00
Ran Benita
c7ba2e3cbb
Removed unnecessary branch in __mod__() from proxy class in lazy().
...
Unnecessary since c716fe8782
and
7b2f2e74ad
.
2023-06-08 09:15:40 +02:00
Ran Benita
f5817c24f4
Refs #34445 -- Fixed string-casting of non-string lazy objects when value may be bytes.
...
If the result type is bytes, then calling bytes() on it does nothing.
If the result type is not bytes, we should not cast to bytes, just
because the return value may be bytes.
2023-06-08 06:38:11 +02:00
Akash Kumar Sen
5f2308710b
Fixed #30355 -- Doc'd interaction between custom managers and prefetch_related().
2023-06-07 11:48:01 +02:00
benebsiny
7cc138a58f
Added MultiPartParser tests for parsing base64-encoded fields.
2023-06-07 05:44:27 +02:00
devilsautumn
094b0bea2c
Fixed #34609 -- Deprecated calling format_html() without arguments.
2023-06-06 14:14:57 +02:00
Mariusz Felisiak
4f6a51dfe6
Fixed lookup.tests.LookupTests.test_exclude() on PostgreSQL 16 beta 1.
...
Order doesn't matter for this test, and on PostgreSQL 16 "%" is ordered
before "_", so switch to sort by "pub_date".
2023-06-06 11:38:23 +02:00
Mariusz Felisiak
40a2c811e3
Refs #26706 , Refs #34633 -- Added test for prefetch_related() cache invalidation in ManyRelatedManager.create().
2023-06-06 07:33:59 +02:00
Nina Menezes
51fdea6841
Fixed #34627 -- Highlighted active row in admin UI when forced-colors mode is enabled.
2023-06-05 16:37:17 -03:00
nessita
e26d1a91d7
Added stub release notes for 4.2.3.
2023-06-05 14:55:23 -03:00
Coen van der Kamp
10d9d0ccb2
Fixed #34622 -- Improved accessibility of related widget wrapper in admin.
...
This improves accessibility for screen reader users by adding
"aria-disabled" and removing "alt".
Thanks Thibaud Colas for the report.
2023-06-05 14:43:51 +02:00
Natalia
0faad01938
Added release date for 4.2.2.
2023-06-05 08:21:56 -03:00
Howard Cox
cd413bd78a
Fixed #34621 -- Made admin site header render in <div> tag.
...
This was problematic for screen reader users because they use headings
to navigate. Having two <h1> is confusing, and the one in the header
wasn’t particularly helpful since it’s the same on all pages.
2023-06-05 11:55:06 +02:00
nessita
89c27d8672
Fixed #34601 -- Added field name to check message for ModelAdmin.readonly_fields.
...
Co-authored-by: Rick van Hattem <wolph@wol.ph>
2023-06-05 05:56:53 +02:00
Mariusz Felisiak
f9936deed1
Fixed #34620 -- Fixed serialization crash on m2m fields without natural keys when base querysets use select_related().
...
Regression in 19e0587ee5
.
Thanks Martin Svoboda for the report.
2023-06-04 20:49:07 +02:00
Mariusz Felisiak
1136aa5005
Refs #23528 -- Made cosmetic edits to swappable_dependency() docs.
2023-06-03 12:01:15 +02:00
DevilsAutumn
7d96ce68ae
Fixed #23528 -- Doc'd django.db.migrations.swappable_dependency().
2023-06-02 20:57:41 +02:00
Nina Menezes
27fed08e5f
Fixed #34618 -- Added icon descriptions in "Recent Actions" on the admin index.
2023-06-02 12:32:18 +02:00
Simon Charette
2cf76f2d5d
Fixed #34612 -- Fixed QuerySet.only() crash on reverse relationships.
...
Regression in b3db6c8dcb
.
Thanks Ian Cubitt for the report.
This also corrected test_inheritance_deferred2() test which was
previously properly defined and marked as an expected failure but was
then wrongly adjusted to mask the lack of support for per-alias
deferral that was fixed by #21204 .
2023-06-01 19:50:47 +01:00
Simon Charette
d9e7018796
Refs #34570 -- Added extra tests for QuerySet.only() noops.
2023-06-01 19:49:26 +01:00
Michael Howitz
4142739af1
Added local copy of Django to deps in tox.ini.
...
This also bumps tox to 4.0.
2023-06-01 14:56:41 +01:00