[Checkins] SVN: z3c.imagewidget/trunk/src/z3c/imagewidget/ The edit
form writes it's data to the session instead of applying it directly
Jürgen Kartnaller
juergen at kartnaller.at
Wed Jan 3 12:56:49 EST 2007
Log message for revision 71702:
The edit form writes it's data to the session instead of applying it directly
to the context. This must be done by the form.
Also fixed browser caching problems by providing a timestamp for the image
URL.
Changed:
U z3c.imagewidget/trunk/src/z3c/imagewidget/README.txt
U z3c.imagewidget/trunk/src/z3c/imagewidget/form.py
U z3c.imagewidget/trunk/src/z3c/imagewidget/tests.py
-=-
Modified: z3c.imagewidget/trunk/src/z3c/imagewidget/README.txt
===================================================================
--- z3c.imagewidget/trunk/src/z3c/imagewidget/README.txt 2007-01-03 16:21:02 UTC (rev 71701)
+++ z3c.imagewidget/trunk/src/z3c/imagewidget/README.txt 2007-01-03 17:56:48 UTC (rev 71702)
@@ -64,7 +64,7 @@
You can also generate the URL for the image for display:
>>> editForm.imageURL
- u'.../++session++z3c.sessionwidget.SessionInputWidget/field.img/++item++data/'
+ u'.../++session++z3c.sessionwidget.SessionInputWidget/field.img/++item++data?ts=0'
When uploading an empty image, the image is set to None:
@@ -190,7 +190,7 @@
>>> editForm.status
''
-So let us define som other data.
+So let us define some other data.
>>> editForm.handle_edit_action.success({'data': '%PNG...'})
>>> editForm.status
@@ -202,11 +202,12 @@
>>> imgWidget.session['data'].getImageSize()
(-1, -1)
-We now send our flower image again. Whis is stell larger than 100, 100
+We now send our flower image again. Which is still larger than 100, 100
of course.
>>> image.getImageSize()
(103, 118)
+ >>> editForm.status = ''
>>> editForm.handle_edit_action.success({'data': image.data})
>>> editForm.status
u'Image updated.'
@@ -215,5 +216,4 @@
>>> imgWidget.session['data'].getImageSize()
(87, 100)
-
Modified: z3c.imagewidget/trunk/src/z3c/imagewidget/form.py
===================================================================
--- z3c.imagewidget/trunk/src/z3c/imagewidget/form.py 2007-01-03 16:21:02 UTC (rev 71701)
+++ z3c.imagewidget/trunk/src/z3c/imagewidget/form.py 2007-01-03 17:56:48 UTC (rev 71702)
@@ -16,9 +16,17 @@
$Id$
"""
__docformat__ = "reStructuredText"
+
+import time
+
+from zope import event
+
from zope.formlib import form
from zope.publisher.browser import BrowserPage
from zope.traversing.browser.absoluteurl import absoluteURL
+from zope.lifecycleevent import ObjectCreatedEvent
+from zope.dublincore.interfaces import IZopeDublinCore
+
from zope.app.component import hooks
from zope.app.file.interfaces import IImage
from zope.app.file.image import Image
@@ -74,8 +82,8 @@
self.context.width,
self.context.height)
image = Image(imagedata)
+ event.notify(ObjectCreatedEvent(image))
self.context.session['data'] = image
- #self.context.setRenderedValue(image)
self.context.session['changed'] = True
@@ -99,19 +107,28 @@
if data['data'] == '':
self.widget.session['data'] = None
else:
- data['data'] = _resize(data['data'],
- self.widget.width,
- self.widget.height)
- if form.applyChanges(
- self.context, self.form_fields, data, self.adapters):
+ imagedata = _resize(data['data'],
+ self.widget.width,
+ self.widget.height)
+ sessionImg = self.widget.session['data']
+ if sessionImg is None or imagedata != sessionImg.data:
+ image = Image(imagedata)
+ event.notify(ObjectCreatedEvent(image))
+ self.widget.session['data'] = image
self.status = _('Image updated.')
self.widget.session['changed'] = True
@property
def imageURL(self):
baseURL = absoluteURL(hooks.getSite(), self.request)
- return baseURL + '/++session++%s/%s/++item++data/' %(
- SESSION_KEY, self.widget.name)
+ # we add a timestamp to the url to make sure the image is not cached
+ modified = IZopeDublinCore(self.widget.session['data']).modified
+ if modified is not None:
+ lmt = long(time.mktime(modified.timetuple()))
+ else:
+ lmt = 0
+ return baseURL + '/++session++%s/%s/++item++data?ts=%s' %(
+ SESSION_KEY, self.widget.name, lmt)
class ImageSessionWidgetForm(BrowserPage):
Modified: z3c.imagewidget/trunk/src/z3c/imagewidget/tests.py
===================================================================
--- z3c.imagewidget/trunk/src/z3c/imagewidget/tests.py 2007-01-03 16:21:02 UTC (rev 71701)
+++ z3c.imagewidget/trunk/src/z3c/imagewidget/tests.py 2007-01-03 17:56:48 UTC (rev 71702)
@@ -25,10 +25,16 @@
from zope.app.session.http import CookieClientIdManager
from zope.publisher.interfaces import IRequest
from zope.testing.doctestunit import DocFileSuite
+from zope.dublincore.testing import setUpDublinCore
from z3c.image.proc.adapter import ProcessableImage
+from zope.annotation.interfaces import IAttributeAnnotatable
+from zope.app.file.image import Image
+
def setUp(test):
setup.placefulSetUp()
+ setUpDublinCore()
+ zope.interface.classImplements(Image, IAttributeAnnotatable)
zope.component.provideAdapter(
session.ClientId, (IRequest,), interfaces.IClientId)
zope.component.provideAdapter(
More information about the Checkins
mailing list