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:
parent
f3097fb0b7
commit
c58635853d
|
@ -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'])
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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,
|
||||
|
|
Reference in New Issue