Ticket #10186 (closed Feature Request: wontfix)

Opened 4 years ago

Last modified 11 months ago

Add a removeImageScales function

Reported by: frisi Owned by: witsch
Priority: minor Milestone: 4.x
Component: General Version:
Keywords: blob Cc: pelle

Description (last modified by witsch) (diff)

in a buildout with activated blobstorage recreating image scales in portal_atct fails with an AttributeError:

  Module Products.PageTemplates.Expressions, line 227, in evaluateText
  Module zope.tales.tales, line 696, in evaluate
   - URL: manage_imageScales
   - Line 35, Column 3
   - Expression: <PathExpr standard:'here/recreateImageScales'>
   - Names:
      {'container': <ATCTTool at /test/portal_atct>,
       'context': <ATCTTool at /test/portal_atct>,
       'default': <object object at 0xb77385c8>,
       'here': <ATCTTool at /test/portal_atct>,
       'loop': {},
       'nothing': None,
       'options': {'args': ()},
       'repeat': <Products.PageTemplates.Expressions.SafeMapping object at 0xa13b30c>,
       'request': <HTTPRequest, URL=http://localhost:8499/test/portal_atct/manage_imageScales>,
       'root': <Application at >,
       'template': <PageTemplateFile at /test/portal_atct/imageScales>,
       'user': <PropertiedUser 'meister'>}
  Module zope.tales.expressions, line 217, in __call__
  Module Products.PageTemplates.Expressions, line 157, in _eval
  Module Products.PageTemplates.Expressions, line 119, in render
  Module Products.ATContentTypes.tool.atct, line 103, in recreateImageScales
  Module Products.Archetypes.Field, line 2415, in createScales
   - __traceback_info__: (<Field image(blob:rw)>, <ATImage at /test/wm-schwarz-rgb-300dpi.png>, 'image_mini', 200, 200)
  Module Products.Archetypes.Field, line 2430, in _make_image
AttributeError: content_class
> .buildout/eggs/Products.Archetypes-1.6b2-py2.6.egg/Products/Archetypes/Field.py(2430)_make_image()
-> return self.content_class(id, title, file, content_type)

to reproduce:

using versions pinned in  http://dist.plone.org/release/4.0a4/versions.cfg

Change History

comment:1 Changed 4 years ago by frisi

  • Component changed from Unknown to Archetypes

comment:2 Changed 4 years ago by frisi

  • Component changed from Archetypes to Unknown

digging a bit further:

The recreateImageScales method uses createScales of Products.Archetypes.Field.ImageField which uses the _make_image function to create the actual content object.

Overwriting _make_image to return blobls is not enough, we'd need to patch recreateImagesScales as a whole. The ExtinsionBlobField in plone.app.blob.subtypes.image or one of it's mixins should define createScales.

Maybe simply removing all the scaled versions of the image is enough, since they seem to be created the first time they are accessed in plone.app.imaging.traverse

comment:3 Changed 4 years ago by esteele

  • Component changed from Unknown to Infrastructure

comment:4 Changed 4 years ago by pelle

  • Cc pelle added

comment:5 Changed 4 years ago by witsch

  • Owner set to witsch
  • Status changed from new to assigned
  • Description modified (diff)

reformat for better readability...

comment:6 Changed 4 years ago by witsch

(In [34441]) add a monkey-patch for createScales in order to fix portal_atct.recreateImageScales, which in turn allows for updating scale dimensions (refs #10186)

comment:7 Changed 4 years ago by witsch

  • Status changed from assigned to closed
  • Resolution set to fixed

(In [34459]) borrow the test from plone.app.imaging to make sure the fix to allow recreation of image scales also works with blobs (fixes #10186)

comment:8 Changed 4 years ago by witsch

(In [34460]) use the new version of createScales directly for blob-based content, so that the monkey-patch can eventually be removed again (refs #10186)

comment:9 follow-up: ↓ 11 Changed 4 years ago by frisi

  • Status changed from closed to reopened
  • Resolution fixed deleted

recreating imagescales works fine now, thanks witsch!

however, we've lost one of plone.app.imagings features (or at least "pleasant side-effects):

the blob for an image scale is created and stored the first time the scale is accessed. this is especially useful in case you defined some scales that are only needed for the imagefields of a certain type (eg /image_frontpage for items displayed on the frontpage)

now that we compute and store each available scale for each image when recreating image scales we

  • need some cpu power to process all images
  • use disk space for scales that would never have been accessed

what if we would remove all existing scales when recreateImageScales is called? personally, i think this would be the better choice.

comment:10 in reply to: ↑ description Changed 4 years ago by do3cc

Hi witsch,

https://dev.plone.org/plone/ticket/10347

I am not at all sure if this issue is related, but this behaviour also occurs with p.a.b b14

Also, as mentioned there, this does not happen with all images.

Maybe it is, if so, I hope it helps

comment:11 in reply to: ↑ 9 Changed 4 years ago by witsch

Replying to frisi:

however, we've lost one of plone.app.imagings features (or at least "pleasant side-effects):

right. that "side-effect" will be back with the new image scale implementation, though. please allow a few more days for polishing and making releases and give that a try. most of the invalidation issues should turn into no-issues with that...

what if we would remove all existing scales when recreateImageScales is called? personally, i think this would be the better choice.

+1, except that the method would need to be named removeImageScales then... ;)

comment:12 Changed 4 years ago by frisi

cool, eagerly waiting for the new release w/ more flexible tag generation ;-)

comment:13 Changed 4 years ago by davisagli

  • Priority changed from major to minor

Reducing priority as the main issue here is already fixed.

comment:14 Changed 4 years ago by hannosch

  • Milestone changed from 4.0 to 4.x
  • Type changed from Bug to Feature Request
  • Summary changed from recreateImageScales fails with plone.app.blob.subtypes.image to Add a removeImageScales function

The main issue here is solved. This is a feature request for a new removeImageScales function now.

comment:15 Changed 22 months ago by davisagli

  • Component changed from Infrastructure to General

comment:16 Changed 11 months ago by eleddy

  • Status changed from reopened to closed
  • Resolution set to wontfix

This ticket has not been modified in over 9 months. In another brazen attempt to clean this tracker up, this is closed. If you really, REALLY care about this ticket, please re-verify that it is still an issue on the current supported releases (4.2 or 4.3) and reopen. Better yet, submit a pull request to fix the bug and then close the bug properly. We <3 you and all of your effort, but we can't go on like this anymore. I hope you aren't too mad and we can still be friends. Hugs.

Note: See TracTickets for help on using tickets.