From c9635159b1302f190725a64254e2454d670c8473 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Mon, 1 Apr 2013 21:08:34 +0200 Subject: [PATCH] Adding support in the API for issue history --- greenmine/scrum/serializers.py | 38 ++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/greenmine/scrum/serializers.py b/greenmine/scrum/serializers.py index 95008644..8b5d83a5 100644 --- a/greenmine/scrum/serializers.py +++ b/greenmine/scrum/serializers.py @@ -3,7 +3,7 @@ from rest_framework import serializers from greenmine.scrum.models import * from picklefield.fields import dbsafe_encode, dbsafe_decode -import json +import json, reversion class PickleField(serializers.WritableField): """ @@ -74,18 +74,44 @@ class TaskSerializer(serializers.ModelSerializer): class IssueSerializer(serializers.ModelSerializer): tags = PickleField() + history = serializers.SerializerMethodField('get_history') class Meta: model = Issue 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): - tags = PickleField() + for key in old_obj.keys(): + if key == 'modified_date': + continue - class Meta: - model = Issue - fields = () + if old_obj[key] == new_obj[key]: + continue + + 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):