Adding support in the API for issue history

remotes/origin/enhancement/email-actions
Alejandro Alonso 2013-04-01 21:08:34 +02:00
parent 1254707788
commit c9635159b1
1 changed files with 32 additions and 6 deletions

View File

@ -3,7 +3,7 @@ from rest_framework import serializers
from greenmine.scrum.models import * from greenmine.scrum.models import *
from picklefield.fields import dbsafe_encode, dbsafe_decode from picklefield.fields import dbsafe_encode, dbsafe_decode
import json import json, reversion
class PickleField(serializers.WritableField): class PickleField(serializers.WritableField):
""" """
@ -74,18 +74,44 @@ class TaskSerializer(serializers.ModelSerializer):
class IssueSerializer(serializers.ModelSerializer): class IssueSerializer(serializers.ModelSerializer):
tags = PickleField() tags = PickleField()
history = serializers.SerializerMethodField('get_history')
class Meta: class Meta:
model = Issue model = Issue
fields = () fields = ()
def get_issues_diff(self, old_issue_version, new_issue_version):
old_obj = old_issue_version.field_dict
new_obj = new_issue_version.field_dict
diff_dict = {'modified_date':new_obj['modified_date']}
class IssueSerializer(serializers.ModelSerializer): for key in old_obj.keys():
tags = PickleField() if key == 'modified_date':
continue
class Meta: if old_obj[key] == new_obj[key]:
model = Issue continue
fields = ()
diff_dict[key] = {
'old': old_obj[key],
'new': new_obj[key],
}
return diff_dict
def get_history(self, obj):
#TODO: add comments info
diff_list = []
current = None
for version in reversed(list(reversion.get_for_object(obj))):
if current:
issues_diff = self.get_issues_diff(current, version)
diff_list.append(issues_diff)
current = version
return diff_list
class SeveritySerializer(serializers.ModelSerializer): class SeveritySerializer(serializers.ModelSerializer):