Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 21 additions & 2 deletions api/base/serializers.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import collections
import re
from urlparse import urlparse

import furl
from django.core.urlresolvers import resolve, reverse, NoReverseMatch
Expand All @@ -10,6 +11,7 @@
from rest_framework import serializers as ser
from rest_framework.fields import SkipField
from rest_framework.fields import get_attribute as get_nested_attributes
from rest_framework.mixins import RetrieveModelMixin

from api.base import utils
from api.base.exceptions import InvalidQueryStringError
Expand Down Expand Up @@ -713,11 +715,28 @@ def to_representation(self, value):
raise SkipField

related_url = url['related']
related_path = urlparse(related_url).path
related_meta = self.get_meta_information(self.related_meta, value)
self_url = url['self']
self_meta = self.get_meta_information(self.self_meta, value)
return format_relationship_links(related_url, self_url, related_meta, self_meta)

relationship = format_relationship_links(related_url, self_url, related_meta, self_meta)
if related_url and (len(related_path.split('/')) & 1) == 1:
resolved_url = resolve(related_path)
related_class = resolved_url.func.view_class
if issubclass(related_class, RetrieveModelMixin):
related_type = resolved_url.namespace
try:
# TODO: change kwargs to preprint_provider_id and registration_id
if related_type == 'preprint_providers':
related_id = resolved_url.kwargs['provider_id']
elif related_type == 'registrations':
related_id = resolved_url.kwargs['node_id']
else:
related_id = resolved_url.kwargs[related_type[:-1] + '_id']
except KeyError:
return relationship
relationship['data'] = {'id': related_id, 'type': related_type}
return relationship

class FileCommentRelationshipField(RelationshipField):
def get_url(self, obj, view_name, request, format):
Expand Down
10 changes: 10 additions & 0 deletions api_tests/preprints/views/test_preprint_detail.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,11 @@ def test_preprint_detail(self, app, user, preprint, url, res, data):

# test contributors in preprint data
assert data['relationships'].get('contributors', None)
assert data['relationships']['contributors'].get('data', None) == None

# test node type and id in preprint data
assert data['relationships']['node']['data'].get('id', None) == preprint.node._id
assert data['relationships']['node']['data'].get('type', None) == 'nodes'

# test_preprint_node_deleted_detail_failure
deleted_node = ProjectFactory(creator=user, is_deleted=True)
Expand Down Expand Up @@ -520,6 +525,11 @@ def test_admin_can_update_license(self, admin_contrib, preprint, cc0_license, ur
assert res.status_code == 200
preprint.reload()

res_data = res.json['data']
pp_license_id = preprint.license.node_license._id
assert res_data['relationships']['license']['data'].get('id', None) == pp_license_id
assert res_data['relationships']['license']['data'].get('type', None) == 'licenses'

assert preprint.license.node_license == cc0_license
assert preprint.license.year == None
assert preprint.license.copyright_holders == []
Expand Down