author: Job van Achterberg
date: Wed Jul 31 12:05:12 2013 +0200
revision: 11849:be1f582902af in Products.Silva
branch: 2.4
details: https://hg.infrae.com/Products.Silva?cmd=changeset;node=be1f582902af
modified: Products/Silva/File/content.py Products/Silva/Folder/management.py Products/Silva/Image/content.py Products/Silva/tests/test_file.py Products/Silva/tests/test_folder_catalog.py Products/Silva/tests/test_folder_rename.py Products/Silva/tests/test_image.py
added:
removed:
log: folder/file/image : improved notifications for duplicate content id
handling
diffstat:
Products/Silva/File/content.py | 15 ++++++---------
Products/Silva/Folder/management.py | 3 ++-
Products/Silva/Image/content.py | 9 +++------
Products/Silva/tests/test_file.py | 7 +++++++
Products/Silva/tests/test_folder_catalog.py | 2 +-
Products/Silva/tests/test_folder_rename.py | 4 ++--
Products/Silva/tests/test_image.py | 10 ++++++++++
7 files changed, 31 insertions(+), 19 deletions(-)
diffs (129 lines):
diff -r 66d0eeae96f9 -r be1f582902af Products/Silva/File/content.py
--- a/Products/Silva/File/content.py Tue Jul 30 11:51:49 2013 +0200
+++ b/Products/Silva/File/content.py Wed Jul 31 12:05:12 2013 +0200
@@ -65,17 +65,14 @@
if ISilvaFactoryDispatcher.providedBy(container):
container = container.Destination()
- name_chooser = ISilvaNameChooser(container)
- identifier = name_chooser.chooseName(
+ chooser = ISilvaNameChooser(container)
+ identifier = chooser.chooseName(
identifier or filename, None, file=file, interface=interfaces.IAsset)
try:
- name_chooser.checkName(identifier, None)
- except ContentError:
- raise ValueError(_(u"Invalid computed identifier."))
- identifier = str(identifier)
- if identifier in context.objectIds():
- raise ValueError(
- _(u"Duplicate id. Please provide an explicit id."))
+ chooser.checkName(identifier, None)
+ except ContentError as e:
+ raise ValueError(_(u"Please provide a unique id: ${reason}",
+ mapping=dict(reason=e.reason)))
service = getUtility(IFilesService)
context._setObject(identifier, service.new_file(identifier))
content = context._getOb(identifier)
diff -r 66d0eeae96f9 -r be1f582902af Products/Silva/Folder/management.py
--- a/Products/Silva/Folder/management.py Tue Jul 30 11:51:49 2013 +0200
+++ b/Products/Silva/Folder/management.py Wed Jul 31 12:05:12 2013 +0200
@@ -195,7 +195,8 @@
ISilvaNameChooser(self.context).checkName(
to_identifier, content)
except ContentError as e:
- result = e
+ result = ContainerError(reason=e.reason,
+ content=content)
if result is None:
content = self.__move(
content, self.context, from_identifier, to_identifier)
diff -r 66d0eeae96f9 -r be1f582902af Products/Silva/Image/content.py
--- a/Products/Silva/Image/content.py Tue Jul 30 11:51:49 2013 +0200
+++ b/Products/Silva/Image/content.py Wed Jul 31 12:05:12 2013 +0200
@@ -80,12 +80,9 @@
identifier or filename, None, file=file, interface=interfaces.IAsset)
try:
name_chooser.checkName(identifier, None)
- except ContentError:
- raise ValueError(_(u"Invalid computed identifier."))
- identifier = str(identifier)
- if identifier in context.objectIds():
- raise ValueError(
- _(u"Duplicate id. Please provide an explicit id."))
+ except ContentError as e:
+ raise ValueError(_(u"Please provide a unique id: ${reason}",
+ mapping=dict(reason=e.reason)))
context._setObject(identifier, Image(identifier))
content = context._getOb(identifier)
if title is not None:
diff -r 66d0eeae96f9 -r be1f582902af Products/Silva/tests/test_file.py
--- a/Products/Silva/tests/test_file.py Tue Jul 30 11:51:49 2013 +0200
+++ b/Products/Silva/tests/test_file.py Wed Jul 31 12:05:12 2013 +0200
@@ -56,6 +56,13 @@
'modificationtime': DateTime('2010-04-25T12:00:00Z')})
return content
+ def test_duplicate_id(self):
+ """Test whether a file upload with a duplicate ID throws a ValueError
+ """
+ self.create_test_file('test1.zip')
+ with self.assertRaises(ValueError):
+ self.create_test_file('test1.zip')
+
def test_content_image(self):
"""Test base content methods on a file that contains an image.
"""
diff -r 66d0eeae96f9 -r be1f582902af Products/Silva/tests/test_folder_catalog.py
--- a/Products/Silva/tests/test_folder_catalog.py Tue Jul 30 11:51:49 2013 +0200
+++ b/Products/Silva/tests/test_folder_catalog.py Wed Jul 31 12:05:12 2013 +0200
@@ -151,7 +151,7 @@
self.search(path='/root'),
[('/root', 'unapproved')])
- def test_add_deletion_translaction(self):
+ def test_add_deletion_transaction(self):
"""Add an remove a folder The catalog content should not change.
"""
with CatalogTransaction():
diff -r 66d0eeae96f9 -r be1f582902af Products/Silva/tests/test_folder_rename.py
--- a/Products/Silva/tests/test_folder_rename.py Tue Jul 30 11:51:49 2013 +0200
+++ b/Products/Silva/tests/test_folder_rename.py Wed Jul 31 12:05:12 2013 +0200
@@ -7,7 +7,7 @@
from silva.core.interfaces import IContainerManager
from silva.core.interfaces import IPublicationWorkflow
from silva.core.interfaces import IAutoTOC, ILink, IFolder
-from silva.core.interfaces import ContentError
+from silva.core.interfaces import ContentError, ContainerError
from zope.interface.verify import verifyObject
from Products.Silva.testing import FunctionalLayer
@@ -94,7 +94,7 @@
with manager.renamer() as renamer:
self.assertIsInstance(
renamer((self.root.folder.toc, 'link', None)),
- ContentError)
+ ContainerError)
self.assertTrue('toc' in self.root.folder.objectIds())
self.assertTrue('link' in self.root.folder.objectIds())
diff -r 66d0eeae96f9 -r be1f582902af Products/Silva/tests/test_image.py
--- a/Products/Silva/tests/test_image.py Tue Jul 30 11:51:49 2013 +0200
+++ b/Products/Silva/tests/test_image.py Wed Jul 31 12:05:12 2013 +0200
@@ -90,6 +90,16 @@
self.assertEquals((960, 1280), pil_image.size)
self.assertEquals('JPEG', pil_image.format)
+ def test_upload_image_with_existing_id(self):
+ factory = self.root.manage_addProduct['Silva']
+
+ with self.layer.open_fixture('photo.tif') as image:
+ factory.manage_addImage('test_image_id', 'Test Image 1', image)
+ with self.assertRaises(ValueError) as error:
+ factory.manage_addImage('test_image_id', 'Test Image 2', image)
+
+ self.assertEqual(str(error.exception), "Please provide a unique id: ${reason}")
+
def test_rename_image(self):
"""Move an image and check that the filename is updated correctly.
"""
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.