Django

Code

Changeset 3588

Show
Ignore:
Timestamp:
08/14/06 18:28:23 (2 years ago)
Author:
utrebec
Message:

[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).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/full-history/django/contrib/history/models.py

    r3579 r3588  
    8484######################### 
    8585 
    86 def _get_enabled_models(): 
     86def _import_models(instance): 
    8787    """ Returns a list of History-enabled models. """ 
    8888    model_list = [] 
     89    m = None 
     90 
    8991    for model in models.get_models(): 
    9092        try: 
     
    9496        except: 
    9597            pass 
    96     return model_list 
     98 
     99    for model in model_list: 
     100        if model['name'] is instance.__class__.__name__: 
     101            try: 
     102                m = __import__(model['module'], '', '', [model['name']]) 
     103                #print model['module'],": ",model['name'],"- ",m 
     104                print "Model import done: ",m 
     105            except: 
     106                print "Model import error." 
     107 
     108    return m 
    97109 
    98110def save_new_revision(sender, instance, signal, *args, **kwargs): 
     
    109121    old = None 
    110122    log = None 
    111  
    112     for model in _get_enabled_models(): 
    113         if model['name'] is instance.__class__.__name__: 
    114             try: 
    115                 m = __import__(model['module'], '', '', [model['name']]) 
    116                 #print model['module'],": ",model['name'],"- ",m 
    117                 print "Model import done: ",m 
    118             except: 
    119                 print "Model import error." 
    120123     
    121     if m
     124    if _import_models(instance)
    122125        try: 
    123126            if instance.id: 
     
    136139        return 0  # exit wo/ an action 
    137140 
    138  
     141    # DEBUG 
    139142    print "Old: ",old 
    140143    print "Instance: ",instance.id 
    141144    #print "Test: ",getattr(instance, 'Admin').date_hierarchy 
    142145    print "Log: ",log 
     146 
    143147    log.object = Pickle.dumps(old, protocol=0) 
    144148    log.save() 
     149 
    145150    print "New change saved." 
    146      
    147151 
    148152dispatcher.connect( save_new_revision, signal=signals.pre_save ) 
     153     
     154########################### 
     155# Pre-delete signal catch # 
     156########################### 
     157 
     158def save_last_revision(sender, instance, signal, *args, **kwargs): 
     159    """ Saves the last copy of the record when the record is deleted.""" 
     160    print "Sender: ",sender 
     161 
     162    if instance.__class__.__name__ is 'ChangeLog' or not hasattr(instance, 'History'):  
     163        print "Not history-enabled class." 
     164        return 0 
     165 
     166    #instance_name = instance.__class__.__name__ 
     167    #print instance_name 
     168    m = None  
     169    old = None 
     170    log = None 
     171     
     172    if _import_models(instance): 
     173        try: 
     174            old = instance 
     175            log = ChangeLog(parent=instance, comment="Object deleted. Last revision.") 
     176            print "Log created." 
     177        except: 
     178            return 1 
     179 
     180    try: 
     181        log.object = Pickle.dumps(old, protocol=0) 
     182        log.save() 
     183        print "Last change saved." 
     184    except: 
     185        print "Failed!" 
     186 
     187dispatcher.connect( save_last_revision, signal=signals.pre_delete )