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 1fa5a12d06
commit 44d46ad47b
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 ObjectDoesNotExist
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.contrib.contenttypes.models import ContentType
from taiga.base.api import serializers from taiga.base.api import serializers
from taiga.base.fields import JsonField from taiga.base.fields import JsonField
@ -68,6 +69,21 @@ class FileField(serializers.WritableField):
return ContentFile(decoded_data, name=data['name']) 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): class RelatedNoneSafeField(serializers.RelatedField):
def field_from_native(self, data, files, field_name, into): def field_from_native(self, data, files, field_name, into):
if self.read_only: 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, from .fields import (FileField, RelatedNoneSafeField, UserRelatedField,
UserPkField, CommentField, ProjectRelatedField, UserPkField, CommentField, ProjectRelatedField,
HistoryUserField, HistoryValuesField, HistoryDiffField, HistoryUserField, HistoryValuesField, HistoryDiffField,
TimelineDataField) TimelineDataField, ContentTypeField)
from .mixins import (HistoryExportSerializerMixin, from .mixins import (HistoryExportSerializerMixin,
AttachmentExportSerializerMixin, AttachmentExportSerializerMixin,
CustomAttributesValuesExportSerializerMixin, CustomAttributesValuesExportSerializerMixin,
@ -317,9 +317,10 @@ class WikiLinkExportSerializer(serializers.ModelSerializer):
class TimelineExportSerializer(serializers.ModelSerializer): class TimelineExportSerializer(serializers.ModelSerializer):
data = TimelineDataField() data = TimelineDataField()
data_content_type = ContentTypeField()
class Meta: class Meta:
model = timeline_models.Timeline model = timeline_models.Timeline
exclude = ('id', 'project', 'namespace', 'object_id') exclude = ('id', 'project', 'namespace', 'object_id', 'content_type')
class ProjectExportSerializer(WatcheableObjectModelSerializerMixin): class ProjectExportSerializer(WatcheableObjectModelSerializerMixin):

View File

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