1
0
mirror of https://github.com/django/django.git synced 2025-07-04 17:59:13 +00:00

[full-history]

* Added save_last_revision() for when the record is deleted.
* Renamed _get_enabled_models() to _import_models()
* Moved the "import" stuff to _import_models() so it can be used everywhere
* Added "pre-delete signal" connect
* BUG: save_new_revision() stopped working (EOFError on line 42 - get_object() function).



git-svn-id: http://code.djangoproject.com/svn/django/branches/full-history@3588 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Uroš Trebec 2006-08-14 23:28:23 +00:00
parent ca86ceec83
commit 402f00a893

View File

@ -83,9 +83,11 @@ def version_by_date(self, date):
# Pre-save signal catch #
#########################
def _get_enabled_models():
def _import_models(instance):
""" Returns a list of History-enabled models. """
model_list = []
m = None
for model in models.get_models():
try:
if model.History:
@ -93,7 +95,17 @@ def _get_enabled_models():
'name': model.__name__})
except:
pass
return model_list
for model in model_list:
if model['name'] is instance.__class__.__name__:
try:
m = __import__(model['module'], '', '', [model['name']])
#print model['module'],": ",model['name'],"- ",m
print "Model import done: ",m
except:
print "Model import error."
return m
def save_new_revision(sender, instance, signal, *args, **kwargs):
""" Saves a old copy of the record into the History table."""
@ -108,17 +120,8 @@ def save_new_revision(sender, instance, signal, *args, **kwargs):
m = None
old = None
log = None
for model in _get_enabled_models():
if model['name'] is instance.__class__.__name__:
try:
m = __import__(model['module'], '', '', [model['name']])
#print model['module'],": ",model['name'],"- ",m
print "Model import done: ",m
except:
print "Model import error."
if m:
if _import_models(instance):
try:
if instance.id:
old = getattr(m, model['name']).objects.filter(pk=instance.id)[0]
@ -135,14 +138,50 @@ def save_new_revision(sender, instance, signal, *args, **kwargs):
else:
return 0 # exit wo/ an action
# DEBUG
print "Old: ",old
print "Instance: ",instance.id
#print "Test: ",getattr(instance, 'Admin').date_hierarchy
print "Log: ",log
log.object = Pickle.dumps(old, protocol=0)
log.save()
print "New change saved."
dispatcher.connect( save_new_revision, signal=signals.pre_save )
###########################
# Pre-delete signal catch #
###########################
def save_last_revision(sender, instance, signal, *args, **kwargs):
""" Saves the last copy of the record when the record is deleted."""
print "Sender: ",sender
if instance.__class__.__name__ is 'ChangeLog' or not hasattr(instance, 'History'):
print "Not history-enabled class."
return 0
#instance_name = instance.__class__.__name__
#print instance_name
m = None
old = None
log = None
if _import_models(instance):
try:
old = instance
log = ChangeLog(parent=instance, comment="Object deleted. Last revision.")
print "Log created."
except:
return 1
try:
log.object = Pickle.dumps(old, protocol=0)
log.save()
print "Last change saved."
except:
print "Failed!"
dispatcher.connect( save_last_revision, signal=signals.pre_delete )