Esempio n. 1
0
    def to_representation(self, data, envelope='data'):

        if isinstance(data, AbstractNode):
            if data.is_registration:
                serializer = RegistrationSerializer(data, context=self.context)
                return RegistrationSerializer.to_representation(
                    serializer, data)
            serializer = NodeSerializer(data, context=self.context)
            return NodeSerializer.to_representation(serializer, data)

        if isinstance(data, OSFUser):
            serializer = UserSerializer(data, context=self.context)
            return UserSerializer.to_representation(serializer, data)

        if isinstance(data, BaseFileNode):
            serializer = FileSerializer(data, context=self.context)
            return FileSerializer.to_representation(serializer, data)

        if isinstance(data, Institution):
            serializer = InstitutionSerializer(data, context=self.context)
            return InstitutionSerializer.to_representation(serializer, data)

        if isinstance(data, CollectionSubmission):
            serializer = CollectionSubmissionSerializer(data,
                                                        context=self.context)
            return CollectionSubmissionSerializer.to_representation(
                serializer, data)

        return None
Esempio n. 2
0
    def test_node_links_withdrawn_registration(self):
        factories.WithdrawnRegistrationFactory(registration=self.registration)

        req = make_drf_request_with_version(version='2.0')
        data = RegistrationSerializer(self.registration,
                                      context={
                                          'request': req
                                      }).data['data']
        assert_not_in('node_links', data['relationships'])

        req = make_drf_request_with_version(version='2.1')
        data = RegistrationSerializer(self.registration,
                                      context={
                                          'request': req
                                      }).data['data']
        assert_not_in('node_links', data['relationships'])
Esempio n. 3
0
 def test_node_links_bad_version_registration_serializer(self):
     req = make_drf_request_with_version(version='2.1')
     data = RegistrationSerializer(self.registration,
                                   context={
                                       'request': req
                                   }).data['data']
     assert_not_in('node_links', data['relationships'])
Esempio n. 4
0
 def test_node_links_allowed_version_registration_serializer(self):
     req = make_drf_request_with_version(version='2.0')
     data = RegistrationSerializer(self.registration,
                                   context={
                                       'request': req
                                   }).data['data']
     assert_in('node_links', data['attributes'])
Esempio n. 5
0
    def to_representation(self, data, envelope='data'):

        if isinstance(data, AbstractNode):
            if data.is_registration:
                serializer = RegistrationSerializer(data, context=self.context)
                return RegistrationSerializer.to_representation(serializer, data)
            serializer = NodeSerializer(data, context=self.context)
            return NodeSerializer.to_representation(serializer, data)

        if isinstance(data, OSFUser):
            serializer = UserSerializer(data, context=self.context)
            return UserSerializer.to_representation(serializer, data)

        if isinstance(data, BaseFileNode):
            serializer = FileSerializer(data, context=self.context)
            return FileSerializer.to_representation(serializer, data)

        if isinstance(data, Institution):
            serializer = InstitutionSerializer(data, context=self.context)
            return InstitutionSerializer.to_representation(serializer, data)

        if isinstance(data, CollectedGuidMetadata):
            serializer = CollectedMetaSerializer(data, context=self.context)
            return CollectedMetaSerializer.to_representation(serializer, data)

        return None
Esempio n. 6
0
    def test_serialization(self):
        user = UserFactory()
        req = make_drf_request()
        reg = RegistrationFactory(creator=user)
        result = RegistrationSerializer(reg, context={'request': req}).data
        data = result['data']
        assert_equal(data['id'], reg._id)
        assert_equal(data['type'], 'registrations')

        # Attributes
        attributes = data['attributes']
        assert_datetime_equal(parse_date(attributes['date_registered']),
                              reg.registered_date)
        assert_equal(attributes['retracted'], reg.is_retracted)

        # Relationships
        relationships = data['relationships']
        assert_in('registered_by', relationships)
        registered_by = relationships['registered_by']['links']['related'][
            'href']
        assert_equal(
            urlparse(registered_by).path,
            '/{}users/{}/'.format(API_BASE, user._id))
        assert_in('registered_from', relationships)
        registered_from = relationships['registered_from']['links']['related'][
            'href']
        assert_equal(
            urlparse(registered_from).path,
            '/{}nodes/{}/'.format(API_BASE, reg.registered_from._id))
Esempio n. 7
0
    def test_serialization(self):
        user = UserFactory()
        versioned_request = make_drf_request_with_version(version='2.2')
        registration = RegistrationFactory(creator=user)
        result = RegistrationSerializer(registration,
                                        context={
                                            'request': versioned_request
                                        }).data
        data = result['data']
        assert data['id'] == registration._id
        assert data['type'] == 'registrations'
        should_not_relate_to_registrations = [
            'registered_from',
            'registered_by',
            'registration_schema',
            'region',
            'provider',
            'storage',
            'groups',
            'original_response',
            'latest_response',
        ]

        # Attributes
        attributes = data['attributes']
        assert_datetime_equal(parse_date(attributes['date_registered']),
                              registration.registered_date)
        assert attributes['withdrawn'] == registration.is_retracted

        # Relationships
        relationships = data['relationships']

        # Relationships with data
        relationship_urls = {
            k: v['links']['related']['href']
            for k, v in relationships.items()
        }

        assert 'registered_by' in relationships
        registered_by = relationships['registered_by']['links']['related'][
            'href']
        assert urlparse(registered_by).path == '/{}users/{}/'.format(
            API_BASE, user._id)
        assert 'registered_from' in relationships
        registered_from = relationships['registered_from']['links']['related'][
            'href']
        assert urlparse(registered_from).path == '/{}nodes/{}/'.format(
            API_BASE, registration.registered_from._id)
        api_registrations_url = '/{}registrations/'.format(API_BASE)
        for relationship in relationship_urls:
            if relationship in should_not_relate_to_registrations:
                assert api_registrations_url not in relationship_urls[
                    relationship]
            else:
                assert api_registrations_url in relationship_urls[
                    relationship], 'For key {}'.format(relationship)
Esempio n. 8
0
    def to_representation(self, data, envelope='data'):

        if isinstance(data, AbstractNode):
            if data.is_registration:
                serializer = RegistrationSerializer(data, context=self.context)
                return RegistrationSerializer.to_representation(
                    serializer, data)
            serializer = NodeSerializer(data, context=self.context)
            return NodeSerializer.to_representation(serializer, data)

        if isinstance(data, User):
            serializer = UserSerializer(data, context=self.context)
            return UserSerializer.to_representation(serializer, data)

        if isinstance(data, FileNode):
            serializer = FileSerializer(data, context=self.context)
            return FileSerializer.to_representation(serializer, data)

        return None
Esempio n. 9
0
    def test_serialization(self):
        user = UserFactory()
        req = make_drf_request_with_version(version='2.0')
        reg = RegistrationFactory(creator=user)
        result = RegistrationSerializer(reg, context={'request': req}).data
        data = result['data']
        assert_equal(data['id'], reg._id)
        assert_equal(data['type'], 'registrations')
        should_not_relate_to_registrations = [
            'registered_from',
            'registered_by',
            'registration_schema'
        ]

        # Attributes
        attributes = data['attributes']
        assert_datetime_equal(
            parse_date(attributes['date_registered']),
            reg.registered_date
        )
        assert_equal(attributes['withdrawn'], reg.is_retracted)

        # Relationships
        relationships = data['relationships']
        relationship_urls = {}
        for relationship in relationships:
            relationship_urls[relationship]=relationships[relationship]['links']['related']['href']
        assert_in('registered_by', relationships)
        registered_by = relationships['registered_by']['links']['related']['href']
        assert_equal(
            urlparse(registered_by).path,
            '/{}users/{}/'.format(API_BASE, user._id)
        )
        assert_in('registered_from', relationships)
        registered_from = relationships['registered_from']['links']['related']['href']
        assert_equal(
            urlparse(registered_from).path,
            '/{}nodes/{}/'.format(API_BASE, reg.registered_from._id)
        )
        for relationship in relationship_urls:
            if relationship in should_not_relate_to_registrations:
                assert_not_in('/{}registrations/'.format(API_BASE), relationship_urls[relationship])
            else:
                assert_in('/{}registrations/'.format(API_BASE), relationship_urls[relationship],
                          'For key {}'.format(relationship))
Esempio n. 10
0
    def to_representation(self, data, envelope="data"):

        if isinstance(data, Node):
            if data.is_registration:
                serializer = RegistrationSerializer(data, context=self.context)
                return RegistrationSerializer.to_representation(serializer, data)
            serializer = NodeSerializer(data, context=self.context)
            return NodeSerializer.to_representation(serializer, data)

        if isinstance(data, User):
            serializer = UserSerializer(data, context=self.context)
            return UserSerializer.to_representation(serializer, data)

        if isinstance(data, FileNode):
            serializer = FileSerializer(data, context=self.context)
            return FileSerializer.to_representation(serializer, data)

        return None