class ArtistSerializer(SQASerializer): """ """ id = Field(t.String, read_only=True) name = Field(t.String) uri = Field(t.String, source='spotify_uri')
class HistorySerializer(SQASerializer): """ """ id = Field(t.String, read_only=True) track = Field(t.Nested(TrackSerializer)) user = Field(t.Nested(UserSerializer))
def test_field_allow_none_error_message(self): field = Field('name', String(), required=False, allow_none=False) error = None try: field.is_valid(None) except ValidationError as e: error = e.message self.assertEqual(error, 'This field can not be None')
def test_non_required_field_and_allow_none(self): """ensure that a non required field that does not allow null values raises an error when validating None """ field = Field('name', String(), required=False, allow_none=False) with self.assertRaises(ValidationError): field.is_valid(None)
def test_required_validation_error_message(self): field = Field('name', String()) error = None try: field.is_valid(None) except ValidationError as e: error = e.message self.assertEqual(error, 'This is a required field')
def test_extra_validators_run(self): mock_validator_1 = mock.MagicMock() mock_validator_2 = mock.MagicMock() mock_validator_3 = mock.MagicMock() validators = [mock_validator_1, mock_validator_2, mock_validator_3] field = Field('name', String(), extra_validators=validators) field.is_valid('string') self.assertTrue(mock_validator_1.called) self.assertTrue(mock_validator_2.called) self.assertTrue(mock_validator_3.called)
class TrackSerializer(BaseSpotifySerializer): """ Spotify track serializer """ class Album(BaseSpotifySerializer): pass class Artists(BaseSpotifySerializer): pass duration = Field(t.Integer) # ms album = Field(t.Nested(Album())) artists = Field(t.Collection(t.Nested(Artists())))
class AlbumSerializer(SQASerializer): """ """ id = Field(t.String, read_only=True) name = Field(t.String) uri = Field(t.String, source='spotify_uri') images = Field(t.BaseType) # # Relations # artists = Field(t.Collection(t.Nested(ArtistSerializer)))
def test_field_type_validate_method_called(self): """ensure that after a field has run validation against required etc, it calls the validate method of the provided field type """ mocked = mock.MagicMock() class MyValidateType(String): def validate(self, value): mocked() return super(MyValidateType, self).validate(value) field = Field('name', MyValidateType()) field.is_valid('string') self.assertTrue(mocked.called)
class UserSerializer(Serializer): """ Serializer for the User SQLAlchemy Model """ id = Field(t.String, read_only=True) given_name = Field(t.String) family_name = Field(t.String) display_name = Field(t.String) avatar_url = Field(t.String) spotify_playlists = Field(SpotifyPlaylistEndpoint(), source='id')
class TrackSerializer(SQASerializer): """ """ id = Field(t.String, read_only=True) name = Field(t.String) duration = Field(t.Integer) uri = Field(t.String, source='spotify_uri') play_count = Field(t.Integer, read_only=True) # # Relations # album = Field(t.Nested(AlbumSerializer, role=blacklist('artists'))) artists = Field(t.Collection(t.Nested(ArtistSerializer)))
class VolumeSerializer(Serializer): """ Validates altering the player volume. """ volume = Field(t.Integer, required=True) def validate_volume(self, value): """ Validates the Volume level, must be between 0 and 100. Arguments --------- value : int The proposed volume level """ if not value >= 0: raise ValidationError('Volume must be greater than 0') if not value <= 100: raise ValidationError('Volume must be less than 100')
class PlaylistSerializer(BaseSpotifySerializer): """ Spotify playlist serializer Returns following data s structure: { 'id': '4wtLaWQcPct5tlAWTxqjMD', 'name': 'The Happy Hipster', 'tracks': { 'playlist': url to user's spotify tracks, 'total': 186 } } """ class TrackSerializer(Serializer): """ Nested Track serializer Exposing url for tracks in playlist and total number of tracks in it """ total = Field(t.Integer) playlist = Field(t.String) tracks = Field(t.Nested(TrackSerializer()))
class TrackSerializer(Serializer): """ Nested Track serializer Exposing url for tracks in playlist and total number of tracks in it """ total = Field(t.Integer) playlist = Field(t.String)
class BaseSpotifySerializer(Serializer): id = Field(t.String) name = Field(t.String) uri = Field(t.String)
def test_read_only_field_is_valid_when_required_value_is_none(self): """ensure a read only field is always considered valid """ field = Field('name', String(), required=True, read_only=True) self.assertTrue(field.is_valid(None))
class PlaylistSerializer(Serializer): """ This schema is used for adding tracks to the player playlist. """ uri = Field(SpotifyURI, required=True)
def test_required_field_raises_error_when_value_is_none(self): field = Field('name', String()) with self.assertRaises(ValidationError): field.is_valid(None)