Ticket #3428: full-history-r4459.diff

File full-history-r4459.diff, 9.6 KB (added by ramiro <rm0 _at_ gmx.net>, 12 years ago)
  • django/contrib/history/models.py

    diff -x .svn -ru full-history.old/django/contrib/history/models.py full-history/django/contrib/history/models.py
    old new  
    2222class ChangeLogManager(models.Manager):
    2323
    2424    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=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]
     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]
    4141
    4242    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)
    5454
    5555    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)
    6363
    6464########################
    6565# Generic change model #
     
    7878    objects = ChangeLogManager()
    7979   
    8080    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       
    8585    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        )
    9292
    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       
    9595    def __str__(self):
    96         return str(self.get_object())
     96        return str(self.get_object())
    9797
    9898    def get_object(self):
    99         """ Returns unpickled object. """
    100         return Pickle.loads(self.object)
     99        """ Returns unpickled object. """
     100        return Pickle.loads(self.object)
    101101
    102102    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       
    105105
    106106#########################
    107107# Pre-save signal catch #
     
    118118    m = None
    119119
    120120    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             pass
     121        try:
     122            if model.History:
     123                model_list.append({'module': model.__module__,
     124                                   'name': model.__name__})
     125        except:
     126            pass
    127127
    128128    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'],"- ",m
    133                 print "Model import done: ",m
    134             except:
    135                 print "Model import error."
    136                 return False
     129        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
    137137
    138138    return m
    139139
     
    152152    print "Signal: ",kwargs['signal_name']
    153153
    154154    if instance.__class__.__name__ is 'ChangeLog' or not hasattr(instance, 'History'):
    155         print "Not history-enabled class."
    156         return 0
     155        print "Not history-enabled class."
     156        return 0
    157157
    158158    #instance_name = instance.__class__.__name__
    159159    #print instance_name
     
    162162    log = None
    163163   
    164164    if im:
    165         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
     165        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
    181181    else:
    182         return 0  # exit wo/ an action
     182        return 0  # exit wo/ an action
    183183
    184184    # DEBUG
    185185    #print "Old: ",old
     
    188188    #print "Log: ",log.change_time
    189189
    190190    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."
    194194    except:
    195         print "ChangeLog faild to save changes."
     195        print "ChangeLog failed to save changes."
    196196
    197197
    198198dispatcher.connect( save_new_revision, signal=signals.pre_save )
  • django/contrib/history/views/main.py

    diff -x .svn -ru full-history.old/django/contrib/history/views/main.py full-history/django/contrib/history/views/main.py
    old new  
    1111def index(request):
    1212    changes_list = ChangeLog.objects.all()
    1313    return render_to_response('history/list.html',
    14                               {'changes_list': changes_list})
     14                              {'changes_list': changes_list})
    1515
    1616def list(request):
    1717    changes_list = ChangeLog.objects.all()
    1818    return render_to_response('history/list.html',
    19                               {'changes_list': changes_list})
     19                              {'changes_list': changes_list})
    2020
    2121
    2222def detail(request, change_id):
     
    3434    print "Change3: ",ch3
    3535
    3636    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,})
    4040
    4141def changes(request, parent_id):
    4242    changes_list = ChangeLog.objects.list_history(parent, offset=3)
    4343    return render_to_response('history/list.html',
    44                               {'changes_list': changes_list})
     44                              {'changes_list': changes_list})
Back to Top