"""Logic of API responses.""" from typing import Dict import config from confluent_kafka.serialization import StringSerializer from kafka_utils.producer.event import EventProducer from lambdacommon.common_config import logger from pydantic import ValidationError from src.common.types import ApiRequestType from src.common.types import RequestType from src.common.types import Store from src.models.apple_music import AppleMusicAlbumArtist from src.models.apple_music import AppleMusicAlbumArtistMessage from src.models.apple_music import AppleMusicAlbumsResponse from src.models.apple_music import AppleMusicArtistsResponse from src.models.apple_music import AppleMusicGetArtistForAlbumPayload from src.models.apple_music import AppleMusicGetArtistForAlbumRequest from src.models.apple_music import AppleMusicSearchAlbumByUPCRequest string_serializer = StringSerializer() producer = EventProducer( config.KAFKA_BROKERS, string_serializer, string_serializer, 'SSL') def apple_music_api_product_artists_search_response( api_request: AppleMusicSearchAlbumByUPCRequest, api_response: Dict): """Submit Apple Music API response to Kafka. Args: api_request: Original API request. api_response: Apple Music API response. """ try: album_response = AppleMusicAlbumsResponse(**api_response) for album in album_response.data: for artist in album.relationships.artists.data: request_type = ApiRequestType( store=Store.APPLE_MUSIC, type=RequestType.get_album_artist_by_id) payload = AppleMusicGetArtistForAlbumPayload( **{'id': artist.id, **api_request.payload.dict()}) get_artist_message = \ AppleMusicGetArtistForAlbumRequest( request_type=request_type, payload=payload ) producer.produce( topic='stream.storeAPIRequest.appleMusic.split', event_key=None, event_value=get_artist_message.json(), callback=None) except ValidationError: logger.warning( f'Unexpected API response for the request {api_request}\n' f'Response: {api_response}' ) def apple_music_api_get_artist_by_id_response( api_request: AppleMusicGetArtistForAlbumRequest, api_response: Dict): """Submit Apple Music API response to Kafka. Args: api_request: Original API request. api_response: Apple Music API response. """ response = AppleMusicArtistsResponse(**api_response) for artist_data in response.data: artist = AppleMusicAlbumArtist( id=artist_data.id, name=artist_data.attributes.name) artist_message = AppleMusicAlbumArtistMessage( api_request=api_request, artist=artist) producer.produce( 'event.applemusicapi.album.artist', f'product-{api_request.payload.product_id}', artist_message.json(), None)