django-oscar / django-oscar

Domain-driven e-commerce for Django

Home Page:http://oscarcommerce.com

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Pillow 10.0.0 support

Dufran opened this issue · comments

10.0.0 pillow not supported

Pillow 10.0.0 removed ANTIALIAS

Steps to Reproduce

  • Install django-oscar
  • Add image to item
    Any other relevant information. For example, why do you consider this a bug and what did you expect to happen instead?

Technical details

  • Python version: Run Python 3.11.0.
  • Django version: Look in your requirements.txt, or run 3.2.20.
  • Oscar version: Look in your requirements.txt, or run 3.2.

i have no idea how to work around this issue, I tried adding Pillow==9.5.0 to the requirements file but it keeps happening

What is the bug here? I just tried to recreate but don't see anything wrong. Can you maybe be a bit more specific about what's happening or paste the stack trace in here?

I get the same error too.
Bildschirmfoto 2023-09-29 um 14 08 00

Traceback:

Environment:


Request Method: GET
Request URL: http://localhost:8000/dashboard/catalogue/

Django Version: 3.2
Python Version: 3.9.18
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.sites',
 'django.contrib.flatpages',
 'oscar.config.Shop',
 'oscar.apps.analytics.apps.AnalyticsConfig',
 'oscar.apps.checkout.apps.CheckoutConfig',
 'oscar.apps.address.apps.AddressConfig',
 'oscar.apps.shipping.apps.ShippingConfig',
 'oscar.apps.catalogue.apps.CatalogueConfig',
 'oscar.apps.catalogue.reviews.apps.CatalogueReviewsConfig',
 'oscar.apps.communication.apps.CommunicationConfig',
 'oscar.apps.partner.apps.PartnerConfig',
 'oscar.apps.basket.apps.BasketConfig',
 'oscar.apps.payment.apps.PaymentConfig',
 'oscar.apps.offer.apps.OfferConfig',
 'oscar.apps.order.apps.OrderConfig',
 'oscar.apps.customer.apps.CustomerConfig',
 'oscar.apps.search.apps.SearchConfig',
 'oscar.apps.voucher.apps.VoucherConfig',
 'oscar.apps.wishlists.apps.WishlistsConfig',
 'oscar.apps.dashboard.apps.DashboardConfig',
 'oscar.apps.dashboard.reports.apps.ReportsDashboardConfig',
 'oscar.apps.dashboard.users.apps.UsersDashboardConfig',
 'oscar.apps.dashboard.orders.apps.OrdersDashboardConfig',
 'oscar.apps.dashboard.catalogue.apps.CatalogueDashboardConfig',
 'oscar.apps.dashboard.offers.apps.OffersDashboardConfig',
 'oscar.apps.dashboard.partners.apps.PartnersDashboardConfig',
 'oscar.apps.dashboard.pages.apps.PagesDashboardConfig',
 'oscar.apps.dashboard.ranges.apps.RangesDashboardConfig',
 'oscar.apps.dashboard.reviews.apps.ReviewsDashboardConfig',
 'oscar.apps.dashboard.vouchers.apps.VouchersDashboardConfig',
 'oscar.apps.dashboard.communications.apps.CommunicationsDashboardConfig',
 'oscar.apps.dashboard.shipping.apps.ShippingDashboardConfig',
 'widget_tweaks',
 'haystack',
 'treebeard',
 'sorl.thumbnail',
 'django_tables2']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'oscar.apps.basket.middleware.BasketMiddleware',
 'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware']


Template error:
In template /usr/local/lib/python3.9/site-packages/oscar/templates/oscar/dashboard/catalogue/product_row_image.html, error at line 4
   module 'PIL.Image' has no attribute 'ANTIALIAS'
   1 : {% load image_tags %}
   2 : {% if record.primary_image.original.url %}
   3 :     {% with image=record.primary_image %}
   4 :          {% oscar_thumbnail image.original "70x70" upscale=False as thumb %} 
   5 :         <a href="#" data-original="{{ image.original.url }}" class="sub-image">
   6 :             <img src="{{ thumb.url }}" alt="{% if image.caption %}{{ image.caption }}{% else %}{{ record.get_title }}{% endif %}">
   7 :         </a>
   8 :     {% endwith %}
   9 : {% else %}
   10 :     —
   11 : {% endif %}
   12 : 

Traceback (most recent call last):
  File "/usr/local/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.9/site-packages/django/core/handlers/base.py", line 204, in _get_response
    response = response.render()
  File "/usr/local/lib/python3.9/site-packages/django/template/response.py", line 105, in render
    self.content = self.rendered_content
  File "/usr/local/lib/python3.9/site-packages/django/template/response.py", line 83, in rendered_content
    return template.render(context, self._request)
  File "/usr/local/lib/python3.9/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 170, in render
    return self._render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/defaulttags.py", line 312, in render
    return nodelist.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.9/site-packages/django_tables2/templatetags/django_tables2.py", line 167, in render
    return template.render(context={"table": table}, request=request)
  File "/usr/local/lib/python3.9/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 170, in render
    return self._render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 150, in render
    return compiled_parent._render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/defaulttags.py", line 211, in render
    nodelist.append(node.render_annotated(context))
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/loader_tags.py", line 62, in render
    result = block.nodelist.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/defaulttags.py", line 167, in render
    values = list(values)
  File "/usr/local/lib/python3.9/site-packages/django_tables2/rows.py", line 244, in items
    column.current_value = self.get_cell(column.name)
  File "/usr/local/lib/python3.9/site-packages/django_tables2/rows.py", line 197, in get_cell
    return self._get_and_render_with(
  File "/usr/local/lib/python3.9/site-packages/django_tables2/rows.py", line 173, in _get_and_render_with
    return render_func(bound_column, value)
  File "/usr/local/lib/python3.9/site-packages/django_tables2/rows.py", line 206, in _call_render
    content = call_with_appropriate(bound_column.render, render_kwargs)
  File "/usr/local/lib/python3.9/site-packages/django_tables2/utils.py", line 572, in call_with_appropriate
    return fn(**kwargs)
  File "/usr/local/lib/python3.9/site-packages/django_tables2/columns/templatecolumn.py", line 68, in render
    return get_template(self.template_name).render(context.flatten())
  File "/usr/local/lib/python3.9/site-packages/django/template/backends/django.py", line 61, in render
    return self.template.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 170, in render
    return self._render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 162, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/defaulttags.py", line 312, in render
    return nodelist.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/defaulttags.py", line 516, in render
    return self.nodelist.render(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 938, in render
    bit = node.render_annotated(context)
  File "/usr/local/lib/python3.9/site-packages/django/template/base.py", line 905, in render_annotated
    return self.render(context)
  File "/usr/local/lib/python3.9/site-packages/oscar/templatetags/image_tags.py", line 113, in render
    raise e
  File "/usr/local/lib/python3.9/site-packages/oscar/templatetags/image_tags.py", line 110, in render
    return self._render(context)
  File "/usr/local/lib/python3.9/site-packages/oscar/templatetags/image_tags.py", line 126, in _render
    thumbnail = thumbnailer.generate_thumbnail(source, **options)
  File "/usr/local/lib/python3.9/site-packages/oscar/core/thumbnails.py", line 30, in generate_thumbnail
    return get_thumbnail(source, size, **opts)
  File "/usr/local/lib/python3.9/site-packages/sorl/thumbnail/shortcuts.py", line 8, in get_thumbnail
    return default.backend.get_thumbnail(file_, geometry_string, **options)
  File "/usr/local/lib/python3.9/site-packages/sorl/thumbnail/base.py", line 126, in get_thumbnail
    self._create_thumbnail(source_image, geometry_string, options,
  File "/usr/local/lib/python3.9/site-packages/sorl/thumbnail/base.py", line 159, in _create_thumbnail
    image = default.engine.create(source_image, geometry, options)
  File "/usr/local/lib/python3.9/site-packages/sorl/thumbnail/engines/base.py", line 20, in create
    image = self.scale(image, geometry, options)
  File "/usr/local/lib/python3.9/site-packages/sorl/thumbnail/engines/base.py", line 86, in scale
    image = self._scale(image, width, height)
  File "/usr/local/lib/python3.9/site-packages/sorl/thumbnail/engines/pil_engine.py", line 233, in _scale
    return image.resize((width, height), resample=Image.ANTIALIAS)

Exception Type: AttributeError at /dashboard/catalogue/
Exception Value: module 'PIL.Image' has no attribute 'ANTIALIAS'