class AlbumSchema(ma.SQLAlchemyAutoSchema): class Meta: model = Album dump_only = ["user_rating"] album_type = ma.String( validate=[Length( max=20), OneOf(["album", "compilation", "single"])]) artist = ma.Nested("ArtistSchema", only=("id", "href", "name", "object_type", "uri")) copyright = ma.String(required=True, validate=Length(max=100)) copyright_type = ma.String(required=True, validate=[Length(max=1), OneOf(["C", "P"])]) genre = ma.String(required=True, validate=Length(max=20)) href = ma.String() label = ma.String(required=True, validate=Length(max=50)) name = ma.String(required=True) release_date = ma.Integer(required=True, validate=Range(min=1, max=2020)) release_date_precision = ma.String(required=True, validate=Equal("year")) object_type = ma.String(required=True, validate=Equal("album")) tracks = ma.Nested("TrackSchema", many=True, only=("id", "href", "name", "duration_ms", "duration_min", "duration_sec", "explicit", "popularity", "uri", "user_rating")) uri = ma.String() user_rating = ma.Integer(validate=Range(min=1, max=5))
class BackendConfigurationSchema(BaseSchema): """Schema for BackendConfiguration.""" # Required properties. backend_name = String(required=True) backend_version = String(required=True, validate=Regexp("[0-9]+.[0-9]+.[0-9]+$")) n_qubits = Integer(required=True, validate=Or([Equal(-1), Range(min=1)])) basis_gates = List(String(), required=True, validate=Length(min=1)) gates = Nested(GateConfigSchema, required=True, many=True) local = Boolean(required=True) simulator = Boolean(required=True) conditional = Boolean(required=True) open_pulse = Boolean(required=True, validate=Equal(False)) # Optional properties. sample_name = String() coupling_map = List(List(Integer(), validate=Length(min=1)), validate=Length(min=1)) n_registers = Integer(validate=Range(min=1)) register_map = List(List(Integer(validate=OneOf([0, 1])), validate=Length(min=1)), validate=Length(min=1)) configurable = Boolean() credits_required = Boolean() online_date = DateTime() display_name = String() description = String() tags = List(String())
class AlbumSchema(MobileClientSchema): """ **Validates**:: { 'albumArtist': 'albumArtist', 'albumArtRef': 'albumArtRef', 'albumId': 'albumId', 'artist': 'artist', 'artistId': ['artistId'], 'contentType': 'contentType', 'description': 'description', 'description_attribution': ATTRIBUTION, 'explicitType': 'explicitType', 'kind': 'sj#album', 'name': 'name', 'tracks': [STORE_TRACK], 'year': 2000 } """ albumArtist = fields.Str() albumArtRef = fields.Str() albumId = fields.Str(required=True) artist = fields.Str() artistId = fields.List(fields.Str) contentType = fields.Str() description = fields.Str() description_attribution = fields.Nested(AttributionSchema) explicitType = fields.Str() kind = fields.Str(required=True, validate=Equal('sj#album')) name = fields.Str(required=True) tracks = fields.Nested(StoreTrackSchema, many=True) year = fields.Int()
class WizardSchema(BaseSchema): xivo_uuid = fields.UUID(dump_only=True) admin_username = fields.Constant(constant='root', dump_only=True) admin_password = fields.String(validate=Regexp(ADMIN_PASSWORD_REGEX), required=True) license = StrictBoolean(validate=Equal(True), required=True) language = fields.String(validate=OneOf(['en_US', 'fr_FR']), missing='en_US') entity_name = fields.String(validate=Length(min=3, max=64), required=True) timezone = fields.String(validate=Length(max=128), required=True) network = fields.Nested(WizardNetworkSchema, required=True) context_internal = fields.Nested(WizardContextInternalSchema, required=True) context_outcall = fields.Nested(WizardContextOutcallSchema, missing=WizardContextOutcallSchema().load( {}).data) context_incall = fields.Nested(WizardContextIncallSchema, missing=WizardContextIncallSchema().load( {}).data) @validates('entity_name') def validate_entity_name(self, entity_name): sub_name = ''.join(c for c in entity_name if c.isalnum()) if len(sub_name) < 3: raise ValidationError( 'Shorter than alphanumeric minimum length 3.')
class RadioSeedSchema(MobileClientSchema): """ **Validates**:: { 'albumId': 'albumId', 'artistId': 'artistId', 'curatedStationId': 'curatedStationId', 'genreId': 'genreId', 'kind': 'sj#radioSeed', 'metadataSeed': RADIO_SEED_METADATA, 'seedType': 'seedType', 'trackId': 'trackId', 'trackLockerId': 'trackLockerId' } """ albumId = fields.Str() artistId = fields.Str() curatedStationId = fields.Str() genreId = fields.Str() kind = fields.Str(required=True, validate=Equal('sj#radioSeed')) metadataSeed = fields.Nested(RadioSeedMetadataSchema) seedType = fields.Str(required=True) trackId = fields.Str() trackLockerId = fields.Str()
class ArtistSchema(MobileClientSchema): """ **Validates**:: { 'albums': [ALBUM], 'artistArtRef': 'artistArtRef', 'artistArtRefs': [IMAGE_REF], 'artistBio': 'artistBio', 'artistId': 'artistId', 'artist_bio_attribution': ATTRIBUTION, 'kind': 'sj#artist', 'name': 'name', 'related_artists': [], 'topTracks': [STORE_TRACK], 'total_albums': 1 } """ albums = fields.Nested(AlbumSchema, many=True) artistArtRef = fields.Str() artistArtRefs = fields.Nested(ImageRefSchema, many=True) artistBio = fields.Str() artistId = fields.Str() artist_bio_attribution = fields.Nested(AttributionSchema) kind = fields.Str(required=True, validate=Equal('sj#artist')) name = fields.Str(required=True) related_artists = fields.Nested('ArtistSchema', many=True) topTracks = fields.Nested(StoreTrackSchema, many=True) total_albums = fields.Int()
class SharedPlaylistEntrySchema(MobileClientSchema): """ **Validates**:: { 'absolutePosition': 'absolutePosition', 'creationTimestamp': 'creationTimestamp', 'deleted': False, 'id': 'id', 'kind': 'sj#playlistEntry', 'lastModifiedTimestamp': 'lastModifiedTimestamp', 'source': 'source', 'track': STORE_TRACK, 'trackId': 'trackId' } """ absolutePosition = fields.Str(required=True) creationTimestamp = fields.Str(required=True) deleted = fields.Bool(required=True) id = fields.Str(required=True) kind = fields.Str(required=True, validate=Equal('sj#playlistEntry')) lastModifiedTimestamp = fields.Str(required=True) source = fields.Str() track = fields.Nested(StoreTrackSchema) trackId = fields.Str(required=True)
class ImageRefSchema(MobileClientSchema): """ **Validates**:: { 'aspectRatio': 'aspectRatio', 'autogen': False, 'colorStyles': { 'accent': { 'blue': 0, 'green': 0, 'red': 0 }, 'primary': { 'blue': 0, 'green': 0, 'red': 0 }, 'scrim': { 'blue': 0, 'green': 0, 'red': 0 } }, 'kind': 'sj#imageRef', 'url': 'url' } """ aspectRatio = fields.Str() autogen = fields.Bool() colorStyles = fields.Nested(ImageColorStylesSchema) kind = fields.Str(required=True, validate=Equal('sj#imageRef')) url = fields.Str(required=True)
class ListenNowItemSchema(MobileClientSchema): """ **Validates**:: { 'album': LISTEN_NOW_ALBUM, 'compositeArtRefs': [IMAGE_REF], 'images': [IMAGE_REF], 'kind': 'sj#listennowitem', 'radio_station': LISTEN_NOW_RADIO_STATION, 'suggestion_reason': 'suggestion_reason', 'suggestion_text': 'suggestion_text', 'type': 'type' } """ album = fields.Nested(ListenNowAlbumSchema) compositeArtRefs = fields.Nested(ImageRefSchema, many=True) images = fields.Nested(ImageRefSchema, many=True) kind = fields.Str(required=True, validate=Equal('sj#listennowitem')) radio_station = fields.Nested(ListenNowRadioStationSchema) suggestion_reason = fields.Str(required=True) suggestion_text = fields.Str(required=True) type = fields.Str(required=True)
class WebPushCrypto06HeaderSchema(Schema): """Validates WebPush Message Encryption Uses draft-ietf-httpbis-encryption-encoding-06 rules for validation """ content_encoding = fields.String(required=True, load_from="content-encoding", validate=Equal("aes128gcm")) encryption = fields.String(required=False) crypto_key = fields.String(required=False, load_from="crypto-key") @validates("encryption") def validate_encryption(self, value): if CryptoKey.parse_and_get_label(value, "salt"): raise InvalidRequest( "Do not include 'salt' in aes128gcm " "Encryption header", status_code=400, errno=110) @validates("crypto_key") def validate_crypto_key(self, value): if CryptoKey.parse_and_get_label(value, "dh"): raise InvalidRequest( "Do not include 'dh' in aes128gcm " "Crypto-Key header", status_code=400, errno=110)
class ExploreTabEntityGroupSchema(MobileClientSchema): """ **Validates**:: { 'continuationToken': 'continuationToken', 'entities': [EXPLORE_TAB_ENTITY], 'group_type': 'group_type', 'kind': 'sj#exEntityGroup', 'start_position': 0, 'title': 'title' } """ continuation_token = fields.Str() description = fields.Str() entities = fields.Nested(ExploreTabEntitySchema, many=True) group_type = fields.Str(validate=OneOf([ 'KEY_ALBUMS', 'NEW_RELEASE', 'TOP_ALBUMS', 'TOP_PLAYLISTS', 'TOP_SONGS', ])) kind = fields.Str(required=True, validate=Equal('sj#exEntityGroup')) start_position = fields.Int() title = fields.Str()
class ExploreTabEntitySchema(MobileClientSchema): """ **Validates**:: { 'album': ALBUM, 'genre': GENRE, 'kind': 'sj#exEntity', 'playlist': PLAYLIST, 'track': STORE_TRACK } """ album = fields.Nested(AlbumSchema) genre = fields.Nested(GenreSchema) kind = fields.Str(requried=True, validate=Equal('sj#exEntity')) playlist = fields.Nested( PlaylistSchema(only=[ 'albumArtRef', 'description', 'kind', 'name', 'ownerName', 'shareToken', 'type', ])) track = fields.Nested(StoreTrackSchema)
class AccountAttributes(Schema): username = fields.Str(validate=Length(min=STRING_MIN_LENGTH, max=STRING_MAX_LENGTH)) password = fields.Str(validate=Length(min=PWD_MIN_LENGTH, max=PWD_MAX_LENGTH)) firstName = fields.Str(validate=Length(min=STRING_MIN_LENGTH, max=STRING_MAX_LENGTH)) lastName = fields.Str(validate=Length(min=STRING_MIN_LENGTH, max=STRING_MAX_LENGTH)) email = fields.Email(required=True, validate=Length(min=STRING_MIN_LENGTH, max=STRING_MAX_LENGTH)) dateOfBirth = fields.Date(required=True, error='Not valid date. Provide ISO8601-formatted date string.') acceptTermsOfService = fields.Str(required=True, validate=Equal("True"))
class ListenNowDismissedItemSchema(MobileClientSchema): dismissalTimestamp = fields.Str(required=True) item_id = ( fields.Dict() ) # TODO: Find all version of this. Know to have 'type' field and can have an 'album_id' dict. kind = fields.Str(required=True, validate=Equal('sj#dismissedItem')) suggestion_reason = fields.Str(required=True) uuid = fields.UUID(required=True)
class PulseQobjSchema(QobjSchema): """Schema for PulseQobj.""" # Required properties. config = Nested(PulseQobjConfigSchema, required=True) experiments = Nested(PulseQobjExperimentSchema, required=True, many=True) type = String(required=True, validate=Equal(QobjType.PULSE), missing=QobjType.PULSE)
class AccountSchema2(BaseSchema): username = fields.Str(required=True) password = fields.Str(required=True) firstName = fields.Str(required=True) lastName = fields.Str(required=True) email = fields.Email(required=True) dateOfBirth = fields.Date( required=True, error='Not valid date. Provide ISO8601-formatted date string.') acceptTermsOfService = fields.Str(required=True, validate=Equal("True"))
class WizardSchema(BaseSchema): xivo_uuid = fields.UUID(dump_only=True) admin_username = fields.Constant(constant='root', dump_only=True) admin_password = fields.String(validate=Regexp(ADMIN_PASSWORD_REGEX), required=True) license = StrictBoolean(validate=Equal(True), required=True) language = fields.String(validate=OneOf(['en_US', 'fr_FR']), missing='en_US') timezone = fields.String(validate=Length(max=128), required=True) network = Nested(WizardNetworkSchema, required=True) steps = Nested(WizardStepsSchema, missing=WizardStepsSchema().load({}))
class SinkCommonConsentAttributes(Schema): version = fields.Str(required=True) cr_id = fields.Str(required=True) surrogate_id = fields.Str(required=True) rs_description = fields.Nested(nested=ResourceSetDescription, required=True) slr_id = fields.Str(required=True) iat = fields.Int(required=True) nbf = fields.Int(required=True) exp = fields.Int(required=True) operator = fields.Str(required=True) subject_id = fields.Str(required=True) role = fields.Str(required=True, validate=Equal("Sink"))
class ExploreTabsSchema(MobileClientSchema): """ **Validates**:: { 'kind': 'sj#exGetTabsResponse', 'tabs': [EXPLORE_TAB] } """ kind = fields.Str(required=True, validate=Equal('sj#exGetTabsResponse')) tabs = fields.Nested(ExploreTabSchema, many=True)
class BrowseStationsSchema(MobileClientSchema): """ **Validates**:: { 'kind': 'sj#getStationsResponse', 'stations': [RADIO_STATION] } """ kind = fields.Str(required=True, validate=Equal('sj#getStationsResponse')) stations = fields.Nested(RadioStationSchema, required=True, many=True)
class RadioFeedSchema(MobileClientSchema): """ **Validates**:: { 'data': RADIO_FEED_ITEMS, 'kind': 'sj#radioFeed' } """ data = fields.Nested(RadioFeedItemsSchema) kind = fields.Str(required=True, validate=Equal('sj#radioFeed'))
class ListenNowItemListSchema(MobileClientSchema): """ **Validates**:: { 'kind': 'sj#listenNowItemList', 'listennow_items': [LISTEN_NOW_ITEM] } """ kind = fields.Str(required=True, validate=Equal('sj#listenNowItemList')) listennow_items = fields.Nested(ListenNowItemSchema, many=True)
class ConfigListSchema(MobileClientSchema): """ **Validates**:: { 'data': CONFIG_LIST_ENTRIES, 'kind': 'sj#configList' } """ data = fields.Nested(ConfigListEntriesSchema) kind = fields.Str(required=True, validate=Equal('sj#configList'))
class SearchResponseSchema(MobileClientSchema): """ **Validates**:: { 'clusterDetail': [SEARCH_RESULT_CLUSTER], 'kind': 'sj#searchresponse' } """ clusterDetail = fields.Nested(SearchResultClusterSchema, many=True) kind = fields.Str(required=True, validate=Equal('sj#searchresponse'))
class UserClientIDListSchema(MobileClientSchema): """ **Validates**:: { 'data': USER_CLIENT_ID_LIST_ITEMS, 'kind': 'sj#userClientIdList' } """ data = fields.Nested(UserClientIDListItemsSchema) kind = fields.Str(required=True, validate=Equal('sj#userClientIdList'))
class TopChartHeaderSchema(MobileClientSchema): """ **Validates**:: { 'header_image': IMAGE_REF, 'kind': 'sj#topChartHeader' } """ header_image = fields.Nested(ImageRefSchema, required=True) kind = fields.Str(required=True, validate=Equal('sj#topChartHeader'))
class ListenNowDismissedItemsSchema(MobileClientSchema): """ **Validates**:: { 'kind': 'sj#listenNowDismissedItemList', 'minLastModifiedIgnored': True } """ kind = fields.Str(required=True, validate=Equal('sj#listenNowDismissedItemList')) minLastModifiedIgnored = fields.Bool()
class SharedPlaylistEntryListSchema(MobileClientSchema): """ **Validates**:: { 'entries': [SHARED_PLAYLIST_ENTRY_ITEM], 'kind': 'sj#listSharedPlaylistEntriesResponse' } """ entries = fields.Nested(SharedPlaylistEntryItemSchema, many=True) kind = fields.Str(required=True, validate=Equal('sj#listSharedPlaylistEntriesResponse'))
class RadioStationSchema(MobileClientSchema): """ **Validates**:: { 'byline': 'byline', 'clientId': 'clientId', 'compositeArtRefs': [IMAGE_REF], 'contentTypes': ['contentType'], 'deleted': False, 'description': 'description', 'enforcementResult': False, 'id': 'id', 'imageUrl': 'imageUrl', 'imageUrls': [IMAGE_REF], 'inLibrary': True, 'kind': 'sj#radioStation', 'lastModifiedTimestamp': 'lastModifiedTimestamp', 'name': 'name', 'recentTimestamp': 'recentTimestamp', 'seed': RADIO_SEED, 'sessionToken': 'sessionToken', 'skipEventHistory': [], 'stationSeeds': [RADIO_SEED], 'tracks': [STORE_TRACK] } """ adTargeting = fields.Nested(AdTargetingSchema) byline = fields.Str() clientId = fields.Str() compositeArtRefs = fields.Nested(ImageRefSchema, many=True) contentTypes = fields.List(fields.Str) deleted = fields.Bool() description = fields.Str() enforcementResult = fields.Bool() id = fields.Str() imageUrl = fields.Str() imageUrls = fields.Nested(ImageRefSchema, many=True) inLibrary = fields.Bool() kind = fields.Str(required=True, validate=Equal('sj#radioStation')) lastModifiedTimestamp = fields.Str() name = fields.Str() recentTimestamp = fields.Str() seed = fields.Nested(RadioSeedSchema) sessionToken = fields.Str() skipEventHistory = fields.List(fields.Dict) # TODO What's in this array? stationSeeds = fields.Nested(RadioSeedSchema, many=True) tracks = fields.Nested(TrackSchema, many=True)
class GenreListSchema(MobileClientSchema): """ **Validates**:: { 'genres': [GENRE], 'kind': 'sj#exGetMusicGenresResponse' } """ genres = fields.Nested(GenreSchema, many=True) kind = fields.Str(required=True, validate=Equal('sj#exGetMusicGenresResponse'))