from datetime import datetime, timezone import json from time import time from faker import Faker fake = Faker() Faker.seed(int(time())) date_format = '%Y/%m/%d %Z' year_start_date = datetime.strptime('2040/01/01 UTC', date_format) year_mid_date = datetime.strptime('2040/06/01 UTC', date_format) year_end_date = datetime.strptime('2040/12/31 UTC', date_format) image_location = 'https://oa.qaorch.com/images/noArtwork.png' formats = ['Full Length', 'Preview'] configurations = ['Digital', 'Physical', 'Video'] label_ids = [fake.random_int(min=100, max=50000) for _ in range(200)] subaccount_ids = [fake.random_int(min=100, max=50000) for _ in range(200)] language_names = dict(fake.currency() for _ in range(10)) language_codes = language_names.keys() statuses = ['New', 'Resubmission', 'Update'] notice_levels = ['error', 'warning'] notice_codes = [ 'ARTWORK', 'C_LINE_REQUIRED', 'FORMAT_REQUIRED', 'GENRE_ID_REQUIRED', 'IMPRINT_REQUIRED', 'META_LANGUAGE_REQUIRED', 'PREORDER_DATE_REQUIRED', 'PRIMARY_ARTIST_REQUIRED', 'PRODUCT_CODE_BLANK', 'PRODUCT_CODE_PATTERN', 'PRODUCT_CODE_REQUIRED', 'PRODUCT_CODE_TYPE', 'PRODUCT_NAME_REQUIRED', 'RELEASE_DATE_REQUIRED', 'SALE_START_DATE_REQUIRED', 'SUBGENRE_ID_REQUIRED', 'COMBINED_WORK_MOVEMENT_MAX_LENGTH_EXCEEDED', 'EMPTY_ARTIST_NAME', 'EXCESSIVE_ISRC_REUSE', 'GENRE_ARTIST_MISMATCH', 'INVALID_ISRC', 'INVALID_LANGUAGE', 'INVALID_PERFORMER_TYPE', 'INVALID_PREVIEW_START_TIME', 'INVALID_P_INFO', 'LOCALIZED_ARTISTS_MISMATCH', 'MISSING_ASSET_STATUS', 'MISSING_AUDIO_FILE', 'MISSING_BIRTH_NAME', 'MISSING_BOTH_CHINESE_LANGUAGES', 'MISSING_CHINESE_LOCALIZATION', 'MISSING_COMPOSER', 'MISSING_EXPLICIT', 'MISSING_FEATURED_ARTIST', 'MISSING_ISRC', 'MISSING_LANGUAGE', 'MISSING_META_LANGUAGE_CODE', 'MISSING_ORIGINAL_RIGHTS_HOLDER_COUNTRY_ID', 'MISSING_OWNERSHIP_RIGHTS', 'MISSING_PERFORMER', 'MISSING_PRIMARY_PERFORMER', 'MISSING_PUBLISHER_NAMES', 'MISSING_P_INFO', 'MISSING_RECORDING_COUNTRY_ID', 'MISSING_THIRD_PARTY_PUBLISHER', 'MISSING_TRACK_NAME', 'MISSING_US_PUBLISHING_OBLIGATION', 'MISSING_WORK', 'MISSING_WRITERS', 'MOVEMENT_MAX_LENGTH_EXCEEDED', 'TOO_MANY_LOCALIZATIONS', 'TRACK_NAME_CANNOT_BE_LOCALIZED', 'TRACK_NAME_VERSION_ALREADY_IN_USE', 'WORK_MAX_LENGTH_EXCEEDED' ] notice_samples = [{ 'level': fake.random_element(elements=notice_levels), 'code': fake.random_element(elements=notice_codes), 'reason': fake.bs() } for _ in range(8)] def format_fake_product(product_id): """Format fake product data.""" notices = [] if fake.random_int(min=1, max=100) > 70: notices = fake.random_elements(elements=notice_samples) label_id = fake.random_element(elements=label_ids) label_name = fake.company() subaccount_id = 0 subaccount_name = '' if fake.random_int(min=1, max=100) > 50: subaccount_id = fake.random_element(elements=subaccount_ids) subaccount_name = fake.company() account_id = f'{label_id}:{subaccount_id}' account_name = subaccount_name if subaccount_name else label_name language_code = fake.random_element(elements=language_codes) language_name = language_names.get(language_code) sale_start_date = fake.date_time_between_dates(year_mid_date, year_end_date).isoformat() preorder_date = None if fake.random_int(min=1, max=100) > 65: preorder_date = fake.date_time_between_dates(year_start_date, year_mid_date).isoformat() product = { 'added_at': datetime.now(timezone.utc).isoformat(), 'account_id': account_id, 'account_name': account_name, 'configuration': fake.random_element(elements=configurations), 'featuring_artist': fake.name(), 'format': fake.random_element(elements=formats), 'image_location': image_location, 'imprint': fake.company(), 'label_id': label_id, 'label_name': label_name, 'metadata_language_code': language_code, 'metadata_language_name': language_name, 'notices': notices, 'preorder_date': preorder_date, 'primary_artist': fake.name(), 'product_id': product_id, 'product_name': fake.text(max_nb_chars=30), 'product_status': fake.random_element(elements=statuses), 'review_queue_id': product_id, 'sale_start_date': sale_start_date, 'special instructions': fake.bs(), 'subaccount_id': subaccount_id, 'subaccount_name': subaccount_name, 'upc': fake.ean13(), } index_key = { 'index' : { '_index' : 'review-queue', '_type' : '_doc', '_id' : str(product_id) } } print(json.dumps(index_key)) print(json.dumps(product)) if __name__ == '__main__': for i in range(10101, 20100): format_fake_product(i)