Added pre_save_post_validation signal (#345)

This commit is contained in:
Ross Lawley 2013-06-04 09:35:44 +00:00
parent ef4b32aca7
commit 4244e7569b
5 changed files with 26 additions and 25 deletions

View File

@ -5,6 +5,7 @@ Changelog
Changes in 0.8.2
================
- Added pre_save_post_validation signal (#345)
- DateTimeField now auto converts valid datetime isostrings into dates (#343)
- DateTimeField now uses dateutil for parsing if available (#343)
- Fixed Doc.objects(read_preference=X) not setting read preference (#352)

View File

@ -195,7 +195,7 @@ class Document(BaseDocument):
the cascade save using cascade_kwargs which overwrites the
existing kwargs with custom values
"""
signals.pre_save_validation.send(self.__class__, document=self)
signals.pre_save.send(self.__class__, document=self)
if validate:
self.validate(clean=clean)
@ -207,7 +207,7 @@ class Document(BaseDocument):
created = ('_id' not in doc or self._created or force_insert)
signals.pre_save.send(self.__class__, document=self, created=created)
signals.pre_save_post_validation.send(self.__class__, document=self, created=created)
try:
collection = self._get_collection()

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
__all__ = ['pre_init', 'post_init', 'pre_save_validation', 'pre_save',
__all__ = ['pre_init', 'post_init', 'pre_save', 'pre_save_post_validation',
'post_save', 'pre_delete', 'post_delete']
signals_available = False
@ -38,8 +38,8 @@ _signals = Namespace()
pre_init = _signals.signal('pre_init')
post_init = _signals.signal('post_init')
pre_save_validation = _signals.signal('pre_save_validation')
pre_save = _signals.signal('pre_save')
pre_save_post_validation = _signals.signal('pre_save_post_validation')
post_save = _signals.signal('post_save')
pre_delete = _signals.signal('pre_delete')
post_delete = _signals.signal('post_delete')

View File

@ -57,7 +57,7 @@ if sys.version_info[0] == 3:
extra_opts['packages'].append("tests")
extra_opts['package_data'] = {"tests": ["fields/mongoengine.png", "fields/mongodb_leaf.png"]}
else:
extra_opts['tests_require'] = ['nose', 'coverage', 'blinker', 'django>=1.4.2', 'PIL', 'jinja2==2.6', 'python-dateutil==1.5']
extra_opts['tests_require'] = ['nose', 'coverage', 'blinker', 'django>=1.4.2', 'PIL', 'jinja2==2.6', 'python-dateutil']
extra_opts['packages'] = find_packages(exclude=('tests',))
setup(name='mongoengine',

View File

@ -40,12 +40,12 @@ class SignalTests(unittest.TestCase):
signal_output.append('post_init signal, %s' % document)
@classmethod
def pre_save_validation(cls, sender, document, **kwargs):
signal_output.append('pre_save_validation signal, %s' % document)
def pre_save(cls, sender, document, **kwargs):
signal_output.append('pre_save signal,, %s' % document)
@classmethod
def pre_save(cls, sender, document, **kwargs):
signal_output.append('pre_save signal, %s' % document)
def pre_save_post_validation(cls, sender, document, **kwargs):
signal_output.append('pre_save_post_validation signal, %s' % document)
if 'created' in kwargs:
if kwargs['created']:
signal_output.append('Is created')
@ -98,13 +98,13 @@ class SignalTests(unittest.TestCase):
def post_init(cls, sender, document, **kwargs):
signal_output.append('post_init Another signal, %s' % document)
@classmethod
def pre_save_validation(cls, sender, document, **kwargs):
signal_output.append('pre_save_validation Another signal, %s' % document)
@classmethod
def pre_save(cls, sender, document, **kwargs):
signal_output.append('pre_save Another signal, %s' % document)
@classmethod
def pre_save_post_validation(cls, sender, document, **kwargs):
signal_output.append('pre_save_post_validation Another signal, %s' % document)
if 'created' in kwargs:
if kwargs['created']:
signal_output.append('Is created')
@ -150,8 +150,8 @@ class SignalTests(unittest.TestCase):
self.pre_signals = (
len(signals.pre_init.receivers),
len(signals.post_init.receivers),
len(signals.pre_save_validation.receivers),
len(signals.pre_save.receivers),
len(signals.pre_save_post_validation.receivers),
len(signals.post_save.receivers),
len(signals.pre_delete.receivers),
len(signals.post_delete.receivers),
@ -161,8 +161,8 @@ class SignalTests(unittest.TestCase):
signals.pre_init.connect(Author.pre_init, sender=Author)
signals.post_init.connect(Author.post_init, sender=Author)
signals.pre_save_validation.connect(Author.pre_save_validation, sender=Author)
signals.pre_save.connect(Author.pre_save, sender=Author)
signals.pre_save_post_validation.connect(Author.pre_save_post_validation, sender=Author)
signals.post_save.connect(Author.post_save, sender=Author)
signals.pre_delete.connect(Author.pre_delete, sender=Author)
signals.post_delete.connect(Author.post_delete, sender=Author)
@ -171,8 +171,8 @@ class SignalTests(unittest.TestCase):
signals.pre_init.connect(Another.pre_init, sender=Another)
signals.post_init.connect(Another.post_init, sender=Another)
signals.pre_save_validation.connect(Another.pre_save_validation, sender=Another)
signals.pre_save.connect(Another.pre_save, sender=Another)
signals.pre_save_post_validation.connect(Another.pre_save_post_validation, sender=Another)
signals.post_save.connect(Another.post_save, sender=Another)
signals.pre_delete.connect(Another.pre_delete, sender=Another)
signals.post_delete.connect(Another.post_delete, sender=Another)
@ -185,8 +185,8 @@ class SignalTests(unittest.TestCase):
signals.post_delete.disconnect(self.Author.post_delete)
signals.pre_delete.disconnect(self.Author.pre_delete)
signals.post_save.disconnect(self.Author.post_save)
signals.pre_save_post_validation.disconnect(self.Author.pre_save_post_validation)
signals.pre_save.disconnect(self.Author.pre_save)
signals.pre_save_validation.disconnect(self.Author.pre_save_validation)
signals.pre_bulk_insert.disconnect(self.Author.pre_bulk_insert)
signals.post_bulk_insert.disconnect(self.Author.post_bulk_insert)
@ -195,8 +195,8 @@ class SignalTests(unittest.TestCase):
signals.post_delete.disconnect(self.Another.post_delete)
signals.pre_delete.disconnect(self.Another.pre_delete)
signals.post_save.disconnect(self.Another.post_save)
signals.pre_save_post_validation.disconnect(self.Another.pre_save_post_validation)
signals.pre_save.disconnect(self.Another.pre_save)
signals.pre_save_validation.disconnect(self.Another.pre_save_validation)
signals.post_save.disconnect(self.ExplicitId.post_save)
@ -204,8 +204,8 @@ class SignalTests(unittest.TestCase):
post_signals = (
len(signals.pre_init.receivers),
len(signals.post_init.receivers),
len(signals.pre_save_validation.receivers),
len(signals.pre_save.receivers),
len(signals.pre_save_post_validation.receivers),
len(signals.post_save.receivers),
len(signals.pre_delete.receivers),
len(signals.post_delete.receivers),
@ -239,8 +239,8 @@ class SignalTests(unittest.TestCase):
a1 = self.Author(name='Bill Shakespeare')
self.assertEqual(self.get_signal_output(a1.save), [
"pre_save_validation signal, Bill Shakespeare",
"pre_save signal, Bill Shakespeare",
"pre_save signal,, Bill Shakespeare",
"pre_save_post_validation signal, Bill Shakespeare",
"Is created",
"post_save signal, Bill Shakespeare",
"Is created"
@ -249,8 +249,8 @@ class SignalTests(unittest.TestCase):
a1.reload()
a1.name = 'William Shakespeare'
self.assertEqual(self.get_signal_output(a1.save), [
"pre_save_validation signal, William Shakespeare",
"pre_save signal, William Shakespeare",
"pre_save signal,, William Shakespeare",
"pre_save_post_validation signal, William Shakespeare",
"Is updated",
"post_save signal, William Shakespeare",
"Is updated"