wagtail 5.2.5__py3-none-any.whl → 5.2.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
wagtail/__init__.py CHANGED
@@ -6,7 +6,7 @@ from wagtail.utils.version import get_semver_version, get_version
6
6
 
7
7
  # major.minor.patch.release.number
8
8
  # release must be one of alpha, beta, rc, or final
9
- VERSION = (5, 2, 5, "final", 1)
9
+ VERSION = (5, 2, 6, "final", 1)
10
10
 
11
11
  __version__ = get_version(VERSION)
12
12
 
@@ -1,6 +1,7 @@
1
1
  import datetime
2
2
  import json
3
3
  import urllib
4
+ from unittest.mock import patch
4
5
 
5
6
  from django.contrib.auth.models import Group, Permission
6
7
  from django.core.files.uploadedfile import SimpleUploadedFile, TemporaryUploadedFile
@@ -12,6 +13,8 @@ from django.utils.encoding import force_str
12
13
  from django.utils.html import escape, escapejs
13
14
  from django.utils.http import RFC3986_SUBDELIMS, urlencode
14
15
  from django.utils.safestring import mark_safe
16
+ from willow.optimizers.base import OptimizerBase
17
+ from willow.registry import registry
15
18
 
16
19
  from wagtail.admin.admin_url_finder import AdminURLFinder
17
20
  from wagtail.images import get_image_model
@@ -3434,6 +3437,35 @@ class TestPreviewView(WagtailTestUtils, TestCase):
3434
3437
  self.assertEqual(response.status_code, 200)
3435
3438
  self.assertEqual(response["Content-Type"], "image/png")
3436
3439
 
3440
+ def test_preview_with_optimizer(self):
3441
+ """
3442
+ Test that preview works with optimizers
3443
+
3444
+ Willow optimizers require
3445
+ """
3446
+
3447
+ class DummyOptimizer(OptimizerBase):
3448
+ library_name = "dummy"
3449
+ image_format = "png"
3450
+
3451
+ @classmethod
3452
+ def check_library(cls):
3453
+ return True
3454
+
3455
+ @classmethod
3456
+ def process(cls, file_path: str):
3457
+ pass
3458
+
3459
+ # Get the image
3460
+ with patch.object(registry, "_registered_optimizers", [DummyOptimizer]):
3461
+ response = self.client.get(
3462
+ reverse("wagtailimages:preview", args=(self.image.id, "fill-800x600"))
3463
+ )
3464
+
3465
+ # Check response
3466
+ self.assertEqual(response.status_code, 200)
3467
+ self.assertEqual(response["Content-Type"], "image/png")
3468
+
3437
3469
  def test_get_invalid_filter_spec(self):
3438
3470
  """
3439
3471
  Test that an invalid filter spec returns a 400 response
@@ -1,9 +1,10 @@
1
1
  import os
2
+ from tempfile import SpooledTemporaryFile
2
3
 
3
4
  from django.conf import settings
4
5
  from django.core.exceptions import PermissionDenied
5
6
  from django.core.paginator import InvalidPage, Paginator
6
- from django.http import Http404, HttpResponse, JsonResponse
7
+ from django.http import FileResponse, Http404, HttpResponse, JsonResponse
7
8
  from django.shortcuts import get_object_or_404, redirect
8
9
  from django.template.response import TemplateResponse
9
10
  from django.urls import reverse
@@ -333,8 +334,11 @@ def preview(request, image_id, filter_spec):
333
334
  image = get_object_or_404(get_image_model(), id=image_id)
334
335
 
335
336
  try:
336
- response = HttpResponse()
337
- image = Filter(spec=filter_spec).run(image, response)
337
+ # Temporary image needs to be an instance that Willow can run optimizers on
338
+ temp_image = SpooledTemporaryFile(max_size=settings.FILE_UPLOAD_MAX_MEMORY_SIZE)
339
+ image = Filter(spec=filter_spec).run(image, temp_image)
340
+ temp_image.seek(0)
341
+ response = FileResponse(temp_image)
338
342
  response["Content-Type"] = "image/" + image.format_name
339
343
  return response
340
344
  except InvalidFilterSpecError:
@@ -258,6 +258,30 @@ class TestParseQueryString(SimpleTestCase):
258
258
  self.assertDictEqual(filters.dict(), {"author": "foo bar", "bar": "beer"})
259
259
  self.assertEqual(repr(query), repr(Phrase("hello world")))
260
260
 
261
+ def test_long_queries(self):
262
+ filters, query = parse_query_string("0" * 60_000)
263
+ self.assertEqual(filters.dict(), {})
264
+ self.assertEqual(repr(query), repr(PlainText("0" * 60_000)))
265
+
266
+ filters, _ = parse_query_string(f'{"a" * 60_000}:"foo bar"')
267
+ self.assertEqual(filters.dict(), {"a" * 60_000: "foo bar"})
268
+
269
+ def test_long_filter_value(self):
270
+ filters, _ = parse_query_string(f'foo:ba{"r" * 60_000}')
271
+ self.assertEqual(filters.dict(), {"foo": f'ba{"r" * 60_000}'})
272
+
273
+ def test_joined_filters(self):
274
+ filters, query = parse_query_string("foo:bar:baz")
275
+ self.assertEqual(filters.dict(), {"foo": "bar"})
276
+ self.assertEqual(repr(query), repr(PlainText(":baz")))
277
+
278
+ filters, query = parse_query_string("foo:'bar':baz")
279
+ self.assertEqual(filters.dict(), {"foo": "bar"})
280
+ self.assertEqual(repr(query), repr(PlainText(":baz")))
281
+
282
+ filters, query = parse_query_string("foo:'bar:baz'")
283
+ self.assertEqual(filters.dict(), {"foo": "bar:baz"})
284
+
261
285
  def test_multiple_phrases(self):
262
286
  filters, query = parse_query_string('"hello world" "hi earth"')
263
287
 
wagtail/search/utils.py CHANGED
@@ -69,6 +69,8 @@ MUL = partial(balanced_reduce, operator.mul)
69
69
 
70
70
  MAX_QUERY_STRING_LENGTH = 255
71
71
 
72
+ filters_regexp = re.compile(r'\b(\w+):(\w+|"[^"]+"|\'[^\']+\')')
73
+
72
74
 
73
75
  def normalise_query_string(query_string):
74
76
  # Truncate query string
@@ -83,20 +85,12 @@ def normalise_query_string(query_string):
83
85
 
84
86
 
85
87
  def separate_filters_from_query(query_string):
86
- filters_regexp = r'(\w+):(\w+|"[^"]+"|\'[^\']+\')'
87
-
88
88
  filters = QueryDict(mutable=True)
89
- for match_object in re.finditer(filters_regexp, query_string):
89
+ for match_object in filters_regexp.finditer(query_string):
90
90
  key, value = match_object.groups()
91
- filters.update(
92
- {
93
- key: value.strip('"')
94
- if value.strip('"') is not value
95
- else value.strip("'")
96
- }
97
- )
98
-
99
- query_string = re.sub(filters_regexp, "", query_string).strip()
91
+ filters.update({key: value.strip("\"'")})
92
+
93
+ query_string = filters_regexp.sub("", query_string).strip()
100
94
 
101
95
  return filters, query_string
102
96
 
wagtail/test/settings.py CHANGED
@@ -1,5 +1,6 @@
1
1
  import os
2
2
 
3
+ from django import VERSION as DJANGO_VERSION
3
4
  from django.contrib.messages import constants as message_constants
4
5
  from django.utils.translation import gettext_lazy as _
5
6
 
@@ -70,10 +71,10 @@ if os.environ.get("STATICFILES_STORAGE", "") == "manifest":
70
71
  "BACKEND"
71
72
  ] = "django.contrib.staticfiles.storage.ManifestStaticFilesStorage"
72
73
 
73
- # DJANGO_VERSION < 4.2
74
- STATICFILES_STORAGE = (
75
- "django.contrib.staticfiles.storage.ManifestStaticFilesStorage"
76
- )
74
+ if DJANGO_VERSION < (4, 2):
75
+ STATICFILES_STORAGE = (
76
+ "django.contrib.staticfiles.storage.ManifestStaticFilesStorage"
77
+ )
77
78
 
78
79
 
79
80
  USE_TZ = not os.environ.get("DISABLE_TIMEZONE")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: wagtail
3
- Version: 5.2.5
3
+ Version: 5.2.6
4
4
  Summary: A Django content management system.
5
5
  Home-page: https://wagtail.org/
6
6
  Author: Wagtail core team + contributors
@@ -63,7 +63,7 @@ Requires-Dist: boto3 (<2,>=1.28) ; extra == 'testing'
63
63
  Requires-Dist: freezegun (>=0.3.8) ; extra == 'testing'
64
64
  Requires-Dist: azure-mgmt-cdn (<13.0,>=12.0) ; extra == 'testing'
65
65
  Requires-Dist: azure-mgmt-frontdoor (<1.1,>=1.0) ; extra == 'testing'
66
- Requires-Dist: django-pattern-library (<0.8,>=0.7) ; extra == 'testing'
66
+ Requires-Dist: django-pattern-library (>=0.7) ; extra == 'testing'
67
67
  Requires-Dist: coverage (>=3.7.0) ; extra == 'testing'
68
68
  Requires-Dist: black (==22.3.0) ; extra == 'testing'
69
69
  Requires-Dist: doc8 (==0.8.1) ; extra == 'testing'
@@ -1,4 +1,4 @@
1
- wagtail/__init__.py,sha256=KYmHJ6c9rsbNHoePtUu5AJdDUqxY5EDr_WGSAGWkFlc,724
1
+ wagtail/__init__.py,sha256=XDqUURNn4H7iay8_FXbaL5gYy1CE3-tAmIV_9eF-HW8,724
2
2
  wagtail/apps.py,sha256=38kXTdHoQzFnpUqDNxFpsqn2dut4V0u9rLOkhqCoYkc,713
3
3
  wagtail/compat.py,sha256=L41FhlX4xy5KgTdJ63smtM78mtKf1mxkPeOs8kyOwS0,538
4
4
  wagtail/coreutils.py,sha256=ZlmtoHC5YzXmhdKi13QkCSmBryAmS7k8s5jgQjahpEQ,20660
@@ -2762,7 +2762,7 @@ wagtail/images/templates/wagtailimages/widgets/image_chooser.html,sha256=Rn1LgFX
2762
2762
  wagtail/images/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2763
2763
  wagtail/images/templatetags/wagtailimages_tags.py,sha256=a8GOwG-MmfRW0GJB-HQ6tqg8oBlH1Tk18O5OZR3tyQs,7718
2764
2764
  wagtail/images/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2765
- wagtail/images/tests/test_admin_views.py,sha256=LL6bSrJL_5c2APKLmCgRiTHQD5n5c_vJAb0V1OhLOhM,131698
2765
+ wagtail/images/tests/test_admin_views.py,sha256=hvBDpprDCJLKKHN6e5VoAD6PaxKwYy1sgKvakuq3adM,132653
2766
2766
  wagtail/images/tests/test_api_fields.py,sha256=CgCLk6PcIwXH4qcT9mBdsn43luD2CAiVZ6j4mxVadyQ,971
2767
2767
  wagtail/images/tests/test_blocks.py,sha256=ThEwsfPRwNrpJUkg3bqDBG2AXMp0GDgC1Takchi3dFg,2289
2768
2768
  wagtail/images/tests/test_form_overrides.py,sha256=ay_d_CoZFfv_QVbgsSEIZZGwsYfSrm4zkaV2kpG3H50,2727
@@ -2793,7 +2793,7 @@ wagtail/images/tests/test_bulk_actions/test_bulk_add_to_collection.py,sha256=URM
2793
2793
  wagtail/images/tests/test_bulk_actions/test_bulk_delete.py,sha256=3dPB4scy8-qBll_X1YmYZY6AgYeQNNncIqDt9j-i7QM,2959
2794
2794
  wagtail/images/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2795
2795
  wagtail/images/views/chooser.py,sha256=oumsJZCJwOaeZmNJyX3CshZO_C_Yd1tg062Wp63WncA,11714
2796
- wagtail/images/views/images.py,sha256=QISla4ibdSQTiTMUbTrTQRf2ypp9uFD_VQTp0YVwSsY,14613
2796
+ wagtail/images/views/images.py,sha256=CSfu9KpYGcF4BZeTfC-LEHE2VPrd6UAinidIE_NeExE,14881
2797
2797
  wagtail/images/views/multiple.py,sha256=-ar34KEVs7Dj09-7HW17LPs_7zgM3eDaB0G72jLGJ5U,5687
2798
2798
  wagtail/images/views/serve.py,sha256=RvCF2AG9baMLeN2L0dU-Lk6D5wS7LMpkIRBD-E3SAIY,2950
2799
2799
  wagtail/images/views/bulk_actions/__init__.py,sha256=fDYVsKqg9AIt1GvNtgyi5RFlchzJeCuqxUno7fU3zAs,216
@@ -3174,7 +3174,7 @@ wagtail/search/models.py,sha256=8YNIfAMXtvZVWwOyQhbSDznmdT8EiPAWuu2BkwGBnEA,1008
3174
3174
  wagtail/search/query.py,sha256=QhZD3Sx2rtZWKz9BXq7Cy6oSHxJ1Ly0Nr9BpyyUsoiE,2340
3175
3175
  wagtail/search/queryset.py,sha256=qj6pjLnCH2W3bZGNUrpf7c82Bt7ZPrjGO6yRwT3m1f8,1221
3176
3176
  wagtail/search/signal_handlers.py,sha256=Md4dhmwLF7kX7YLG-MsqTLQ6NdfkFIavBJ9n5OsUIgA,956
3177
- wagtail/search/utils.py,sha256=PnF65FM5Udc7mZ8J2oBMJ15T6vYGL0N69awp_RgEDmc,6210
3177
+ wagtail/search/utils.py,sha256=onx_ym1p0kMBggaormbztwM-T0lXvnTG5vyOuyDnMQ0,6075
3178
3178
  wagtail/search/backends/__init__.py,sha256=nJEc435WnprL13v7OwcUCyHz0CTXMCMar9xTRqn1rH8,3455
3179
3179
  wagtail/search/backends/base.py,sha256=M7lyovOz2Wau_UwjyEk7AYeQOLt6Q3Lm2hUHDUoEVNg,16806
3180
3180
  wagtail/search/backends/elasticsearch5.py,sha256=lfhUvXUafpmnw0kqdZVr9LBSUMjUuehMkixzj6rYYls,39018
@@ -3320,7 +3320,7 @@ wagtail/search/tests/test_mysql_backend.py,sha256=BsAJk-0y0nKsSOo4qovY8yHIRLnL6S
3320
3320
  wagtail/search/tests/test_page_search.py,sha256=1oPBcgyJQpJmAQaNAhDAWXdVe2xrZ6kf7clefPZ0JLY,2363
3321
3321
  wagtail/search/tests/test_postgres_backend.py,sha256=QAR78RKMAUCH9beNu3r1Qxuhb865K8NU1C9sWC8lVco,7406
3322
3322
  wagtail/search/tests/test_postgres_stemming.py,sha256=zUqIANnIu4FD8SQtDd0xtCKH6x5voe9mdgA7nK0g3Wk,1346
3323
- wagtail/search/tests/test_queries.py,sha256=-79wHb7o98Jy4QaeJM_I0WXvh4LMRDYD2kaJYWfUk2c,14150
3323
+ wagtail/search/tests/test_queries.py,sha256=2nwg7h4DgITTbG6dHC8xgM3s3mKFonlR1VKTZT3BMoI,15189
3324
3324
  wagtail/search/tests/test_related_fields.py,sha256=B3vvhVVzzBQQYgbe2n6WE9s3VkD4YniCxfqy8nIQXU8,3420
3325
3325
  wagtail/search/tests/test_sqlite_backend.py,sha256=csgHqTr7P2F4-KwMYq6UaehlLs73XG0uVQJn9hWWzVM,1821
3326
3326
  wagtail/sites/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -3624,7 +3624,7 @@ wagtail/test/headless_urls.py,sha256=v1mY7fcuKFIang6wpDB8qGcvCwQzkWh_rHfmSF1wdHA
3624
3624
  wagtail/test/manage.py,sha256=JaihE2eqQFMxzd83WWPE4DLnZbzq0bqEkozWAbe-xn8,255
3625
3625
  wagtail/test/middleware.py,sha256=noHy_kAzZ-61uC_PCLr8WLYWSpqx83dsE8OsVPv56tA,906
3626
3626
  wagtail/test/non_root_urls.py,sha256=ZWPGHRmWHmx2Ext6S_TONDj4ZHdBt5BNZoULON1nDlA,556
3627
- wagtail/test/settings.py,sha256=ofhHa1KJaJSno-cKoWwMneLxi4vjYvpCdzAFWsg9oJ8,9490
3627
+ wagtail/test/settings.py,sha256=5LsIaNYQRmFzh1Uroruuq5HsrYGERZSKTTiuRkRxvcs,9552
3628
3628
  wagtail/test/settings_ui.py,sha256=zg6mNziQPeeIBcat2TOPdqdL8zHc6QyADsNFHxt6PiM,1037
3629
3629
  wagtail/test/urls.py,sha256=4JIjXPBeaOSBV2jBrgOeMlVuGbl_SWZK_bqmVBxF7eI,2474
3630
3630
  wagtail/test/urls_multilang.py,sha256=tkd6-d4cNNTDQwIoyDVUPL0Ya51W326N8LSVOIdFnF8,190
@@ -4071,9 +4071,9 @@ wagtail/utils/urlpatterns.py,sha256=RDhVScxdm-RV4HSMjWElyrbEoTPsXu841_SKMgoFKtY,
4071
4071
  wagtail/utils/utils.py,sha256=UALGn0KOyqi5ZoXOozWX99ZPUsVZP51ET8d7sZ1jlm0,430
4072
4072
  wagtail/utils/version.py,sha256=40WGMIy8nSPQJFF01p7c38L444SexH2Cb-bQmR8ztXg,1478
4073
4073
  wagtail/utils/widgets.py,sha256=oTpTMcmQ0Y4MugbSKp_Uigl97ftWdHvMfvhrrLyVmBs,1529
4074
- wagtail-5.2.5.dist-info/LICENSE,sha256=0aiL7_RJ2YkOjscmRI7opwmuURrY6h8MR0B24nrdRQU,1512
4075
- wagtail-5.2.5.dist-info/METADATA,sha256=Rb8f_0eDycmk9VJu0Ug6xY5Sfx0juLgiLsrFnN69r3Q,3855
4076
- wagtail-5.2.5.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
4077
- wagtail-5.2.5.dist-info/entry_points.txt,sha256=R14Z0xKoufNcDaku0EWDKM-K8J4ap0EImO8C-df8HVM,53
4078
- wagtail-5.2.5.dist-info/top_level.txt,sha256=zcKgvuRTi0gSgVzJ1qMoERCwhQ_i0n9bkyxza3oh9as,8
4079
- wagtail-5.2.5.dist-info/RECORD,,
4074
+ wagtail-5.2.6.dist-info/LICENSE,sha256=0aiL7_RJ2YkOjscmRI7opwmuURrY6h8MR0B24nrdRQU,1512
4075
+ wagtail-5.2.6.dist-info/METADATA,sha256=ggJawfxlL1fllg9awx_FmLH2WB0CPkL4re9iyWet3IU,3850
4076
+ wagtail-5.2.6.dist-info/WHEEL,sha256=2wepM1nk4DS4eFpYrW1TTqPcoGNfHhhO_i5m4cOimbo,92
4077
+ wagtail-5.2.6.dist-info/entry_points.txt,sha256=R14Z0xKoufNcDaku0EWDKM-K8J4ap0EImO8C-df8HVM,53
4078
+ wagtail-5.2.6.dist-info/top_level.txt,sha256=zcKgvuRTi0gSgVzJ1qMoERCwhQ_i0n9bkyxza3oh9as,8
4079
+ wagtail-5.2.6.dist-info/RECORD,,