# flake8: noqa '''Pytest conftest module.''' import pytest @pytest.fixture def context(): return { 'product': { 'status': None, 'display_artist_name': 'Cool Artist', 'grid': '123', 'catalog_number': '123', 'vendor_id': 999, 'upc': '231232563123', 'product_id': 90210, 'is_main_release': True, 'release_type': 'release', 'release_reference': 'R0', 'product_name': 'Test Artist', "not_for_distribution": "SwitchboardDummy", 'genres': [ { 'genre': 'ELECTRONICA-00', 'subgenre': 'Alternative' } ], }, 'tracks': [{ 'tuid': None, 'release_reference': 'R1', 'sequence_number': 1, 'release_type': 'TrackRelease', 'volume': 1, 'isrc': 'QZCDB2000001', 'track_name': 'This track', 'resource_reference': 'A1', }], 'deals': None, 'bucket': 'ddex-bucket', 'key': 'key', 'message_id': '12345', 'message_thread_id': '12345_12345', 'party_id': 'PADPIDA2012041004F', 'errors': {}, 'update_indicator': 'OriginalMessage', 'maintenance_owner': 'Columbia/Epic Label Group', 'orchard_label': 'TVT Records', 'deal_coordinators': None } @pytest.fixture def context_with_deal_coordinators(): return { 'product': { 'status': None, 'display_artist_name': 'Cool Artist', 'grid': '123', 'catalog_number': '123', 'vendor_id': 999, 'upc': '231232563123', 'product_id': 90210, 'is_main_release': True, 'release_type': 'release', 'release_reference': 'R0', 'product_name': 'Test Artist', "not_for_distribution": "SwitchboardDummy", 'genres': [ { 'genre': 'ELECTRONICA-00', 'subgenre': 'Alternative' } ], }, 'tracks': [{ 'tuid': None, 'release_reference': 'R1', 'sequence_number': 1, 'release_type': 'TrackRelease', 'volume': 1, 'isrc': 'QZCDB2000001', 'track_name': 'This track', 'resource_reference': 'A1', }], 'deals': None, 'bucket': 'ddex-bucket', 'key': 'key', 'message_id': '12345', 'message_thread_id': '12345_12345', 'party_id': 'PADPIDA2012041004F', 'errors': {}, 'update_indicator': 'OriginalMessage', 'maintenance_owner': 'Columbia/Epic Label Group', 'orchard_label': 'TVT Records', 'deal_coordinators': ['awesome-coordinator@theorchard.com'] } @pytest.fixture def context_submit_product_validation_results(): return { "key": "sme_ddex/UBtest-231020/", "message_id": "196785334", "message_thread_id": "G010003926337A_TOC", 'party_id': 'PADPIDA2012041004F', "tracks": [ { "sequence_number": 1, "release_reference": "R1", "asset": { "key": "sme_ddex/UBtest-231020/resources/A10301A0003926337A_T-1102312791002_SoundRecording_001-001.flac", "filepath": "resources/", "ows_assets_filename": None, "bucket": "qa-ddex-ingester", "filename": "A10301A0003926337A_T-1102312791002_SoundRecording_001-001.flac" }, "tuid": 32532616, "isrc": "FIMRR1800137", "volume": 1, "release_type": "TrackRelease", 'track_name': 'This track', 'resource_reference': 'A1', }, { "sequence_number": 2, "release_reference": "R2", "asset": { "key": "sme_ddex/UBtest-231020/resources/A10301A0003926337A_T-1102312791003_SoundRecording_001-002.flac", "filepath": "resources/", "ows_assets_filename": None, "bucket": "qa-ddex-ingester", "filename": "A10301A0003926337A_T-1102312791003_SoundRecording_001-002.flac" }, "tuid": 32532617, "isrc": "FIMRR1800138", "volume": 1, "release_type": "TrackRelease", 'track_name': 'This track', 'resource_reference': 'A2', }, { "sequence_number": 3, "release_reference": "R3", "asset": { "key": "sme_ddex/UBtest-231020/resources/A10301A0003926337A_T-1102312791004_SoundRecording_001-003.flac", "filepath": "resources/", "ows_assets_filename": None, "bucket": "qa-ddex-ingester", "filename": "A10301A0003926337A_T-1102312791004_SoundRecording_001-003.flac" }, "tuid": 32532618, "isrc": "FIMRR1800139", "volume": 1, "release_type": "TrackRelease", 'track_name': 'This track', 'resource_reference': 'A3', }, { "sequence_number": 4, "release_reference": "R4", "asset": { "key": "sme_ddex/UBtest-231020/resources/A10301A0003926337A_T-1102312791005_SoundRecording_001-004.flac", "filepath": "resources/", "ows_assets_filename": None, "bucket": "qa-ddex-ingester", "filename": "A10301A0003926337A_T-1102312791005_SoundRecording_001-004.flac" }, "tuid": 32532619, "isrc": "FIMRR1800140", "volume": 1, "release_type": "TrackRelease", 'track_name': 'This track', 'resource_reference': 'A4', }, { "sequence_number": 5, "release_reference": "R5", "asset": { "key": "sme_ddex/UBtest-231020/resources/A10301A0003926337A_T-1102312791006_SoundRecording_001-005.flac", "filepath": "resources/", "ows_assets_filename": None, "bucket": "qa-ddex-ingester", "filename": "A10301A0003926337A_T-1102312791006_SoundRecording_001-005.flac" }, "tuid": 32532620, "isrc": "FIMRR1800141", "volume": 1, "release_type": "TrackRelease", 'track_name': 'This track', 'resource_reference': 'A5', } ], "bucket": "qa-ddex-ingester", "product": { 'status': "label_processing", "release_reference": "R0", "grid": "A10301A0003926337A", "not_for_distribution": "SwitchboardDummy", "artwork": { "key": "sme_ddex/UBtest-231020/resources/A10301A0003926337A_T-1219012790999_Image.jpg", "filepath": "resources/", "ows_assets_filename": None, "bucket": "qa-ddex-ingester", "filename": "A10301A0003926337A_T-1219012790999_Image.jpg" }, "sale_start_date": "2020-11-18", "catalog_number": "G010003926337A", "vendor_id": 25824, "subaccount_id": None, "display_artist_name": "Test Artist", "original_release_date": "2020-11-18", "upc": "886447094297", "is_main_release": True, "product_id": 2996279, 'product_name': 'Seksikäs-Suklaa & Dosdela', "release_type": "Album", 'genres': [ { 'genre': 'ELECTRONICA-00', 'subgenre': 'Alternative' } ], }, "deals": None, "errors": { 'Error': 'ProductValidationException', 'ErrorMessage': [ [ 'Artwork is missing' ], [ 'ISRC: US23452354243: P-line is missing', 'ISRC: US23452354243: Localizations are missing' ] ] }, 'update_indicator': 'OriginalMessage', 'maintenance_owner': 'Columbia/Epic Label Group', 'orchard_label': 'TVT Records' } @pytest.fixture def context_validation_rule_rejection(): return { "key": "sme_ddex/UBtest-231020/", "message_id": "196785334", "message_thread_id": "G010003926337A_TOC", 'party_id': 'PADPIDA2012041004F', "tracks": [ { "sequence_number": 1, "release_reference": "R1", "asset": { "key": "sme_ddex/UBtest-231020/resources/A10301A0003926337A_T-1102312791002_SoundRecording_001-001.flac", "filepath": "resources/", "ows_assets_filename": None, "bucket": "qa-ddex-ingester", "filename": "A10301A0003926337A_T-1102312791002_SoundRecording_001-001.flac" }, "tuid": 32532616, "isrc": "FIMRR1800137", "volume": 1, "release_type": "TrackRelease", 'track_name': 'This track', 'resource_reference': 'A1', }, { "sequence_number": 2, "release_reference": "R2", "asset": { "key": "sme_ddex/UBtest-231020/resources/A10301A0003926337A_T-1102312791003_SoundRecording_001-002.flac", "filepath": "resources/", "ows_assets_filename": None, "bucket": "qa-ddex-ingester", "filename": "A10301A0003926337A_T-1102312791003_SoundRecording_001-002.flac" }, "tuid": 32532617, "isrc": "FIMRR1800138", "volume": 1, "release_type": "TrackRelease", 'track_name': 'This track', 'resource_reference': 'A2', }, { "sequence_number": 3, "release_reference": "R3", "asset": { "key": "sme_ddex/UBtest-231020/resources/A10301A0003926337A_T-1102312791004_SoundRecording_001-003.flac", "filepath": "resources/", "ows_assets_filename": None, "bucket": "qa-ddex-ingester", "filename": "A10301A0003926337A_T-1102312791004_SoundRecording_001-003.flac" }, "tuid": 32532618, "isrc": "FIMRR1800139", "volume": 1, "release_type": "TrackRelease", 'track_name': 'This track', 'resource_reference': 'A3', }, { "sequence_number": 4, "release_reference": "R4", "asset": { "key": "sme_ddex/UBtest-231020/resources/A10301A0003926337A_T-1102312791005_SoundRecording_001-004.flac", "filepath": "resources/", "ows_assets_filename": None, "bucket": "qa-ddex-ingester", "filename": "A10301A0003926337A_T-1102312791005_SoundRecording_001-004.flac" }, "tuid": 32532619, "isrc": "FIMRR1800140", "volume": 1, "release_type": "TrackRelease", 'track_name': 'This track', 'resource_reference': 'A4', }, { "sequence_number": 5, "release_reference": "R5", "asset": { "key": "sme_ddex/UBtest-231020/resources/A10301A0003926337A_T-1102312791006_SoundRecording_001-005.flac", "filepath": "resources/", "ows_assets_filename": None, "bucket": "qa-ddex-ingester", "filename": "A10301A0003926337A_T-1102312791006_SoundRecording_001-005.flac" }, "tuid": 32532620, "isrc": "FIMRR1800141", "volume": 1, "release_type": "TrackRelease", 'track_name': 'This track', 'resource_reference': 'A5', } ], "bucket": "qa-ddex-ingester", "product": { 'status': "label_processing", "release_reference": "R0", "grid": "A10301A0003926337A", "not_for_distribution": "SwitchboardDummy", "artwork": { "key": "sme_ddex/UBtest-231020/resources/A10301A0003926337A_T-1219012790999_Image.jpg", "filepath": "resources/", "ows_assets_filename": None, "bucket": "qa-ddex-ingester", "filename": "A10301A0003926337A_T-1219012790999_Image.jpg" }, "sale_start_date": "2020-11-18", "catalog_number": "G010003926337A", "vendor_id": 25824, "subaccount_id": None, "display_artist_name": "Test Artist", "original_release_date": "2020-11-18", "upc": "886447094297", "is_main_release": True, "product_id": 2996279, 'product_name': 'Seksikäs-Suklaa & Dosdela', "release_type": "Album", 'genres': [ { 'genre': 'ELECTRONICA-00', 'subgenre': 'Alternative' } ], }, "deals": None, "errors": { "Error": "ValidationRuleException", "Cause": "{\"errorMessage\": \"['Invalid genre','Orchard Label ID is missing','Project artist is missing']\", \"errorType\": \"ValidationRuleException\", \"stackTrace\": [\" File \\\"/var/lang/lib/python3.8/site-packages/sentry_sdk/integrations/aws_lambda.py\\\", line 161, in sentry_handler\\n reraise(*exc_info)\\n\", \" File \\\"/var/lang/lib/python3.8/site-packages/sentry_sdk/_compat.py\\\", line 54, in reraise\\n raise value\\n\", \" File \\\"/var/lang/lib/python3.8/site-packages/sentry_sdk/integrations/aws_lambda.py\\\", line 152, in sentry_handler\\n return handler(aws_event, aws_context, *args, **kwargs)\\n\", \" File \\\"/var/task/index.py\\\", line 63, in handler\\n raise ValidationRuleException(\\n\"]}" }, 'update_indicator': 'OriginalMessage', 'maintenance_owner': 'Columbia/Epic Label Group', 'orchard_label': 'TVT Records' } @pytest.fixture def context_parallel_fail(): return { 'product': { 'status': None, 'vendor_id': 123, 'subaccount_id': 123, 'release_reference': 'R0', 'upc': '886447094297', 'is_main_release': True, 'product_id': None, 'artwork': { 'filename': 'artwork.tif', 'filepath': 'resources/', 'bucket': 'ddex-bucket', 'key': 'folder/subfolder/resources/artwork.tif', 'ows_assets_filename': None }, 'release_type': 'Album', 'sale_start_date': '2010-12-21', 'original_release_date': '2010-12-31', 'grid': 'A10301A0004280500R', 'catalog_number': 'G010004280500R', 'display_artist_name': 'Test Artist', 'product_name': 'Seksikäs-Suklaa & Dosdela', 'genres': [ { 'genre': 'ELECTRONICA-00', 'subgenre': 'Alternative' } ], }, 'tracks': [ { 'release_reference': 'R1', 'asset': { 'filename': 'audio.flac', 'filepath': 'resources/', 'bucket': 'ddex-bucket', 'key': 'folder/subfolder/resources/audio.flac', 'ows_assets_filename': None }, 'volume': 1, 'tuid': None, 'sequence_number': 1, 'isrc': 'USSM12001699', 'release_type': 'TrackRelease', 'track_name': 'This track', 'resource_reference': 'A1', } ], 'deals': [ { 'release_references': ['R1'], 'deal_terms': [ { 'start_date': None, 'start_date_time': '2020-03-27T00:00:00', 'territories': ['AE'], 'commercial_model_types': [ 'AdvertisementSupportedModel' ], 'usage_type': [ 'NonInteractiveStream', 'OnDemandStream', ], 'takedown': None, } ], } ], 'key': 'folder/subfolder/', 'bucket': 'ddex-bucket', 'message_id': '123456', 'message_thread_id': '123456SOMETHING', 'party_id': 'PADPIDA2012041004F', 'errors': { 'Error': 'TypeError', "Cause": "{\"errorMessage\": \"'NoneType' object is not subscriptable\", \"errorType\": \"TypeError\", \"stackTrace\": [[\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 57, \"sentry_handler\", \"reraise(*exc_info)\"], [\"/var/task/sentry_sdk/_compat.py\", 57, \"reraise\", \"raise value\"], [\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 48, \"sentry_handler\", \"return handler(event, context, *args, **kwargs)\"], [\"/var/task/index.py\", 27, \"handler\", \"get_asset_status(context.product.artwork.ows_assets_filename)\"], [\"/var/task/index.py\", 35, \"get_asset_status\", \"graphql_gateway, filename\"], [\"/var/task/ddex_ingester_common/helpers/asset.py\", 68, \"get_asset_status_v2\", \")['data']['assetStatus']['status']\"]]}" }, 'update_indicator': 'OriginalMessage', 'maintenance_owner': 'Columbia/Epic Label Group', 'orchard_label': 'TVT Records' } @pytest.fixture def context_product_not_found(): return { 'product': { 'status': None, 'vendor_id': 123, 'subaccount_id': 123, 'release_reference': 'R0', 'upc': '886447094297', 'is_main_release': True, 'product_id': None, 'artwork': { 'filename': 'artwork.tif', 'filepath': 'resources/', 'bucket': 'ddex-bucket', 'key': 'folder/subfolder/resources/artwork.tif', 'ows_assets_filename': None }, 'release_type': 'Album', 'sale_start_date': '2010-12-21', 'original_release_date': '2010-12-31', 'grid': 'A10301A0004280500R', 'catalog_number': 'G010004280500R', 'display_artist_name': 'Test Artist', 'product_name': 'Seksikäs-Suklaa & Dosdela', 'genres': [ { 'genre': 'ELECTRONICA-00', 'subgenre': 'Alternative' } ], }, 'tracks': [ { 'release_reference': 'R1', 'asset': { 'filename': 'audio.flac', 'filepath': 'resources/', 'bucket': 'ddex-bucket', 'key': 'folder/subfolder/resources/audio.flac', 'ows_assets_filename': None }, 'volume': 1, 'tuid': None, 'sequence_number': 1, 'isrc': 'USSM12001699', 'release_type': 'TrackRelease', 'track_name': 'This track', 'resource_reference': 'A1', } ], 'deals': None, 'key': 'folder/subfolder/', 'bucket': 'ddex-bucket', 'message_id': '123456', 'message_thread_id': '123456SOMETHING', 'party_id': 'PADPIDA2012041004F', 'errors': { 'Error': 'OrchardProductNotFoundException', "Cause": "{\"errorMessage\": \"Product id was not found for UPC: 889999999\",\"errorType\": \"ValueError\",\"stackTrace\": [[\"/var/task/sentry_sdk/integrations/aws_lambda.py\",57,\"sentry_handler\",\"reraise(*exc_info)\"],[\"/var/task/sentry_sdk/_compat.py\",57,\"reraise\",\"raise value\"],[\"/var/task/sentry_sdk/integrations/aws_lambda.py\",48,\"sentry_handler\",\"return handler(event, context, *args, **kwargs)\"],[\"/var/task/index.py\",26,\"handler\",\"f'Product id was not found for UPC: {context.product.upc}')\"]]}" }, 'update_indicator': 'OriginalMessage', 'maintenance_owner': 'Columbia/Epic Label Group', 'orchard_label': 'TVT Records' } @pytest.fixture def context_submit_video_validation_failure(): return { 'errors': { 'Error': 'SubmitVideoProductValidationException', "Cause": "{\"errorMessage\": \"Video Product is invalid\", \"errorType\": \"SubmitVideoProductValidationException\",\"stackTrace\": [[\"/var/task/sentry_sdk/integrations/aws_lambda.py\",57,\"sentry_handler\",\"reraise(*exc_info)\"],[\"/var/task/sentry_sdk/_compat.py\",57,\"reraise\",\"raise value\"],[\"/var/task/sentry_sdk/integrations/aws_lambda.py\",48,\"sentry_handler\",\"return handler(event, context, *args, **kwargs)\"],[\"/var/task/index.py\",26,\"handler\",\"f'Product id was not found for UPC: {context.product.upc}')\"]]}" }, 'product': { 'status': 'label_processing', 'vendor_id': 123, 'subaccount_id': 123, 'release_reference': 'R0', 'upc': '886448369561', 'is_main_release': True, 'product_id': None, 'not_for_distribution': 'SwitchboardDummy', 'artwork': { 'filename': 'artwork.tif', 'filepath': 'resources/', 'bucket': 'ddex-bucket', 'key': 'folder/subfolder/resources/artwork.tif', 'ows_assets_filename': None }, 'release_type': 'Album', 'sale_start_date': '2010-12-21', 'original_release_date': '2010-12-31', 'grid': 'A10301A0004280500R', 'catalog_number': 'G010004280500R', 'display_artist_name': 'Giveon', 'product_name': 'Seksikäs-Suklaa & Dosdela', 'genres': [ { 'genre': 'ELECTRONICA-00', 'subgenre': 'Alternative' } ], }, 'tracks': [ { 'release_reference': 'R1', 'asset': { 'filename': 'audio.flac', 'filepath': 'resources/', 'bucket': 'ddex-bucket', 'key': 'folder/subfolder/resources/audio.flac', 'ows_assets_filename': None }, 'volume': 1, 'tuid': None, 'sequence_number': 1, 'isrc': 'USSM12001699', 'release_type': 'TrackRelease', 'track_name': 'This track', 'resource_reference': 'A1', } ], 'deals': None, 'key': 'folder/subfolder/', 'bucket': 'ddex-bucket', 'message_id': '123456', 'message_thread_id': '123456SOMETHING', 'party_id': 'PADPIDA2012041004F', 'update_indicator': 'OriginalMessage', 'maintenance_owner': 'Columbia/Epic Label Group', 'orchard_label': 'TVT Records' } @pytest.fixture def context_ingestion_success(): return { 'product': { 'status': None, 'vendor_id': 123, 'subaccount_id': 123, 'release_reference': 'R0', 'upc': '886448369561', 'is_main_release': True, 'product_id': None, 'artwork': { 'filename': 'artwork.tif', 'filepath': 'resources/', 'bucket': 'ddex-bucket', 'key': 'folder/subfolder/resources/artwork.tif', 'ows_assets_filename': None }, 'release_type': 'Album', 'sale_start_date': '2010-12-21', 'original_release_date': '2010-12-31', 'grid': 'A10301A0004280500R', 'catalog_number': 'G010004280500R', 'display_artist_name': 'Giveon', 'product_name': 'Seksikäs-Suklaa & Dosdela', 'genres': [ { 'genre': 'ELECTRONICA-00', 'subgenre': 'Alternative' } ], }, 'tracks': [ { 'release_reference': 'R1', 'asset': { 'filename': 'audio.flac', 'filepath': 'resources/', 'bucket': 'ddex-bucket', 'key': 'folder/subfolder/resources/audio.flac', 'ows_assets_filename': None }, 'volume': 1, 'tuid': None, 'sequence_number': 1, 'isrc': 'USSM12001699', 'release_type': 'TrackRelease', 'track_name': 'This track', 'resource_reference': 'A1', } ], 'deals': [ { 'release_references': ['R1'], 'deal_terms': [ { 'start_date': None, 'start_date_time': '2020-03-27T00:00:00', 'territories': ['AE'], 'commercial_model_types': [ 'AdvertisementSupportedModel' ], 'usage_type': [ 'NonInteractiveStream', 'OnDemandStream', ], 'takedown': None, } ], } ], 'key': 'folder/subfolder/', 'bucket': 'ddex-bucket', 'message_id': '123456', 'message_thread_id': '123456SOMETHING', 'party_id': 'PADPIDA2012041004F', 'errors': None, 'update_indicator': 'OriginalMessage', 'maintenance_owner': 'Columbia/Epic Label Group', 'orchard_label': 'TVT Records' } @pytest.fixture def context_in_content_update_success(): return { 'product': { 'status': 'in_content', 'vendor_id': 123, 'subaccount_id': 123, 'release_reference': 'R0', 'upc': '886448369561', 'is_main_release': True, 'product_id': None, 'artwork': { 'filename': 'artwork.tif', 'filepath': 'resources/', 'bucket': 'ddex-bucket', 'key': 'folder/subfolder/resources/artwork.tif', 'ows_assets_filename': None }, 'release_type': 'Album', 'sale_start_date': '2010-12-21', 'original_release_date': '2010-12-31', 'grid': 'A10301A0004280500R', 'catalog_number': 'G010004280500R', 'display_artist_name': 'Test Artist', 'product_name': 'Seksikäs-Suklaa & Dosdela', 'original_values': { 'sale_start_date': '2020-12-21', 'carveout_country_codes': ['AE', 'UE'], 'release_date': '2016-01-01' }, 'genres': [ { 'genre': 'ELECTRONICA-00', 'subgenre': 'Alternative' } ], }, 'tracks': [ { 'release_reference': 'R1', 'asset': { 'filename': 'audio.flac', 'filepath': 'resources/', 'bucket': 'ddex-bucket', 'key': 'folder/subfolder/resources/audio.flac', 'ows_assets_filename': None }, 'volume': 1, 'tuid': None, 'sequence_number': 1, 'isrc': 'USSM12001699', 'release_type': 'TrackRelease', 'track_name': 'This track', 'resource_reference': 'A1', }, { 'release_reference': 'R2', 'asset': { 'filename': 'audio.flac', 'filepath': 'resources/', 'bucket': 'ddex-bucket', 'key': 'folder/subfolder/resources/audio.flac', 'ows_assets_filename': None }, 'volume': 1, 'tuid': None, 'sequence_number': 1, 'isrc': 'USSM12001611', 'release_type': 'TrackRelease', 'track_name': 'This track', 'resource_reference': 'A1', } ], 'deals': [ { 'release_references': ['R1'], 'deal_terms': [ { 'start_date': None, 'start_date_time': '2020-03-27T00:00:00', 'territories': ['AE'], 'commercial_model_types': [ 'AdvertisementSupportedModel' ], 'usage_type': [ 'NonInteractiveStream', 'OnDemandStream', ], 'takedown': None, } ], } ], 'key': 'folder/subfolder/', 'bucket': 'ddex-bucket', 'message_id': '123456', 'message_thread_id': '123456SOMETHING', 'party_id': 'PADPIDA2012041004F', 'ddex_provider': 'SME', 'errors': None, 'update_indicator': 'OriginalMessage', 'maintenance_owner': 'Columbia/Epic Label Group', 'orchard_label': 'TVT Records' } @pytest.fixture def context_in_content_update_success_no_carveout(): return { 'product': { 'status': 'in_content', 'vendor_id': 123, 'subaccount_id': 123, 'release_reference': 'R0', 'upc': '886448369561', 'is_main_release': True, 'product_id': None, 'artwork': { 'filename': 'artwork.tif', 'filepath': 'resources/', 'bucket': 'ddex-bucket', 'key': 'folder/subfolder/resources/artwork.tif', 'ows_assets_filename': None }, 'release_type': 'Album', 'sale_start_date': '2010-12-21', 'original_release_date': '2010-12-31', 'grid': 'A10301A0004280500R', 'catalog_number': 'G010004280500R', 'display_artist_name': 'Test Artist', 'product_name': 'Seksikäs-Suklaa & Dosdela', 'original_values': { 'sale_start_date': '2020-12-21', 'carveout_country_codes': ['AE', 'CA'] }, 'genres': [ { 'genre': 'ELECTRONICA-00', 'subgenre': 'Alternative' } ], }, 'tracks': [ { 'release_reference': 'R1', 'asset': { 'filename': 'audio.flac', 'filepath': 'resources/', 'bucket': 'ddex-bucket', 'key': 'folder/subfolder/resources/audio.flac', 'ows_assets_filename': None }, 'volume': 1, 'tuid': None, 'sequence_number': 1, 'isrc': 'USSM12001699', 'release_type': 'TrackRelease', 'track_name': 'This track', 'resource_reference': 'A1', } ], 'deals': [ { 'release_references': ['R1'], 'deal_terms': [ { 'start_date': None, 'start_date_time': '2020-03-27T00:00:00', 'territories': ['AE'], 'commercial_model_types': [ 'AdvertisementSupportedModel' ], 'usage_type': [ 'NonInteractiveStream', 'OnDemandStream', ], 'takedown': None, } ], } ], 'key': 'folder/subfolder/', 'bucket': 'ddex-bucket', 'message_id': '123456', 'message_thread_id': '123456SOMETHING', 'party_id': 'PADPIDA2012041004F', 'errors': None, 'update_indicator': 'OriginalMessage', 'maintenance_owner': 'Columbia/Epic Label Group', 'orchard_label': 'TVT Records' } @pytest.fixture def context_in_content_update_fail(): return { 'product': { 'status': 'in_content', 'vendor_id': 123, 'subaccount_id': 123, 'release_reference': 'R0', 'upc': '886448369561', 'is_main_release': True, 'product_id': None, 'artwork': { 'filename': 'artwork.tif', 'filepath': 'resources/', 'bucket': 'ddex-bucket', 'key': 'folder/subfolder/resources/artwork.tif', 'ows_assets_filename': None }, 'release_type': 'Album', 'sale_start_date': '2010-12-21', 'original_release_date': '2010-12-31', 'grid': 'A10301A0004280500R', 'catalog_number': 'G010004280500R', 'display_artist_name': 'Test Artist', 'product_name': 'Seksikäs-Suklaa & Dosdela', 'original_values': {}, 'genres': [ { 'genre': 'ELECTRONICA-00', 'subgenre': 'Alternative' } ], }, 'tracks': [ { 'release_reference': 'R1', 'asset': { 'filename': 'audio.flac', 'filepath': 'resources/', 'bucket': 'ddex-bucket', 'key': 'folder/subfolder/resources/audio.flac', 'ows_assets_filename': None }, 'volume': 1, 'tuid': None, 'sequence_number': 1, 'isrc': 'USSM12001699', 'release_type': 'TrackRelease', 'track_name': 'This track', 'resource_reference': 'A1', } ], 'deals': [ { 'release_references': ['R1'], 'deal_terms': [ { 'start_date': None, 'start_date_time': '2020-03-27T00:00:00', 'territories': ['AE'], 'commercial_model_types': [ 'AdvertisementSupportedModel' ], 'usage_type': [ 'NonInteractiveStream', 'OnDemandStream', ], 'takedown': None, } ], } ], 'key': 'folder/subfolder/', 'bucket': 'ddex-bucket', 'message_id': '123456', 'message_thread_id': '123456SOMETHING', 'party_id': 'PADPIDA2012041004F', 'errors': { 'Error': 'TypeError', "Cause": "{\"errorMessage\": \"'NoneType' object is not subscriptable\", \"errorType\": \"TypeError\", \"stackTrace\": [[\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 57, \"sentry_handler\", \"reraise(*exc_info)\"], [\"/var/task/sentry_sdk/_compat.py\", 57, \"reraise\", \"raise value\"], [\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 48, \"sentry_handler\", \"return handler(event, context, *args, **kwargs)\"], [\"/var/task/index.py\", 27, \"handler\", \"get_asset_status(context.product.artwork.ows_assets_filename)\"], [\"/var/task/index.py\", 35, \"get_asset_status\", \"graphql_gateway, filename\"], [\"/var/task/ddex_ingester_common/helpers/asset.py\", 68, \"get_asset_status_v2\", \")['data']['assetStatus']['status']\"]]}" }, 'update_indicator': 'OriginalMessage', 'maintenance_owner': 'Columbia/Epic Label Group', 'orchard_label': 'TVT Records' } @pytest.fixture def context_video_in_content(): return { 'project': { 'project_code': 'abc' }, 'product': { 'status': None, 'vendor_id': 123, 'subaccount_id': 123, 'release_reference': 'R0', 'upc': '886448369561', 'is_main_release': True, 'product_id': None, 'artwork': { 'filename': 'artwork.tif', 'filepath': 'resources/', 'bucket': 'ddex-bucket', 'key': 'folder/subfolder/resources/artwork.tif', 'ows_assets_filename': None }, 'release_type': 'VideoSingle', 'sale_start_date': '2010-12-21', 'original_release_date': '2010-12-31', 'grid': 'A10301A0004280500R', 'catalog_number': 'G010004280500R', 'display_artist_name': 'Test Artist', 'product_name': 'Seksikäs-Suklaa & Dosdela', 'original_values': { 'sale_start_date': '2020-12-21', 'carveout_country_codes': ['AE', 'CA'] }, 'genres': [ { 'genre': 'ELECTRONICA-00', 'subgenre': 'Alternative' } ], }, 'tracks': [ { 'release_reference': 'R1', 'asset': { 'filename': 'audio.flac', 'filepath': 'resources/', 'bucket': 'ddex-bucket', 'key': 'folder/subfolder/resources/audio.flac', 'ows_assets_filename': None }, 'volume': 1, 'tuid': None, 'sequence_number': 1, 'isrc': 'USSM12001699', 'release_type': 'TrackRelease', 'track_name': 'This track', 'resource_reference': 'A1', } ], 'deals': [ { 'release_references': ['R1'], 'deal_terms': [ { 'start_date': None, 'start_date_time': '2020-03-27T00:00:00', 'territories': ['AE'], 'commercial_model_types': [ 'AdvertisementSupportedModel' ], 'usage_type': [ 'NonInteractiveStream', 'OnDemandStream', ], 'takedown': None, } ], } ], 'key': 'folder/subfolder/', 'bucket': 'ddex-bucket', 'message_id': '123456', 'message_thread_id': '123456SOMETHING', 'party_id': 'PADPIDA2012041004F', 'errors': { 'Error': 'VideoUpdateException' }, 'update_indicator': 'OriginalMessage', 'maintenance_owner': 'Columbia/Epic Label Group', 'orchard_label': 'TVT Records' } @pytest.fixture def graphql_response(): return { 'vendorId': 15063, "not_for_distribution": "SwitchboardDummy", 'subaccountId': None, 'productId': 2937627, 'status': 'in_content', 'saleStartDate': '2010-12-21', 'project': { 'projectCode': 'FirstProject' }, 'label': { 'vendorId': 15063, 'subaccountId': 0, 'assignedToEmail': 'phanly@theorchard.com' }, 'tracks': [ { 'trackNumber': 1, 'volumeNumber': 1, 'tuid': '32203776', 'isrc': 'QM7282068132' } ], "productTerritoryCarveouts": [ { "countryCode": "US" }, { "countryCode": "GB" }, { "countryCode": "DE" }, { "countryCode": "SE" } ] } @pytest.fixture def no_dupes_list(): return [ 'ISRC: US23452354243: Field `meta_language_code` is required', 'ISRC: US23452354243: Field `recording_country_id` is required', 'ISRC: US23452354243: Field `original_rights_holder_country_id` is required', # noqa 'ISRC: US23452354243: There are featured artist(s) listed at the release level (Basics). They must also be listed on all tracks.', # noqa ] @pytest.fixture def build_errors(): return [ 'Artwork is missing', 'ISRC: US23452354243: P-line is missing', 'ISRC: US23452354243: Localizations are missing', ] @pytest.fixture def artwork_errors(): return [ 'Artwork has not been uploaded successfully.', 'ISRC: US34523454352: Field `meta_language_code` is required', ] @pytest.fixture def artwork_error_data(): return { "errors": { "Error": "ProductValidationException", "ErrorMessage": [ ['Artwork has not been uploaded successfully.'], ['ISRC: US34523454352: Field `meta_language_code` is required'] ] } } @pytest.fixture def context_multiple_generic_errors(): return { 'key': 'sme_ddex/A10301A00007845431_UB/', 'deals': None, 'tracks': [ { 'volume': 1, 'asset': { 'key': 'sme_ddex/A10301A00007845431_UB/resources/A10301A00007845431_T-110231668713_SoundRecording_001-001.flac', 'filepath': 'resources/', 'filename': 'A10301A00007845431_T-110231668713_SoundRecording_001-001.flac', 'bucket': 'qa-ddex-ingester', 'ows_assets_filename': None }, 'release_reference': 'R1', 'isrc': 'USSM10606965', 'release_type': 'TrackRelease', 'tuid': 33740738, 'sequence_number': 1, 'track_name': 'This track', 'resource_reference': 'A1', } ], 'errors': [ { 'Error': 'AudioException', "Cause": "{\"errorMessage\": \"Asset status is not finished\", \"errorType\": \"AudioException\", \"stackTrace\": [[\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 57, \"sentry_handler\", \"reraise(*exc_info)\"], [\"/var/task/sentry_sdk/_compat.py\", 57, \"reraise\", \"raise value\"], [\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 48, \"sentry_handler\", \"return handler(event, context, *args, **kwargs)\"], [\"/var/task/index.py\", 30, \"handler\", \"get_asset_status(context.product.product_id, track.tuid)\"], [\"/var/task/index.py\", 53, \"get_asset_status\", \"raise AudioException(f\"Asset status is not {FINISHED}\")\"]]}" }, { "Error": "AudioException", "Cause": "{\"errorMessage\": \"Asset status is not finished\", \"errorType\": \"AudioException\", \"stackTrace\": [[\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 57, \"sentry_handler\", \"reraise(*exc_info)\"], [\"/var/task/sentry_sdk/_compat.py\", 57, \"reraise\", \"raise value\"], [\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 48, \"sentry_handler\", \"return handler(event, context, *args, **kwargs)\"], [\"/var/task/index.py\", 30, \"handler\", \"get_asset_status(context.product.product_id, track.tuid)\"], [\"/var/task/index.py\", 53, \"get_asset_status\", \"raise AudioException(f\"Asset status is not {FINISHED}\")\"]]}" }, { "Error": "AudioException", "Cause": "{\"errorMessage\": \"Asset status is not finished\", \"errorType\": \"AudioException\", \"stackTrace\": [[\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 57, \"sentry_handler\", \"reraise(*exc_info)\"], [\"/var/task/sentry_sdk/_compat.py\", 57, \"reraise\", \"raise value\"], [\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 48, \"sentry_handler\", \"return handler(event, context, *args, **kwargs)\"], [\"/var/task/index.py\", 30, \"handler\", \"get_asset_status(context.product.product_id, track.tuid)\"], [\"/var/task/index.py\", 53, \"get_asset_status\", \"raise AudioException(f\"Asset status is not {FINISHED}\")\"]]}" }, { "Error": "AudioException", "Cause": "{\"errorMessage\": \"Asset status is not finished\", \"errorType\": \"AudioException\", \"stackTrace\": [[\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 57, \"sentry_handler\", \"reraise(*exc_info)\"], [\"/var/task/sentry_sdk/_compat.py\", 57, \"reraise\", \"raise value\"], [\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 48, \"sentry_handler\", \"return handler(event, context, *args, **kwargs)\"], [\"/var/task/index.py\", 30, \"handler\", \"get_asset_status(context.product.product_id, track.tuid)\"], [\"/var/task/index.py\", 53, \"get_asset_status\", \"raise AudioException(f\"Asset status is not {FINISHED}\")\"]]}" }, { "Error": "AudioException", "Cause": "{\"errorMessage\": \"Asset status is not finished\", \"errorType\": \"AudioException\", \"stackTrace\": [[\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 57, \"sentry_handler\", \"reraise(*exc_info)\"], [\"/var/task/sentry_sdk/_compat.py\", 57, \"reraise\", \"raise value\"], [\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 48, \"sentry_handler\", \"return handler(event, context, *args, **kwargs)\"], [\"/var/task/index.py\", 30, \"handler\", \"get_asset_status(context.product.product_id, track.tuid)\"], [\"/var/task/index.py\", 53, \"get_asset_status\", \"raise AudioException(f\"Asset status is not {FINISHED}\")\"]]}" }, { "Error": "AudioException", "Cause": "{\"errorMessage\": \"Asset status is not finished\", \"errorType\": \"AudioException\", \"stackTrace\": [[\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 57, \"sentry_handler\", \"reraise(*exc_info)\"], [\"/var/task/sentry_sdk/_compat.py\", 57, \"reraise\", \"raise value\"], [\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 48, \"sentry_handler\", \"return handler(event, context, *args, **kwargs)\"], [\"/var/task/index.py\", 30, \"handler\", \"get_asset_status(context.product.product_id, track.tuid)\"], [\"/var/task/index.py\", 53, \"get_asset_status\", \"raise AudioException(f\"Asset status is not {FINISHED}\")\"]]}" }, { "Error": "AudioException", "Cause": "{\"errorMessage\": \"Asset status is not finished\", \"errorType\": \"AudioException\", \"stackTrace\": [[\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 57, \"sentry_handler\", \"reraise(*exc_info)\"], [\"/var/task/sentry_sdk/_compat.py\", 57, \"reraise\", \"raise value\"], [\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 48, \"sentry_handler\", \"return handler(event, context, *args, **kwargs)\"], [\"/var/task/index.py\", 30, \"handler\", \"get_asset_status(context.product.product_id, track.tuid)\"], [\"/var/task/index.py\", 53, \"get_asset_status\", \"raise AudioException(f\"Asset status is not {FINISHED}\")\"]]}" }, { "Error": "AudioException", "Cause": "{\"errorMessage\": \"Asset status is not finished\", \"errorType\": \"AudioException\", \"stackTrace\": [[\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 57, \"sentry_handler\", \"reraise(*exc_info)\"], [\"/var/task/sentry_sdk/_compat.py\", 57, \"reraise\", \"raise value\"], [\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 48, \"sentry_handler\", \"return handler(event, context, *args, **kwargs)\"], [\"/var/task/index.py\", 30, \"handler\", \"get_asset_status(context.product.product_id, track.tuid)\"], [\"/var/task/index.py\", 53, \"get_asset_status\", \"raise AudioException(f\"Asset status is not {FINISHED}\")\"]]}" }, { "Error": "AudioException", "Cause": "{\"errorMessage\": \"Asset status is not finished\", \"errorType\": \"AudioException\", \"stackTrace\": [[\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 57, \"sentry_handler\", \"reraise(*exc_info)\"], [\"/var/task/sentry_sdk/_compat.py\", 57, \"reraise\", \"raise value\"], [\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 48, \"sentry_handler\", \"return handler(event, context, *args, **kwargs)\"], [\"/var/task/index.py\", 30, \"handler\", \"get_asset_status(context.product.product_id, track.tuid)\"], [\"/var/task/index.py\", 53, \"get_asset_status\", \"raise AudioException(f\"Asset status is not {FINISHED}\")\"]]}" }, { "Error": "AudioException", "Cause": "{\"errorMessage\": \"Asset status is not finished\", \"errorType\": \"AudioException\", \"stackTrace\": [[\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 57, \"sentry_handler\", \"reraise(*exc_info)\"], [\"/var/task/sentry_sdk/_compat.py\", 57, \"reraise\", \"raise value\"], [\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 48, \"sentry_handler\", \"return handler(event, context, *args, **kwargs)\"], [\"/var/task/index.py\", 30, \"handler\", \"get_asset_status(context.product.product_id, track.tuid)\"], [\"/var/task/index.py\", 53, \"get_asset_status\", \"raise AudioException(f\"Asset status is not {FINISHED}\")\"]]}" }, { "Error": "AudioException", "Cause": "{\"errorMessage\": \"Asset status is not finished\", \"errorType\": \"AudioException\", \"stackTrace\": [[\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 57, \"sentry_handler\", \"reraise(*exc_info)\"], [\"/var/task/sentry_sdk/_compat.py\", 57, \"reraise\", \"raise value\"], [\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 48, \"sentry_handler\", \"return handler(event, context, *args, **kwargs)\"], [\"/var/task/index.py\", 30, \"handler\", \"get_asset_status(context.product.product_id, track.tuid)\"], [\"/var/task/index.py\", 53, \"get_asset_status\", \"raise AudioException(f\"Asset status is not {FINISHED}\")\"]]}" }, { "Error": "AudioException", "Cause": "{\"errorMessage\": \"Asset status is not finished\", \"errorType\": \"AudioException\", \"stackTrace\": [[\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 57, \"sentry_handler\", \"reraise(*exc_info)\"], [\"/var/task/sentry_sdk/_compat.py\", 57, \"reraise\", \"raise value\"], [\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 48, \"sentry_handler\", \"return handler(event, context, *args, **kwargs)\"], [\"/var/task/index.py\", 30, \"handler\", \"get_asset_status(context.product.product_id, track.tuid)\"], [\"/var/task/index.py\", 53, \"get_asset_status\", \"raise AudioException(f\"Asset status is not {FINISHED}\")\"]]}" }, { "Error": "AudioException", "Cause": "{\"errorMessage\": \"Asset status is not finished\", \"errorType\": \"AudioException\", \"stackTrace\": [[\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 57, \"sentry_handler\", \"reraise(*exc_info)\"], [\"/var/task/sentry_sdk/_compat.py\", 57, \"reraise\", \"raise value\"], [\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 48, \"sentry_handler\", \"return handler(event, context, *args, **kwargs)\"], [\"/var/task/index.py\", 30, \"handler\", \"get_asset_status(context.product.product_id, track.tuid)\"], [\"/var/task/index.py\", 53, \"get_asset_status\", \"raise AudioException(f\"Asset status is not {FINISHED}\")\"]]}" }, { "Error": "ArtworkException", "Cause": "{\"errorMessage\": \"Artwork asset is not valid\", \"errorType\": \"ArtworkException\", \"stackTrace\": [[\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 57, \"sentry_handler\", \"reraise(*exc_info)\"], [\"/var/task/sentry_sdk/_compat.py\", 57, \"reraise\", \"raise value\"], [\"/var/task/sentry_sdk/integrations/aws_lambda.py\", 48, \"sentry_handler\", \"return handler(event, context, *args, **kwargs)\"], [\"/var/task/index.py\", 27, \"handler\", \"check_artwork_valid(str(context.product.product_id))\"], [\"/var/task/index.py\", 37, \"check_artwork_valid\", \"\"Artwork asset is not valid\"\"]]}" } ], 'orchard_label': 'TVT Records', 'party_id': 'PADPIDA2012041004F', 'message_thread_id': 'G0100007845431_TOC', 'product': { 'status': 'label_processing', 'vendor_id': 123, 'subaccount_id': 123, 'release_reference': 'R0', 'upc': '886447094297', 'is_main_release': True, 'product_id': None, 'artwork': { 'filename': 'artwork.tif', 'filepath': 'resources/', 'bucket': 'ddex-bucket', 'key': 'folder/subfolder/resources/artwork.tif', 'ows_assets_filename': None }, 'release_type': 'Album', 'sale_start_date': '2010-12-21', 'original_release_date': '2010-12-31', 'grid': 'A10301A0004280500R', 'catalog_number': 'G010004280500R', 'display_artist_name': 'Test Artist', 'product_name': 'Seksikäs-Suklaa & Dosdela', 'genres': [ { 'genre': 'ELECTRONICA-00', 'subgenre': 'Alternative' } ], }, 'bucket': 'qa-ddex-ingester', 'update_indicator': 'OriginalMessage', 'message_id': '200921574', 'error_correction': None, 'execution_name': None, 'maintenance_owner': 'Columbia/Epic Label Group' } @pytest.fixture def fixt(request): return request.param * 3 @pytest.fixture def context_known_error(request): return { "errors": { "Error": request.param, "Cause": "" }, "message_id": "204100644", "orchard_label": None, "update_indicator": "OriginalMessage", "deals": None, "error_correction": None, "message_thread_id": "G0100020345109_TOC", 'party_id': 'PADPIDA2012041004F', "bucket": "qa-ddex-ingester", "key": "sme_ddex/A10301A00020345109_20201214202635505/", "product": { "release_reference": "R0", "catalog_number": "G0100020345109", "display_artist_name": "Michael Jackson", "artwork": None, "sale_start_date": None, "product_id": None, "grid": "A10301A00020345109", "is_main_release": True, "original_values": None, "status": None, "product_name": "Michael Jackson's Vision", "vendor_id": None, "original_release_date": None, "subaccount_id": None, "release_type": "VideoAlbum", "upc": "884977807875", "not_for_distribution": "SwitchboardDummy", 'genres': [ { 'genre': 'ELECTRONICA-00', 'subgenre': 'Alternative' } ], }, "tracks": [], "maintenance_owner": None, "execution_name": "A10301A00020345109_20201214202635505-e5f2710d-44c5-495c-bdf4-4c530724c3dd" } @pytest.fixture def state_machine_track_errors(): return { "maintenance_owner": "SME UK Limited", "message_id": "204100967", "execution_name": "A10301A00035480592-2020-12-17-EC-01", "tracks": [ { "sequence_number": 1, "tuid": 33421938, "isrc": "GBHMU1600031", "asset": { "filename": "A10301A00035480592_T-110238693789_SoundRecording_001-001.flac", "filepath": "resources/", "key": "sme_ddex/A10301A00035480592-UB/resources/A10301A00035480592_T-110238693789_SoundRecording_001-001.flac", "bucket": "qa-ddex-ingester", "ows_assets_filename": None }, "release_type": "TrackRelease", "release_reference": "R1", "volume": 1, 'track_name': 'This track', 'resource_reference': 'A1', } ], "update_indicator": "OriginalMessage", "error_correction": None, "key": "sme_ddex/A10301A00035480592-UB/", "orchard_label": "Simco Limited, London", "product": { "subaccount_id": 60194, "upc": "886445897142", "vendor_id": 34588, "original_values": { "sale_start_date": "2016-06-03" }, "product_id": 3106144, "display_artist_name": "Digital Farm Animals & Cash Cash feat. Nelly", "grid": "A10301A00035480592", "is_main_release": True, "status": "label_processing", "product_name": "Millionaire", "not_for_distribution": "SwitchboardDummy", "artwork": { "filename": "A10301A00035480592_T-120378754488_Image.jpg", "filepath": "resources/", "key": "sme_ddex/A10301A00035480592-UB/resources/A10301A00035480592_T-120378754488_Image.jpg", "bucket": "qa-ddex-ingester", "ows_assets_filename": None }, "original_release_date": "2020-12-28", "release_type": "Single", "release_reference": "R0", "sale_start_date": "2020-12-28", "catalog_number": "G0100035480592", 'genres': [ { 'genre': 'ELECTRONICA-00', 'subgenre': 'Alternative' } ], }, "deals": None, "bucket": "qa-ddex-ingester", "message_thread_id": "G0100035480592_TOC", 'party_id': 'PADPIDA2012041004F', "errors": { "Error": "ProductValidationException", "ErrorMessage": [ [ 'ISRC: US23452354243: Field `meta_language_code` is required', # noqa 'ISRC: US23452354243: Field `recording_country_id` is required', # noqa 'ISRC: US23452354243: Field `original_rights_holder_country_id` is required', # noqa 'ISRC: US23452354243: There are featured artist(s) listed at the release level (Basics). They must also be listed on all tracks.', # noqa ] ] } } @pytest.fixture def fail_before_parsing_ddex_event(): return { 'version': '0', 'id': 'ae4893de-c07d-085b-5377-3af66ef08bee', 'detail-type': 'AWS API Call via CloudTrail', 'source': 'aws.s3', 'account': '437795906767', 'time': '2023-09-08T15:30:25Z', 'region': 'us-east-1', 'resources': [], 'detail': { 'eventVersion': '1.09', 'userIdentity': { 'type': 'AWSAccount', 'principalId': 'AROAJ34ZBY7U6CJG6O7WU:delivery-s3-v2-target-access-session', # noqa: E501 'accountId': '023180329437' }, 'eventTime': '2023-09-08T15:30:25Z', 'eventSource': 's3.amazonaws.com', 'eventName': 'PutObject', 'awsRegion': 'us-east-1', 'sourceIPAddress': '52.29.227.44', 'userAgent': '[aws-sdk-java/2.20.140 Linux/5.10.186-179.751.amzn2.x86_64 OpenJDK_64-Bit_Server_VM/20.0.2.1+10-FR Java/20.0.2.1 scala/2.13.11 vendor/Amazon.com_Inc. io/async http/s3crt cfg/retry-mode/legacy ft/s3-transfer CRTS3NativeClient/0.1.x]', # noqa: E501 'requestParameters': { 'bucketName': 'prod-ddex-ingester', 'Host': 'prod-ddex-ingester.s3.amazonaws.com', 'key': 'sme_ddex/A10301A0005112080F_20230908171225532/A10301A0005112080F.xml', # noqa: E501 'correlation_id': '7384114b-5484-4227-ab73-316d6788dd55', 'ddex_provider': 'SME' }, 'responseElements': { 'x-amz-server-side-encryption': 'AES256', 'x-amz-version-id': 'JZeh7.MqSg8WlXEIVSN5m3q2siKsAgVz' }, 'additionalEventData': { 'SignatureVersion': 'SigV4', 'CipherSuite': 'ECDHE-RSA-AES128-GCM-SHA256', 'bytesTransferredIn': 164891, 'SSEApplied': 'Default_SSE_S3', 'AuthenticationMethod': 'AuthHeader', 'x-amz-id-2': 'whd18VSmWP6/nviI/zWhTi1WVvSEia8Ra+r3UyNKN0DpR/QL5QrFQ/j7tyGYXu7f0AUA+09sgu8=', # noqa: E501 'bytesTransferredOut': 0 }, 'requestID': 'CP21DNSET3FFHZH2', 'eventID': 'be1a593d-459b-4ce3-8f2f-ff5b8de3e99e', # noqa: E501 'readOnly': False, 'resources': [ { 'type': 'AWS::S3::Object', 'ARN': 'arn:aws:s3:::prod-ddex-ingester/sme_ddex/A10301A0005112080F_20230908171225532/A10301A0005112080F.xml' # noqa: E501 }, { 'accountId': '437795906767', 'type': 'AWS::S3::Bucket', 'ARN': 'arn:aws:s3:::prod-ddex-ingester' } ], 'eventType': 'AwsApiCall', 'managementEvent': False, 'recipientAccountId': '437795906767', 'sharedEventID': '1ae1cca9-1945-4585-8c36-cb2b4cefd8ea', 'eventCategory': 'Data', 'tlsDetails': { 'tlsVersion': 'TLSv1.2', 'cipherSuite': 'ECDHE-RSA-AES128-GCM-SHA256', 'clientProvidedHostHeader': 'prod-ddex-ingester.s3.amazonaws.com' # noqa: E501 } }, 'errors': { 'Error': 'Exception', 'Cause': "{\"errorMessage\": \"Invalid language code MUL\", \"errorType\": \"Exception\", \"stackTrace\": [\" File \\\"/var/lang/lib/python3.8/site-packages/sentry_sdk/integrations/aws_lambda.py\\\", line 161, in sentry_handler\\n reraise(*exc_info)\\n\", \" File \\\"/var/lang/lib/python3.8/site-packages/sentry_sdk/_compat.py\\\", line 54, in reraise\\n raise value\\n\", \" File \\\"/var/lang/lib/python3.8/site-packages/sentry_sdk/integrations/aws_lambda.py\\\", line 152, in sentry_handler\\n return handler(aws_event, aws_context, *args, **kwargs)\\n\", \" File \\\"/var/task/index.py\\\", line 80, in handler\\n data = DDEXSchema().load(doc)\\n\", \" File \\\"/var/lang/lib/python3.8/site-packages/marshmallow/schema.py\\\", line 723, in load\\n return self._do_load(\\n\", \" File \\\"/var/lang/lib/python3.8/site-packages/marshmallow/schema.py\\\", line 845, in _do_load\\n processed_data = self._invoke_load_processors(\\n\", \" File \\\"/var/lang/lib/python3.8/site-packages/marshmallow/schema.py\\\", line 1091, in _invoke_load_processors\\n data = self._invoke_processors(\\n\", \" File \\\"/var/lang/lib/python3.8/site-packages/marshmallow/schema.py\\\", line 1223, in _invoke_processors\\n data = processor(data, many=many, **kwargs)\\n\", \" File \\\"/var/lang/lib/python3.8/site-packages/ddex_ingester_common/schemas/ddex_schema.py\\\", line 897, in preprocess\\n metadata_language = process_language_code(\\n\", \" File \\\"/var/lang/lib/python3.8/site-packages/ddex_ingester_common/helpers/metadata.py\\\", line 117, in process_language_code\\n raise Exception(f'Invalid language code {code}')\\n\"]}" # noqa: E501 } } @pytest.fixture def ddex_xml(): """XML file fixture.""" return """ G010004580662G_TOC 222894344 PADPIDA2007040502I Sony Music Entertainment PADPIDA2012041004F Orchard, The 2021-07-12T06:52:17.931+02:00 LiveMessage A10301A00035480592 195497918690 G0100035480592 A10328E0007854993I QM4TW2122476 """ @pytest.fixture def chinese_language_errors(): return { "Error": "ProductValidationException", "ErrorMessage": [ 'ISRC: US3452345325: Simplified and Traditional variations are required when delivering Chinese content. One can be entered as the meta language while adding the other as a localization or both can be entered as localizations.', # noqa ] }