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
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'])
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'])
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'])
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
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))
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)
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
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))
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