change the index name and definition to avoid bad index on mail contained elements. Add a specific method linked to the index.

This commit is contained in:
Stephan Geulette 2013-03-12 13:04:57 +01:00
parent f3097fb0b7
commit c58635853d
3 changed files with 25 additions and 12 deletions

View File

@ -11,6 +11,7 @@ from five import grok
from Products.CMFPlone.utils import getToolByName
#from plone.dexterity.content import Container
from plone.dexterity.schema import DexteritySchemaPolicy
from plone.indexer import indexer
from z3c.form import validator
from collective.dms.basecontent.relateddocs import RelatedDocs
@ -46,8 +47,7 @@ class InternalReferenceIncomingMailValidator(validator.SimpleFieldValidator):
def validate(self, value):
#we call the already defined validators
#super(InternalReferenceValidator, self).validate(value)
#import ipdb; ipdb.set_trace()
validateIndexValueUniqueness(self.context, 'dmsincomingmail', 'internal_reference_no', value)
validateIndexValueUniqueness(self.context, 'dmsincomingmail', 'internal_reference_number', value)
class IDmsIncomingMail(IDmsDocument):
@ -130,6 +130,16 @@ def internalReferenceIncomingMailDefaultValue(data):
'collective.dms.mailcontent.browser.settings.IDmsMailConfig.incomingmail_talexpression')
@indexer(IDmsIncomingMail)
def internalReferenceNoIndexer(obj):
"""
specific indexer method to avoid acquisition of dmsincomingmail contained elements.
internal_reference_number is the fake attribute name
"""
return obj.internal_reference_no
grok.global_adapter(internalReferenceNoIndexer, name="internal_reference_number")
class DmsIncomingMail(DmsDocument):
""" """
implements(IDmsIncomingMail)
@ -190,8 +200,7 @@ class InternalReferenceOutgoingMailValidator(validator.SimpleFieldValidator):
def validate(self, value):
#we call the already defined validators
#super(InternalReferenceValidator, self).validate(value)
#import ipdb; ipdb.set_trace()
validateIndexValueUniqueness(self.context, 'dmsoutgoingmail', 'internal_reference_no', value)
validateIndexValueUniqueness(self.context, 'dmsoutgoingmail', 'internal_reference_number', value)
validator.WidgetValidatorDiscriminators(InternalReferenceOutgoingMailValidator,
field=IDmsOutgoingMail['internal_reference_no'])

View File

@ -1,7 +1,7 @@
<?xml version="1.0"?>
<object name="portal_catalog">
<index name="internal_reference_no" meta_type="FieldIndex">
<indexed_attr value="internal_reference_no"/>
<index name="internal_reference_number" meta_type="FieldIndex">
<indexed_attr value="internal_reference_number"/>
</index>
<column value="internal_reference_no"/>
<column value="internal_reference_number"/>
</object>

View File

@ -34,21 +34,25 @@ class TestDmsmailMethods(TestContentTypes):
'title': 'Test 1'})
#test with container as context, value doesn't exist
self.assertEquals(dmsmail.validateIndexValueUniqueness(self.portal, 'dmsincomingmail',
'internal_reference_no', '54321'), None)
'internal_reference_number', '54321'), None)
#test with container as context, value exists
self.assertRaisesRegexp(Invalid, u"This value is already used", dmsmail.validateIndexValueUniqueness,
*[self.portal, 'dmsincomingmail', 'internal_reference_no', '12345'])
*[self.portal, 'dmsincomingmail', 'internal_reference_number', '12345'])
#test with object as context, value doesn't exist
self.assertEquals(dmsmail.validateIndexValueUniqueness(imail1, 'dmsincomingmail',
'internal_reference_no', '54321'), None)
'internal_reference_number', '54321'), None)
#test with object as context, value exists on the same object
self.assertEquals(dmsmail.validateIndexValueUniqueness(imail1, 'dmsincomingmail',
'internal_reference_no', '12345'), None)
'internal_reference_number', '12345'), None)
#test with object as context and a sub element in the folder, value exists on the same object
imail2 = createContentInContainer(imail1, 'dmsmainfile', **{'title': 'File 1'})
self.assertEquals(dmsmail.validateIndexValueUniqueness(imail1, 'dmsincomingmail',
'internal_reference_number', '12345'), None)
#test with object as context, value exists on a different object too
imail2 = createContentInContainer(self.portal, 'dmsincomingmail',
**{'internal_reference_no': '12345', 'title': 'Test 2'})
self.assertRaisesRegexp(Invalid, u"This value is already used", dmsmail.validateIndexValueUniqueness,
*[imail2, 'dmsincomingmail', 'internal_reference_no', '12345'])
*[imail2, 'dmsincomingmail', 'internal_reference_number', '12345'])
def test_evaluateInternalReference(self):
self.assertEquals(dmsmail.evaluateInternalReference(self.portal, self.portal.REQUEST,