Some fixes on export-import

remotes/origin/enhancement/email-actions
Jesús Espino 2015-01-29 18:48:38 +01:00
parent cc046b5555
commit a562c39168
1 changed files with 51 additions and 1 deletions

View File

@ -59,7 +59,55 @@ class AttachedFileField(serializers.WritableField):
return ContentFile(base64.b64decode(data['data']), name=data['name'])
class UserRelatedField(serializers.RelatedField):
class RelatedNoneSafeField(serializers.RelatedField):
def field_from_native(self, data, files, field_name, into):
if self.read_only:
return
try:
if self.many:
try:
# Form data
value = data.getlist(field_name)
if value == [''] or value == []:
raise KeyError
except AttributeError:
# Non-form data
value = data[field_name]
else:
value = data[field_name]
except KeyError:
if self.partial:
return
value = self.get_default_value()
if value in self.null_values:
if self.required:
raise ValidationError(self.error_messages['required'])
into[(self.source or field_name)] = None
elif self.many:
into[(self.source or field_name)] = [self.from_native(item) for item in value if self.from_native(item) is not None]
else:
into[(self.source or field_name)] = self.from_native(value)
class IssueRefField(RelatedNoneSafeField):
read_only = False
def to_native(self, obj):
if obj:
return obj.ref
return None
def from_native(self, data):
try:
return issues_models.Issue.objects.get(ref=data)
except issues_models.Issue.DoesNotExist:
return None
class UserRelatedField(RelatedNoneSafeField):
read_only = False
def to_native(self, obj):
@ -188,6 +236,7 @@ class HistoryExportSerializer(serializers.ModelSerializer):
snapshot = JsonField(required=False)
values = HistoryValuesField(required=False)
comment = CommentField(required=False)
delete_comment_date = serializers.DateTimeField(required=False)
delete_comment_user = HistoryUserField(required=False)
class Meta:
@ -342,6 +391,7 @@ class UserStoryExportSerializer(HistoryExportSerializerMixin, AttachmentExportSe
milestone = ProjectRelatedField(slug_field="name", required=False)
watchers = UserRelatedField(many=True, required=False)
modified_date = serializers.DateTimeField(required=False)
generated_from_issue = IssueRefField(required=False)
class Meta:
model = userstories_models.UserStory