Commit Graph

31799 Commits

Author SHA1 Message Date
Hrushikesh 107865780a Fixed #34345 -- Added system check for ManyToManyFields with intermediate tables in ModelAdmin.filter_horizontal/vertical. 2023-06-21 07:48:09 +02:00
Mariusz Felisiak ddb6506618
Corrected admin.E013 check message in docs. 2023-06-20 12:59:32 +02:00
Akash Kumar Sen 1754c2c802 Refs #34634 -- Fixed creating diamond-shaped MTI objects with ancestors inherited from different paths.
Co-authored-by: Simon Charette <charette.s@gmail.com>
2023-06-20 08:40:35 +02:00
Akash Kumar Sen 82a588a6bc Fixed #34634 -- Adjusted system check for clashing fields to warn about links to common parent for MTI models. 2023-06-20 08:10:53 +02:00
Sarah Boyce d6e9ec4014
Refs #27079 -- Used addClassCleanup() in SeleniumTestCase.
Regression in def09bf412.
2023-06-19 20:15:37 +02:00
Yaser Amiri 3f1bc2222f Fixed #34656 -- Fixed unclosed div in admin password change template.
Regression in 6991880109.
2023-06-19 08:22:10 +02:00
François Freitag bcacc6321a Refs #34517 -- Restored skipping ImageFileField.update_dimension_fields without width/height fields.
This avoids reading the image size when the dimensions fields
(image_width, image_height) do not exist, as that operation may be
expensive.

Partially reverts ea53e7c09f, that dropped
the check for the dimension fields in update_dimension_fields(), because
the post_init signal was no longer registered without dimension fields.

However, another code path to that function exists: when the
ImageFileField is save()d, the name from the storage is setattr()ed on
the field, and ImageFileDescriptor calls update_dimension_fields()
because the image size might have changed. Keep bailing out early when
dimensions are unused.

Besides, computing the image dimensions causes to close() the file,
resulting in a backward-incompatible change. The test protects against
that change.
2023-06-19 05:24:42 +02:00
şuayip üzülmez 0c5146523b Fixed #34662 -- Corrected number in error messages for Array(Min/Max)LengthValidator. 2023-06-18 14:32:51 +02:00
Mariusz Felisiak 17cdc7395e
Improved names for Selenium daily builds. 2023-06-18 13:20:05 +02:00
sarahboyce 8b062eab8e Made SeleniumTests.test_inline_uuid_pk_add_with_popup less flaky by waiting until popup is closed. 2023-06-18 08:37:19 +02:00
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