import hashlib from typing import List, Tuple from vendor_image_caching import config from vendor_image_caching.constants import CollectionName, ObjectName def get_image_url( is_original: bool, collection_name: str, record_id: str, obj_name: str, obj_id: str, inner_path: str, size: int, index: int = 1 ) -> str: """Generate image URL. Args: is_original: Original non cached image URL or not. collection_name: Collection name. record_id: Cache record ID> inner_path: Path within data for hashed forced unique image name. obj_name: Image object name (collection could be track for ex, but images of album that is inner object). obj_id: Image object ID (as well collection could be track, but images of inner album, so it is album ID). size: Image size (both width and height, for Spotify we have only square images). index: Some additional postfix for image name. Returns: Image URL. """ if is_original: return f"https://test.com/image/img_{obj_name}_{size}x{size}_{index}" if config.FORCE_UNIQUE_IMAGE_NAME or not obj_name or not obj_id: image_name_base = f"{record_id}{'_' + inner_path if inner_path else ''}" image_name = hashlib.sha3_256(image_name_base.encode("utf-8")).hexdigest() return f"{config.AWS_IMAGE_STORAGE_BASE_URL}/{collection_name}/{image_name}_{size}x{size}" return f"{config.AWS_IMAGE_STORAGE_BASE_URL}/{obj_name}/{obj_id}_{size}x{size}" def get_images( is_original: bool, collection_name: str, record_id: str, obj_name: str or None, obj_id: str, inner_path: str = "", sizes: tuple = (640, 300, 64), index: int = 1, ) -> List[dict]: """Get set of images objects. Args: is_original: Original non cached image URL or not. collection_name: Collection name. record_id: Cache record ID> inner_path: Path within data to images. obj_name: Image object name. obj_id: Image object ID. index: Some additional postfix for image name. sizes: Image set sizes. Returns: List of images data dicts. """ return [ { "height": size, "url": get_image_url(is_original, collection_name, record_id, obj_name, obj_id, inner_path, size, index), "width": size } for size in sizes ] def get_track(is_original: bool, record_id: str) -> Tuple[dict, List[dict]]: """Get fake track data. Args: is_original: Original or cached images URLs. record_id: Cache record ID. Returns: Track fake data and image list. """ album_id = "album_id_1" images = get_images( is_original=is_original, collection_name=CollectionName.TRACK, record_id=record_id, obj_name=ObjectName.ALBUM, obj_id=album_id, inner_path="album", ) data = { "album": { "album_type": "album", "artists": [ { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_1" }, "href": "https://api.spotify.com/v1/artists/artist_id_1", "id": "artist_id_1", "name": "Artist 1", "type": "artist", "uri": "spotify:artist:artist_id_1" } ], "external_urls": { "spotify": f"https://open.spotify.com/album/{album_id}" }, "href": f"https://api.spotify.com/v1/albums/{album_id}", "id": album_id, "images": images, "name": "Album name 1", "release_date": "2018-01-01", "release_date_precision": "day", "total_tracks": 12, "type": "album", "uri": f"spotify:album:{album_id}" }, "artists": [ { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_1" }, "href": "https://api.spotify.com/v1/artists/artist_id_1", "id": "artist_id_1", "name": "Artist 1", "type": "artist", "uri": "spotify:artist:artist_id_1" }, { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_2" }, "href": "https://api.spotify.com/v1/artists/artist_id_2", "id": "artist_id_2", "name": "Artist 2", "type": "artist", "uri": "spotify:artist:artist_id_2" } ], "disc_number": 1, "duration_ms": 190190, "explicit": False, "external_ids": { "isrc": "ABCD12311123" }, "external_urls": { "spotify": "https://open.spotify.com/track/track_id_1" }, "href": "https://api.spotify.com/v1/tracks/track_id_1", "id": "track_id_1", "is_local": False, "is_playable": True, "name": "Track name 1", "popularity": 40, "preview_url": None, "track_number": 1, "type": "track", "uri": "spotify:track:track_id_1" } return data, images def get_album(is_original: bool, record_id: str) -> Tuple[dict, List[dict]]: """Get fake album data. Args: is_original: Original or cached images URLs. record_id: Cache record ID. Returns: Album fake data and image list. """ album_id = "album_id_2" images = get_images( is_original=is_original, collection_name=CollectionName.ALBUM, record_id=record_id, obj_name=ObjectName.ALBUM, obj_id=album_id, ) data = { "album_type": "single", "artists": [ { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_2" }, "href": "https://api.spotify.com/v1/artists/artist_id_2", "id": "artist_id_2", "name": "Some artist 2", "type": "artist", "uri": "spotify:artist:artist_id_2" } ], "copyrights": [ { "text": "2020 Limited under exclusive license to COMPANY_NAME", "type": "P" } ], "external_ids": { "upc": "AAA12312311" }, "external_urls": { "spotify": f"https://open.spotify.com/album/{album_id}" }, "genres": [], "href": f"https://api.spotify.com/v1/albums/{album_id}", "id": album_id, "images": images, "label": "MAGNIFICENT AND WONDERFUL RECORDS", "name": "Album name 2", "popularity": 48, "release_date": "2020-02-01", "release_date_precision": "day", "total_tracks": 1, "tracks": { "href": f"https://api.spotify.com/v1/albums/{album_id}/tracks?offset=0&limit=50&market=us", "items": [ { "artists": [ { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_2" }, "href": "https://api.spotify.com/v1/artists/artist_id_2", "id": "artist_id_2", "name": "Some artist 2", "type": "artist", "uri": "spotify:artist:artist_id_2" }, { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_3" }, "href": "https://api.spotify.com/v1/artists/artist_id_3", "id": "artist_id_3", "name": "Artist name 3", "type": "artist", "uri": "spotify:artist:artist_id_3" } ], "disc_number": 1, "duration_ms": 19999, "explicit": False, "external_urls": { "spotify": "https://open.spotify.com/track/track_id_3" }, "href": "https://api.spotify.com/v1/tracks/track_id_3", "id": "track_id_3", "is_local": False, "is_playable": True, "name": "Track name 3", "preview_url": "https://test.com/mp3-preview/jfewajfoewajfoiawejfoiwaejo?cid=jkflawej2349823749", "track_number": 1, "type": "track", "uri": "spotify:track:track_id_3" } ], "limit": 50, "next": None, "offset": 0, "previous": None, "total": 1 }, "type": "album", "uri": f"spotify:album:{album_id}" } return data, images def get_artist(is_original: bool, record_id: str) -> Tuple[dict, List[dict]]: """Get fake artist data. Args: is_original: Original or cached images URLs. record_id: Cache record ID. Returns: Artist fake data and image list. """ artist_id = "artist_id_10" images = get_images( is_original=is_original, collection_name=CollectionName.ARTIST, record_id=record_id, obj_name=ObjectName.ARTIST, obj_id=artist_id, ) data = { "external_urls": { "spotify": f"https://open.spotify.com/artist/{artist_id}" }, "followers": { "href": None, "total": 99999 }, "genres": [ "Caucasian heavy funk", "pop" ], "href": f"https://api.spotify.com/v1/artists/{artist_id}", "id": artist_id, "images": images, "name": "Artist name 10", "popularity": 41, "type": "artist", "uri": f"spotify:artist:{artist_id}" } return data, images def get_playlist(is_original: bool, record_id: str) -> Tuple[dict, List[dict]]: """Get fake playlist data. Args: is_original: Original or cached images URLs. record_id: Cache record ID. Returns: Playlist fake data and image list. """ playlist_id = "playlist_id_20" playlist_images = get_images( is_original=is_original, collection_name=CollectionName.PLAYLIST, record_id=record_id, obj_name=ObjectName.PLAYLIST, obj_id=playlist_id, sizes=(None,), ) album_id_1 = "album_id_21" album_images_1 = get_images( is_original=is_original, collection_name=CollectionName.PLAYLIST, record_id=record_id, obj_name=ObjectName.ALBUM, obj_id=album_id_1, inner_path="tracks_items_0_track_album", ) album_id_2 = "album_id_121" album_images_2 = get_images( is_original=is_original, collection_name=CollectionName.PLAYLIST, record_id=record_id, obj_name=ObjectName.ALBUM, obj_id=album_id_2, inner_path="tracks_items_1_track_album", index=2, ) owner = { "display_name": "Some person 1", "external_urls": { "spotify": "https://open.spotify.com/user/owner_id_1" }, "href": "https://api.spotify.com/v1/users/owner_id_1", "id": "owner_id_1", "type": "user", "uri": "spotify:user:owner_id_1" } data = { "collaborative": False, "description": "Playlist fake 001", "external_urls": { "spotify": f"https://open.spotify.com/playlist/{playlist_id}" }, "followers": { "href": None, "total": 1500 }, "href": f"https://api.spotify.com/v1/playlists/{playlist_id}", "id": playlist_id, "images": playlist_images, "name": "Playlist name 20", "owner": dict(owner), "primary_color": None, "public": True, "snapshot_id": "oriejgresjgpiesrjgijesrogjeroijrgoij395i0395039i09=", "tracks": { "href": f"https://api.spotify.com/v1/playlists/{playlist_id}/tracks?offset=0&limit=100&market=us", "items": [ { "added_at": "2020-08-01T01:59:59Z", "added_by": dict(owner), "is_local": False, "primary_color": None, "track": { "album": { "album_type": "single", "artists": [ { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_50" }, "href": "https://api.spotify.com/v1/artists/artist_id_50", "id": "artist_id_50", "name": "Artist name 50", "type": "artist", "uri": "spotify:artist:artist_id_50" }, { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_51" }, "href": "https://api.spotify.com/v1/artists/artist_id_51", "id": "artist_id_51", "name": "AAAArtist", "type": "artist", "uri": "spotify:artist:artist_id_51" } ], "external_urls": { "spotify": f"https://open.spotify.com/album/{album_id_1}" }, "href": f"https://api.spotify.com/v1/albums/{album_id_1}", "id": album_id_1, "images": album_images_1, "name": "Album name 21", "release_date": "2020-04-01", "release_date_precision": "day", "total_tracks": 1, "type": "album", "uri": f"spotify:album:{album_id_1}" }, "artists": [ { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_61" }, "href": "https://api.spotify.com/v1/artists/artist_id_61", "id": "artist_id_61", "name": "New artist (61)", "type": "artist", "uri": "spotify:artist:artist_id_61" }, { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_62" }, "href": "https://api.spotify.com/v1/artists/artist_id_62", "id": "artist_id_62", "name": "New artist (62)", "type": "artist", "uri": "spotify:artist:artist_id_62" }, { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_63" }, "href": "https://api.spotify.com/v1/artists/artist_id_63", "id": "artist_id_63", "name": "New artist (63)", "type": "artist", "uri": "spotify:artist:artist_id_63" } ], "disc_number": 1, "duration_ms": 323232, "episode": False, "explicit": True, "external_ids": { "isrc": "AAAA12312311" }, "external_urls": { "spotify": "https://open.spotify.com/track/track_id_55" }, "href": "https://api.spotify.com/v1/tracks/track_id_55", "id": "track_id_55", "is_local": False, "is_playable": True, "name": "Track 54 Remix", "popularity": 70, "preview_url": "https://p.scdn.co/mp3-preview/ersjgorsejgoresjogjeroij?cid=feaw32434223423", "track": True, "track_number": 1, "type": "track", "uri": "spotify:track:track_id_55" }, "video_thumbnail": { "url": None } }, { "added_at": "2020-06-01T16:01:01Z", "added_by": dict(owner), "is_local": False, "primary_color": None, "track": { "album": { "album_type": "album", "artists": [ { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_151" }, "href": "https://api.spotify.com/v1/artists/artist_id_151", "id": "artist_id_151", "name": "Artist 151", "type": "artist", "uri": "spotify:artist:artist_id_151" } ], "external_urls": { "spotify": f"https://open.spotify.com/album/{album_id_2}" }, "href": f"https://api.spotify.com/v1/albums/{album_id_2}", "id": album_id_2, "images": album_images_2, "name": "Album 121", "release_date": "2020-05-01", "release_date_precision": "day", "total_tracks": 22, "type": "album", "uri": f"spotify:album:{album_id_2}" }, "artists": [ { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_151" }, "href": "https://api.spotify.com/v1/artists/artist_id_151", "id": "artist_id_151", "name": "Artist 151", "type": "artist", "uri": "spotify:artist:artist_id_151" } ], "disc_number": 1, "duration_ms": 170000, "episode": False, "explicit": False, "external_ids": { "isrc": "WIEREWQUORI1" }, "external_urls": { "spotify": "https://open.spotify.com/track/track_id_7" }, "href": "https://api.spotify.com/v1/tracks/track_id_7", "id": "track_id_7", "is_local": False, "is_playable": True, "linked_from": { "external_urls": { "spotify": "https://open.spotify.com/track/track_id_6" }, "href": "https://api.spotify.com/v1/tracks/track_id_6", "id": "track_id_6", "type": "track", "uri": "spotify:track:track_id_6" }, "name": "Track 7", "popularity": 85, "preview_url": "https://p.scdn.co/mp3-preview/lrfpajrekfopijreoijerge?cid=efaw234234", "track": True, "track_number": 10, "type": "track", "uri": "spotify:track:track_id_7" }, "video_thumbnail": { "url": None } } ], "limit": 100, "next": None, "offset": 0, "previous": None, "total": 2 }, "type": "playlist", "uri": f"spotify:playlist:{playlist_id}" } images = playlist_images + album_images_1 + album_images_2 return data, images def get_user(is_original: bool, record_id: str) -> Tuple[dict, List[dict]]: """Get fake user data. Args: is_original: Original or cached images URLs. record_id: Cache record ID. Returns: User fake data and image list. """ user_id = "user_id_0" images = get_images( is_original=is_original, collection_name=CollectionName.USER, record_id=record_id, obj_name=ObjectName.USER, obj_id=user_id, sizes=(None,), ) data = { "display_name": "User 0", "external_urls": { "spotify": f"https://open.spotify.com/user/{user_id}" }, "followers": { "href": None, "total": 9090909 }, "href": f"https://api.spotify.com/v1/users/{user_id}", "id": user_id, "images": images, "type": "user", "uri": f"spotify:user:{user_id}" } return data, images def get_search_results(is_original: bool, record_id: str) -> Tuple[dict, List[dict]]: """Get fake search data. Args: is_original: Original or cached images URLs. record_id: Cache record ID. Returns: Search fake data and image list. """ album_id_1 = "album_id_801" album_images_1 = get_images( is_original=is_original, collection_name=CollectionName.SEARCH, record_id=record_id, obj_name=ObjectName.ALBUM, obj_id=album_id_1, inner_path="albums_items_0", ) album_id_2 = "album_id_802" album_images_2 = get_images( is_original=is_original, collection_name=CollectionName.SEARCH, record_id=record_id, obj_name=ObjectName.ALBUM, obj_id=album_id_2, inner_path="albums_items_1", index=2, ) artist_id_1 = "artist_id_801" artist_images_1 = get_images( is_original=is_original, collection_name=CollectionName.SEARCH, record_id=record_id, obj_name=ObjectName.ARTIST, obj_id=artist_id_1, inner_path="artists_items_0", ) artist_id_2 = "artist_id_802" artist_images_2 = get_images( is_original=is_original, collection_name=CollectionName.SEARCH, record_id=record_id, obj_name=ObjectName.ARTIST, obj_id=artist_id_2, inner_path="artists_items_1", index=2, ) track_album_id_1 = "album_id_8001" track_album_images_1 = get_images( is_original=is_original, collection_name=CollectionName.SEARCH, record_id=record_id, obj_name=ObjectName.ALBUM, obj_id=track_album_id_1, inner_path="tracks_items_0_album", ) track_album_id_2 = "album_id_8002" track_album_images_2 = get_images( is_original=is_original, collection_name=CollectionName.SEARCH, record_id=record_id, obj_name=ObjectName.ALBUM, obj_id=track_album_id_2, inner_path="tracks_items_1_album", index=2, ) playlist_id_1 = "playlist_id_31" playlist_images_1 = get_images( is_original=is_original, collection_name=CollectionName.SEARCH, record_id=record_id, obj_name=ObjectName.PLAYLIST, obj_id=playlist_id_1, inner_path="playlists_items_0", sizes=(None,), ) playlist_id_2 = "playlist_id_32" playlist_images_2 = get_images( is_original=is_original, collection_name=CollectionName.SEARCH, record_id=record_id, obj_name=ObjectName.PLAYLIST, obj_id=playlist_id_2, inner_path="playlists_items_1", index=2, sizes=(None,), ) show_id_1 = "show_id_1" show_images_1 = get_images( is_original=is_original, collection_name=CollectionName.SEARCH, record_id=record_id, obj_name=ObjectName.SHOW, obj_id=show_id_1, inner_path="shows_items_0", ) show_id_2 = "show_id_2" show_images_2 = get_images( is_original=is_original, collection_name=CollectionName.SEARCH, record_id=record_id, obj_name=ObjectName.SHOW, obj_id=show_id_2, inner_path="shows_items_1", index=2, ) data = { "albums": { "href": f"https://api.spotify.com/v1/search?query={record_id}&type=album&market=US&offset=0&limit=2", "items": [ { "album_type": "album", "artists": [ { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_81" }, "href": "https://api.spotify.com/v1/artists/artist_id_81", "id": "artist_id_81", "name": "Artist 81", "type": "artist", "uri": "spotify:artist:artist_id_81" } ], "external_urls": { "spotify": f"https://open.spotify.com/album/{album_id_1}" }, "href": f"https://api.spotify.com/v1/albums/{album_id_1}", "id": album_id_1, "images": album_images_1, "name": "Album 801", "release_date": "2012-01-01", "release_date_precision": "day", "total_tracks": 15, "type": "album", "uri": f"spotify:album:{album_id_1}" }, { "album_type": "album", "artists": [ { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_82" }, "href": "https://api.spotify.com/v1/artists/artist_id_82", "id": "artist_id_82", "name": "Artist 82", "type": "artist", "uri": "spotify:artist:artist_id_82" } ], "external_urls": { "spotify": f"https://open.spotify.com/album/{album_id_2}" }, "href": f"https://api.spotify.com/v1/albums/{album_id_2}", "id": album_id_2, "images": album_images_2, "name": "Album 802", "release_date": "2006-12-12", "release_date_precision": "day", "total_tracks": 11, "type": "album", "uri": f"spotify:album:{album_id_2}" } ], "limit": 2, "next": f"https://api.spotify.com/v1/search?query={record_id}&type=album&market=US&offset=2&limit=2", "offset": 0, "previous": None, "total": 10001 }, "artists": { "href": f"https://api.spotify.com/v1/search?query={record_id}&type=artist&market=US&offset=0&limit=2", "items": [ { "external_urls": { "spotify": f"https://open.spotify.com/artist/{artist_id_1}" }, "followers": { "href": None, "total": 3213213 }, "genres": [ "pop", "post-teen pop", ], "href": f"https://api.spotify.com/v1/artists/{artist_id_1}", "id": artist_id_1, "images": artist_images_1, "name": "Artist 801", "popularity": 78, "type": "artist", "uri": f"spotify:artist:{artist_id_1}" }, { "external_urls": { "spotify": f"https://open.spotify.com/artist/{artist_id_2}" }, "followers": { "href": None, "total": 55454 }, "genres": [ "contemporary country", "country pop" ], "href": f"https://api.spotify.com/v1/artists/{artist_id_2}", "id": artist_id_2, "images": artist_images_2, "name": "Artist 802", "popularity": 74, "type": "artist", "uri": f"spotify:artist:{artist_id_2}" } ], "limit": 2, "next": f"https://api.spotify.com/v1/search?query={record_id}&type=artist&market=US&offset=2&limit=2", "offset": 0, "previous": None, "total": 10002 }, "tracks": { "href": f"https://api.spotify.com/v1/search?query={record_id}&type=track&market=US&offset=0&limit=2", "items": [ { "album": { "album_type": "album", "artists": [ { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_701" }, "href": "https://api.spotify.com/v1/artists/artist_id_701", "id": "artist_id_701", "name": "Artist 701", "type": "artist", "uri": "spotify:artist:artist_id_701" } ], "external_urls": { "spotify": f"https://open.spotify.com/album/{track_album_id_1}" }, "href": f"https://api.spotify.com/v1/albums/{track_album_id_1}", "id": track_album_id_1, "images": track_album_images_1, "name": "Album name 8001", "release_date": "2020-03-21", "release_date_precision": "day", "total_tracks": 15, "type": "album", "uri": f"spotify:album:{track_album_id_1}" }, "artists": [ { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_701" }, "href": "https://api.spotify.com/v1/artists/artist_id_701", "id": "artist_id_701", "name": "Artist 701", "type": "artist", "uri": "spotify:artist:artist_id_701" } ], "disc_number": 1, "duration_ms": 43434, "explicit": False, "external_ids": { "isrc": "AAA1111111" }, "external_urls": { "spotify": "https://open.spotify.com/track/track_id_91" }, "href": "https://api.spotify.com/v1/tracks/track_id_91", "id": "track_id_91", "is_local": False, "is_playable": True, "name": "Track 91", "popularity": 72, "preview_url": "https://p.scdn.co/mp3-preview/reoijgeoj34oj5o34jtr?cid=afreak34535", "track_number": 3, "type": "track", "uri": "spotify:track:track_id_91" }, { "album": { "album_type": "album", "artists": [ { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_702" }, "href": "https://api.spotify.com/v1/artists/artist_id_702", "id": "artist_id_702", "name": "Artist 702", "type": "artist", "uri": "spotify:artist:artist_id_702" } ], "external_urls": { "spotify": f"https://open.spotify.com/album/{track_album_id_2}" }, "href": f"https://api.spotify.com/v1/albums/{track_album_id_2}", "id": track_album_id_2, "images": track_album_images_2, "name": "Album 8002", "release_date": "2019-02-20", "release_date_precision": "day", "total_tracks": 12, "type": "album", "uri": f"spotify:album:{track_album_id_2}" }, "artists": [ { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_702" }, "href": "https://api.spotify.com/v1/artists/artist_id_702", "id": "artist_id_702", "name": "Artist 702", "type": "artist", "uri": "spotify:artist:artist_id_702" }, { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_703" }, "href": "https://api.spotify.com/v1/artists/artist_id_703", "id": "artist_id_703", "name": "Artist 703", "type": "artist", "uri": "spotify:artist:artist_id_703" }, ], "disc_number": 1, "duration_ms": 3245, "explicit": True, "external_ids": { "isrc": "BBBB2222222" }, "external_urls": { "spotify": "https://open.spotify.com/track/track_id_28" }, "href": "https://api.spotify.com/v1/tracks/track_id_28", "id": "track_id_28", "is_local": False, "is_playable": True, "name": "Track 28", "popularity": 78, "preview_url": None, "track_number": 12, "type": "track", "uri": "spotify:track:track_id_28" } ], "limit": 2, "next": f"https://api.spotify.com/v1/search?query={record_id}&type=track&market=US&offset=2&limit=2", "offset": 0, "previous": None, "total": 100002 }, "playlists": { "href": f"https://api.spotify.com/v1/search?query={record_id}&type=playlist&market=US&offset=0&limit=2", "items": [ { "collaborative": False, "description": "Some playlist 31", "external_urls": { "spotify": f"https://open.spotify.com/playlist/{playlist_id_1}" }, "href": f"https://api.spotify.com/v1/playlists/{playlist_id_1}", "id": playlist_id_1, "images": playlist_images_1, "name": "Playlist 31", "owner": { "display_name": "Owner 1", "external_urls": { "spotify": "https://open.spotify.com/user/owner_id_1" }, "href": "https://api.spotify.com/v1/users/owner_id_1", "id": "owner_id_1", "type": "user", "uri": "spotify:user:owner_id_1" }, "primary_color": None, "public": None, "snapshot_id": "jreojgesojogiejroijoeijo4504390=", "tracks": { "href": f"https://api.spotify.com/v1/playlists/{playlist_id_1}/tracks", "total": 52, }, "type": "playlist", "uri": f"spotify:playlist:{playlist_id_1}" }, { "collaborative": False, "description": "Some playlist 32", "external_urls": { "spotify": f"https://open.spotify.com/playlist/{playlist_id_2}" }, "href": f"https://api.spotify.com/v1/playlists/{playlist_id_2}", "id": playlist_id_2, "images": playlist_images_2, "name": "Playlist 32", "owner": { "display_name": "Owner 2", "external_urls": { "spotify": "https://open.spotify.com/user/owner_id_2" }, "href": "https://api.spotify.com/v1/users/owner_id_2", "id": "owner_id_2", "type": "user", "uri": "spotify:user:owner_id_2" }, "primary_color": None, "public": None, "snapshot_id": "grekespgkespkgso-094i3-i3-=", "tracks": { "href": f"https://api.spotify.com/v1/playlists/{playlist_id_2}/tracks", "total": 64 }, "type": "playlist", "uri": f"spotify:playlist:{playlist_id_2}" } ], "limit": 2, "next": f"https://api.spotify.com/v1/search?query={record_id}&type=playlist&market=US&offset=2&limit=2", "offset": 0, "previous": None, "total": 2332323 }, "shows": { "href": f"https://api.spotify.com/v1/search?query={record_id}&type=show&market=US&offset=0&limit=2", "items": [ { "available_markets": [ "AD", "AE", ], "copyrights": [], "description": "Podcast by Somebody", "explicit": False, "external_urls": { "spotify": f"https://open.spotify.com/show/{show_id_1}" }, "href": f"https://api.spotify.com/v1/shows/{show_id_1}", "id": show_id_1, "images": show_images_1, "is_externally_hosted": False, "languages": [ "en" ], "media_type": "audio", "name": "Show 1", "publisher": "Showrunner 1", "total_episodes": 6, "type": "show", "uri": f"spotify:show:{show_id_1}" }, { "available_markets": [ "US" ], "copyrights": [], "description": "Long descr 2", "explicit": False, "external_urls": { "spotify": f"https://open.spotify.com/show/{show_id_2}" }, "href": f"https://api.spotify.com/v1/shows/{show_id_2}", "id": show_id_2, "images": show_images_2, "is_externally_hosted": False, "languages": [ "en-US" ], "media_type": "audio", "name": "Show 2", "publisher": "Show owner 2", "total_episodes": 555, "type": "show", "uri": f"spotify:show:{show_id_2}" } ], "limit": 2, "next": f"https://api.spotify.com/v1/search?query={record_id}&type=show&market=US&offset=2&limit=2", "offset": 0, "previous": None, "total": 30027 } } images = ( track_album_images_1 + track_album_images_2 + album_images_1 + album_images_2 + artist_images_1 + artist_images_2 + playlist_images_1 + playlist_images_2 + show_images_1 + show_images_2 ) return data, images def get_episode(is_original: bool, record_id: str) -> Tuple[dict, List[dict]]: """Get fake episode data. Args: is_original: Original or cached images URLs. record_id: Cache record ID. Returns: Episode fake data and image list. """ episode_id_1 = "episode_id_1" episode_images_1 = get_images( is_original=is_original, collection_name=CollectionName.CACHE, record_id=record_id, obj_name=ObjectName.EPISODE, obj_id=episode_id_1, inner_path="episodes_0", ) episode_id_2 = "episode_id_2" episode_images_2 = get_images( is_original=is_original, collection_name=CollectionName.CACHE, record_id=record_id, obj_name=ObjectName.EPISODE, obj_id=episode_id_2, index=2, inner_path="episodes_1", ) show_id_1 = "show_id_1" show_images_1 = get_images( is_original=is_original, collection_name=CollectionName.CACHE, record_id=record_id, obj_name=ObjectName.SHOW, obj_id=show_id_1, inner_path="episodes_0_show", ) show_id_2 = "show_id_2" show_images_2 = get_images( is_original=is_original, collection_name=CollectionName.CACHE, record_id=record_id, obj_name=ObjectName.SHOW, obj_id=show_id_2, index=2, inner_path="episodes_1_show", ) data = { "episodes": [ { "audio_preview_url": "https://p.scdn.co/mp3-preview/mrekgmleskmgl34ml3km3l", "description": "Episode 1 description.", "duration_ms": 4324324, "explicit": False, "external_urls": { "spotify": f"https://open.spotify.com/episode/{episode_id_1}" }, "href": f"https://api.spotify.com/v1/episodes/{episode_id_1}", "id": episode_id_1, "images": episode_images_1, "is_externally_hosted": False, "is_playable": True, "language": "sv", "languages": ["sv"], "name": "Episode 1", "release_date": "2019-09-09", "release_date_precision": "day", "show": { "available_markets": ["AD", "AE"], "copyrights": [], "description": "Show 1", "explicit": False, "external_urls": { "spotify": f"https://open.spotify.com/show/{show_id_1}" }, "href": f"https://api.spotify.com/v1/shows/{show_id_1}", "id": show_id_1, "images": show_images_1, "is_externally_hosted": False, "languages": ["sv"], "media_type": "audio", "name": "Show 1", "publisher": "Show Radio 1", "total_episodes": 300, "type": "show", "uri": f"spotify:show:{show_id_1}" }, "type": "episode", "uri": f"spotify:episode:{episode_id_1}" }, { "audio_preview_url": "https://p.scdn.co/mp3-preview/ewafakfo2ko2oj2ofi", "description": "Episode 2 desc.", "duration_ms": 3214231, "explicit": False, "external_urls": { "spotify": f"https://open.spotify.com/episode/{episode_id_2}" }, "href": f"https://api.spotify.com/v1/episodes/{episode_id_2}", "id": episode_id_2, "images": episode_images_2, "is_externally_hosted": False, "is_playable": True, "language": "sv", "languages": ["sv"], "name": "Episode 2", "release_date": "2019-09-04", "release_date_precision": "day", "show": { "available_markets": [ "AD", "AE", ], "copyrights": [], "description": "Show 2 desc", "explicit": False, "external_urls": { "spotify": f"https://open.spotify.com/show/{show_id_2}" }, "href": f"https://api.spotify.com/v1/shows/{show_id_2}", "id": show_id_2, "images": show_images_2, "is_externally_hosted": False, "languages": ["sv"], "media_type": "audio", "name": "Show 2", "publisher": "Show Radio 2", "total_episodes": 400, "type": "show", "uri": f"spotify:show:{show_id_2}" }, "type": "episode", "uri": f"spotify:episode:{episode_id_2}" } ] } images = episode_images_1 + episode_images_2 + show_images_1 + show_images_2 return data, images def get_artist_albums(is_original: bool, record_id: str) -> Tuple[dict, List[dict]]: """Get fake artist albums data. Args: is_original: Original or cached images URLs. record_id: Cache record ID. Returns: Artist albums fake data and image list. """ album_id_1 = "album_id_001" images_1 = get_images( is_original=is_original, collection_name=CollectionName.CACHE, record_id=record_id, obj_name=ObjectName.ALBUM, obj_id=album_id_1, inner_path="items_0", ) album_id_2 = "album_id_002" images_2 = get_images( is_original=is_original, collection_name=CollectionName.CACHE, record_id=record_id, obj_name=ObjectName.ALBUM, obj_id=album_id_2, inner_path="items_1", index=2, ) artist_id = "artist_id_05" data = { "href": ( f"https://api.spotify.com/v1/artists/{artist_id}/" + "albums?offset=0&limit=2&include_groups=appears_on&market=ES" ), "items": [ { "album_group": "appears_on", "album_type": "album", "artists": [ { "external_urls": { "spotify": f"https://open.spotify.com/artist/{artist_id}" }, "href": f"https://api.spotify.com/v1/artists/{artist_id}", "id": artist_id, "name": "Various Artists", "type": "artist", "uri": f"spotify:artist:{artist_id}" } ], "external_urls": { "spotify": f"https://open.spotify.com/album/{album_id_1}" }, "href": f"https://api.spotify.com/v1/albums/{album_id_1}", "id": album_id_1, "images": images_1, "name": "Album 001", "release_date": "2020-08-25", "release_date_precision": "day", "total_tracks": 43, "type": "album", "uri": f"spotify:album:{album_id_1}" }, { "album_group": "appears_on", "album_type": "album", "artists": [ { "external_urls": { "spotify": f"https://open.spotify.com/artist/{artist_id}" }, "href": f"https://api.spotify.com/v1/artists/{artist_id}", "id": artist_id, "name": "Various Artists", "type": "artist", "uri": f"spotify:artist:{artist_id}" } ], "external_urls": { "spotify": f"https://open.spotify.com/album/{album_id_2}" }, "href": f"https://api.spotify.com/v1/albums/{album_id_2}", "id": album_id_2, "images": images_2, "name": "Album 002", "release_date": "2020-08-28", "release_date_precision": "day", "total_tracks": 22, "type": "album", "uri": f"spotify:album:{album_id_2}" } ], "limit": 2, "next": ( f"https://api.spotify.com/v1/artists/{artist_id}/" + "albums?offset=2&limit=2&include_groups=appears_on&market=ES" ), "offset": 0, "previous": None, "total": 234 } images = images_1 + images_2 return data, images def get_album_tracks(*args) -> Tuple[dict or list, list]: """Get fake album tracks data. Returns: Album tracks fake data. """ data = [ { "artists": [ { "external_urls": { "spotify": "https://open.spotify.com/artist/artist_id_100500" }, "href": "https://api.spotify.com/v1/artists/artist_id_100500", "id": "artist_id_100500", "name": "Artist 100500", "type": "artist", "uri": "spotify:artist:artist_id_100500" } ], "disc_number": 1, "duration_ms": 43423, "explicit": False, "external_urls": { "spotify": "https://open.spotify.com/track/track_id_1003" }, "href": "https://api.spotify.com/v1/tracks/track_id_1003", "id": "track_id_1003", "is_local": False, "is_playable": True, "linked_from": { "external_urls": { "spotify": "https://open.spotify.com/track/track_id_1002" }, "href": "https://api.spotify.com/v1/tracks/track_id_1002", "id": "track_id_1002", "type": "track", "uri": "spotify:track:track_id_1002" }, "name": "Let It Rain", "preview_url": "https://p.scdn.co/mp3-preview/jfaewojfoiwajoifjwa?cid=mreogmresomgresomoe", "track_number": 1, "type": "track", "uri": "spotify:track:track_id_1003" }, ] return data, [] def get_playlist_images(is_original: bool, record_id: str) -> Tuple[dict or list, List[dict]]: """Get fake playlist images data. Args: is_original: Original or cached images URLs. record_id: Cache record ID. Returns: Playlist images fake data and image list. """ playlist_id = record_id.split("_")[0].split("/")[-2] images = get_images( is_original=is_original, collection_name=CollectionName.CACHE, record_id=record_id, obj_name=ObjectName.PLAYLIST, obj_id=playlist_id, ) return images, images