This also introduces Expression.constraint_validation_compatible that
allows specifying that expression should be ignored during a constraint
validation.
Added a top-level directory in the zip archive that is the commit
hash which makes it easier when downloading multiple artifacts
for comparison. Updated the filenames of screenshots for easier
comparison between different cases. Added that an error is
raised if no screenshots uploaded in workflow.
Running `oxipng` over a set of screenshots from a previous run that were
1.9M in size resulted in a total size of 1.3M, a 31.5% reduction.
This can be useful to reduce the artifact size stored in GitHub and
locally if downloading screenshots from multiple runs.
See https://til.simonwillison.net/github-actions/oxipng
The id was used when we attempted to update comments in an early
version of the feature. Also removed the job summary as it
doesn't have the value that it did in the original version of
the feature.
Hidden elements are not visible for both accessibility tools and browsers presentation layer. This change therefore only reduces the size of the generated HTML.
Prior to this change, squashmigrations would use a [yN] prompt to ask
for user confirmation. A slash was added between the yes/no options
to make it consistent with other commands that print similar prompts.
Updated OrderableAggMixin.as_sql() to separate the order_by parameters
from the filter parameters. Previously, the parameters and SQL were
calculated by the Aggregate parent class, resulting in a mixture of
order_by and filter parameters.
Thanks Simon Charette for the review.
Refactored the filter and order_by expressions in the Aggregate class to
return a list of Expression (or None) values, ensuring that the list
item is always available and represents the filter expression.
For the PostgreSQL OrderableAggMixin, the returned list will always
include the filter and the order_by value as the last two elements.
Lastly, emtpy Q objects passed directly into aggregate objects using
Aggregate.filter in admin facets are filtered out when resolving the
expression to avoid errors in get_refs().
Thanks Simon Charette for the review.
Keep consistent behaviour of slice() filter between python 3.12 and prior
versions in the case of a dict passed to the filter (catch the new to python
3.12 KeyError exception).