[Backport] Fixing timeline exportation

remotes/origin/issue/4795/notification_even_they_are_disabled
Jesús Espino 2016-06-17 11:41:58 +02:00 committed by Alejandro Alonso
parent 1ae1a18262
commit a3f642d160
3 changed files with 21 additions and 3 deletions

View File

@ -25,6 +25,7 @@ from django.core.files.base import ContentFile
from django.core.exceptions import ObjectDoesNotExist
from django.core.exceptions import ValidationError
from django.utils.translation import ugettext as _
from django.contrib.contenttypes.models import ContentType
from taiga.base.api import serializers
from taiga.base.fields import JsonField
@ -68,6 +69,21 @@ class FileField(serializers.WritableField):
return ContentFile(decoded_data, name=data['name'])
class ContentTypeField(serializers.RelatedField):
read_only = False
def to_native(self, obj):
if obj:
return [obj.app_label, obj.model]
return None
def from_native(self, data):
try:
return ContentType.objects.get_by_natural_key(*data)
except Exception:
return None
class RelatedNoneSafeField(serializers.RelatedField):
def field_from_native(self, data, files, field_name, into):
if self.read_only:

View File

@ -40,7 +40,7 @@ from taiga.projects.votes import services as votes_service
from .fields import (FileField, RelatedNoneSafeField, UserRelatedField,
UserPkField, CommentField, ProjectRelatedField,
HistoryUserField, HistoryValuesField, HistoryDiffField,
TimelineDataField)
TimelineDataField, ContentTypeField)
from .mixins import (HistoryExportSerializerMixin,
AttachmentExportSerializerMixin,
CustomAttributesValuesExportSerializerMixin,
@ -317,9 +317,10 @@ class WikiLinkExportSerializer(serializers.ModelSerializer):
class TimelineExportSerializer(serializers.ModelSerializer):
data = TimelineDataField()
data_content_type = ContentTypeField()
class Meta:
model = timeline_models.Timeline
exclude = ('id', 'project', 'namespace', 'object_id')
exclude = ('id', 'project', 'namespace', 'object_id', 'content_type')
class ProjectExportSerializer(WatcheableObjectModelSerializerMixin):

View File

@ -577,6 +577,7 @@ def _store_timeline_entry(project, timeline):
serialized.object.project = project
serialized.object.namespace = build_project_namespace(project)
serialized.object.object_id = project.id
serialized.object.content_type = ContentType.objects.get_for_model(project.__class__)
serialized.object._importing = True
serialized.save()
return serialized
@ -725,7 +726,7 @@ def store_project_from_dict(data, owner=None):
except err.TaigaImportError:
# reraise known inport errors
raise
except:
except Exception:
# reise unknown errors as import error
raise err.TaigaImportError(_("unexpected error importing project"), project)