Ticket #3428: full-history-r4459.diff
| File full-history-r4459.diff, 9.6 kB (added by ramiro <rm0 _at_ gmx.net>, 2 years ago) |
|---|
-
full-history/django/contrib/history/models.py
old new 22 22 class ChangeLogManager(models.Manager): 23 23 24 24 def get_version(self, object, **kwargs): 25 """26 Returns 'current-offset' revision of the 'object'27 """28 if not kwargs or not kwargs['offset']: offset=029 30 ct = ContentType.objects.get_for_model(object)31 32 if kwargs and kwargs['revision']:33 return self.get_query_set().filter(34 content_type=ct.id).filter(35 object_id=object.id).filter(36 pk=revision)[offset]37 else:38 return self.get_query_set().filter(39 content_type=ct.id).filter(40 object_id=object.id)[offset]25 """ 26 Returns 'current-offset' revision of the 'object' 27 """ 28 if not kwargs or not kwargs['offset']: offset=0 29 30 ct = ContentType.objects.get_for_model(object) 31 32 if kwargs and kwargs['revision']: 33 return self.get_query_set().filter( 34 content_type=ct.id).filter( 35 object_id=object.id).filter( 36 pk=revision)[offset] 37 else: 38 return self.get_query_set().filter( 39 content_type=ct.id).filter( 40 object_id=object.id)[offset] 41 41 42 42 def list_history(self, object, **kwargs): 43 """44 list_history(object): Returns a list of all revisions for that id.45 list_history(object, offset=X): Returns a list of last X revisions.46 """47 ct = ContentType.objects.get_for_model(object)48 if kwargs['offset']:49 return self.get_query_set().filter(50 content_type=ct.id).filter(51 object_id=object.id)[:kwargs['offset']]52 else:53 return ChangeLog.objects.filter(object_id=object.id)43 """ 44 list_history(object): Returns a list of all revisions for that id. 45 list_history(object, offset=X): Returns a list of last X revisions. 46 """ 47 ct = ContentType.objects.get_for_model(object) 48 if kwargs['offset']: 49 return self.get_query_set().filter( 50 content_type=ct.id).filter( 51 object_id=object.id)[:kwargs['offset']] 52 else: 53 return ChangeLog.objects.filter(object_id=object.id) 54 54 55 55 def version_by_date(self, object, date): 56 """57 Returns a list of revisions made at 'date'.58 """59 ct = ContentType.objects.get_for_model(object)60 return self.get_query_set().filter(61 content_type=ct.id).filter(62 change_time__exact=date)56 """ 57 Returns a list of revisions made at 'date'. 58 """ 59 ct = ContentType.objects.get_for_model(object) 60 return self.get_query_set().filter( 61 content_type=ct.id).filter( 62 change_time__exact=date) 63 63 64 64 ######################## 65 65 # Generic change model # … … 78 78 objects = ChangeLogManager() 79 79 80 80 class Meta: 81 verbose_name = _('changelog entry')82 verbose_name_plural = _('changelog entries')83 db_table = _('django_history_log')84 81 verbose_name = _('changelog entry') 82 verbose_name_plural = _('changelog entries') 83 db_table = _('django_history_log') 84 85 85 class Admin: 86 date_hierarchy = 'change_time'87 list_filter = ['change_time', 'change_type', 'content_type']88 fields = (89 ('Meta info', {'fields': ('change_time', 'content_type', 'object_id', 'user', 'comment'),}),90 ('Object', {'fields': ('object',),}),91 )86 date_hierarchy = 'change_time' 87 list_filter = ['change_time', 'change_type', 'content_type'] 88 fields = ( 89 ('Meta info', {'fields': ('change_time', 'content_type', 'object_id', 'user', 'comment'),}), 90 ('Object', {'fields': ('object',),}), 91 ) 92 92 93 list_display = ('__str__', 'user', 'change_type','comment', 'content_type', 'change_time', )94 93 list_display = ('__str__', 'user', 'change_type','comment', 'content_type', 'change_time', ) 94 95 95 def __str__(self): 96 return str(self.get_object())96 return str(self.get_object()) 97 97 98 98 def get_object(self): 99 """ Returns unpickled object. """100 return Pickle.loads(self.object)99 """ Returns unpickled object. """ 100 return Pickle.loads(self.object) 101 101 102 102 def get_rev_num(self): 103 """ Returns the ID/revision number of ChangeLog entry. """104 return self.id 103 """ Returns the ID/revision number of ChangeLog entry. """ 104 return self.id 105 105 106 106 ######################### 107 107 # Pre-save signal catch # … … 118 118 m = None 119 119 120 120 for model in models.get_models(): 121 try:122 if model.History:123 model_list.append({'module': model.__module__,124 'name': model.__name__})125 except:126 pass121 try: 122 if model.History: 123 model_list.append({'module': model.__module__, 124 'name': model.__name__}) 125 except: 126 pass 127 127 128 128 for model in model_list: 129 if model['name'] is instance.__class__.__name__:130 try:131 m = __import__(model['module'], '', '', [model['name']])132 #print model['module'],": ",model['name'],"- ",m133 print "Model import done: ",m134 except:135 print "Model import error."136 return False129 if model['name'] is instance.__class__.__name__: 130 try: 131 m = __import__(model['module'], '', '', [model['name']]) 132 #print model['module'],": ",model['name'],"- ",m 133 print "Model import done: ",m 134 except: 135 print "Model import error." 136 return False 137 137 138 138 return m 139 139 … … 152 152 print "Signal: ",kwargs['signal_name'] 153 153 154 154 if instance.__class__.__name__ is 'ChangeLog' or not hasattr(instance, 'History'): 155 print "Not history-enabled class."156 return 0155 print "Not history-enabled class." 156 return 0 157 157 158 158 #instance_name = instance.__class__.__name__ 159 159 #print instance_name … … 162 162 log = None 163 163 164 164 if im: 165 try:166 if kwargs['signal_name'] is 'pre_delete':167 print "Instance was last revision."168 old = instance169 log = ChangeLog(parent=instance, change_type='D', comment="Object deleted. Last revision.")170 elif ((kwargs['signal_name'] is 'pre_save') and instance.id):171 print "Instance has an ID."172 old = getattr(im, instance.__class__.__name__).objects.filter(pk=instance.id)[0]173 log = ChangeLog(parent=instance, change_type='U', comment="Update")174 else:175 print "Instance without an ID."176 old = instance177 instance.id = 0# FIX: ID cannot be None178 log = ChangeLog(parent=instance, change_type='A', comment="New")179 except:180 return 1165 try: 166 if kwargs['signal_name'] is 'pre_delete': 167 print "Instance was last revision." 168 old = instance 169 log = ChangeLog(parent=instance, change_type='D', comment="Object deleted. Last revision.") 170 elif ((kwargs['signal_name'] is 'pre_save') and instance.id): 171 print "Instance has an ID." 172 old = getattr(im, instance.__class__.__name__).objects.filter(pk=instance.id)[0] 173 log = ChangeLog(parent=instance, change_type='U', comment="Update") 174 else: 175 print "Instance without an ID." 176 old = instance 177 instance.id = 0 # FIX: ID cannot be None 178 log = ChangeLog(parent=instance, change_type='A', comment="New") 179 except: 180 return 1 181 181 else: 182 return 0 # exit wo/ an action182 return 0 # exit wo/ an action 183 183 184 184 # DEBUG 185 185 #print "Old: ",old … … 188 188 #print "Log: ",log.change_time 189 189 190 190 try: 191 log.object = Pickle.dumps(old, protocol=0)192 log.save()193 print "New change saved."191 log.object = Pickle.dumps(old) 192 log.save() 193 print "New change saved." 194 194 except: 195 print "ChangeLog faild to save changes."195 print "ChangeLog failed to save changes." 196 196 197 197 198 198 dispatcher.connect( save_new_revision, signal=signals.pre_save ) -
full-history/django/contrib/history/views/main.py
old new 11 11 def index(request): 12 12 changes_list = ChangeLog.objects.all() 13 13 return render_to_response('history/list.html', 14 {'changes_list': changes_list})14 {'changes_list': changes_list}) 15 15 16 16 def list(request): 17 17 changes_list = ChangeLog.objects.all() 18 18 return render_to_response('history/list.html', 19 {'changes_list': changes_list})19 {'changes_list': changes_list}) 20 20 21 21 22 22 def detail(request, change_id): … … 34 34 print "Change3: ",ch3 35 35 36 36 return render_to_response('history/detail.html', {'change': change, 37 'object': object,38 'change_fields': change._meta.fields,39 'object_fields': object._meta.fields,})37 'object': object, 38 'change_fields': change._meta.fields, 39 'object_fields': object._meta.fields,}) 40 40 41 41 def changes(request, parent_id): 42 42 changes_list = ChangeLog.objects.list_history(parent, offset=3) 43 43 return render_to_response('history/list.html', 44 {'changes_list': changes_list})44 {'changes_list': changes_list})
