diff --git a/Python-Version/scripts/a1_to_a2_download.py b/Python-Version/scripts/a1_to_a2_download.py index ee33da8..9be5bf1 100755 --- a/Python-Version/scripts/a1_to_a2_download.py +++ b/Python-Version/scripts/a1_to_a2_download.py @@ -111,10 +111,10 @@ def process_campaign(campaign, dam, box, db, notifier, config): tracking_id=tracking_id ) - # 4. Extract Global Campaign Reference from asset metadata + # 4. Extract Global Campaign Reference and Local Campaign ID from asset metadata global_ref = db.extract_global_campaign_reference(asset) - # 5. Store in database with FULL metadata and global campaign reference + # 5. Store in database with FULL metadata and campaign references db_result = db.store_master_asset( tracking_id=tracking_id, opentext_id=asset_id, @@ -123,7 +123,8 @@ def process_campaign(campaign, dam, box, db, notifier, config): box_url=box_result['url'], upload_folder_id=final_folder_id, global_master_campaign_id=global_ref['global_master_campaign_id'], - global_master_folder_id=global_ref['global_master_folder_id'] + global_master_folder_id=global_ref['global_master_folder_id'], + local_campaign_id=global_ref['local_campaign_id'] ) if db_result['success']: diff --git a/Python-Version/scripts/shared/database.py b/Python-Version/scripts/shared/database.py index b951ad8..f1a96df 100644 --- a/Python-Version/scripts/shared/database.py +++ b/Python-Version/scripts/shared/database.py @@ -76,7 +76,7 @@ class Database: cursor.close() self.put_connection(conn) - def store_master_asset(self, tracking_id, opentext_id, asset_data, box_file_id, box_url, upload_folder_id, global_master_campaign_id=None, global_master_folder_id=None): + def store_master_asset(self, tracking_id, opentext_id, asset_data, box_file_id, box_url, upload_folder_id, global_master_campaign_id=None, global_master_folder_id=None, local_campaign_id=None): """ Store master asset with FULL metadata in JSONB column @@ -89,6 +89,7 @@ class Database: upload_folder_id: Final Assets folder ID for upload global_master_campaign_id: Global master campaign ID (from GLOBAL CAMPAIGN REFERENCE) global_master_folder_id: Global master folder ID + local_campaign_id: Local campaign ID (immediate campaign this asset belongs to) Returns: dict with success boolean @@ -117,9 +118,9 @@ class Database: tracking_id, opentext_id, original_filename, file_extension, file_size_bytes, mime_type, upload_directory, description, full_metadata, status, - global_master_campaign_id, global_master_folder_id + global_master_campaign_id, global_master_folder_id, local_campaign_id ) VALUES ( - %s, %s, %s, %s, %s, %s, %s, %s, %s, 'active', %s, %s + %s, %s, %s, %s, %s, %s, %s, %s, %s, 'active', %s, %s, %s ) ON CONFLICT (tracking_id) DO UPDATE SET upload_directory = EXCLUDED.upload_directory, @@ -127,6 +128,7 @@ class Database: full_metadata = EXCLUDED.full_metadata, global_master_campaign_id = EXCLUDED.global_master_campaign_id, global_master_folder_id = EXCLUDED.global_master_folder_id, + local_campaign_id = EXCLUDED.local_campaign_id, updated_at = CURRENT_TIMESTAMP """, ( tracking_id, @@ -139,7 +141,8 @@ class Database: description, full_metadata_json, global_master_campaign_id, - global_master_folder_id + global_master_folder_id, + local_campaign_id )) conn.commit() @@ -319,16 +322,17 @@ class Database: def extract_global_campaign_reference(self, asset_data): """ - Extract Global Campaign Reference from asset metadata + Extract Global Campaign Reference and Local Campaign ID from asset metadata Args: asset_data: Complete DAM asset JSON Returns: - dict with global_master_campaign_id and global_master_folder_id + dict with global_master_campaign_id, global_master_folder_id, local_campaign_id """ global_master_campaign_id = None global_master_folder_id = None + local_campaign_id = None # Look in inherited_metadata_collections collections = asset_data.get('inherited_metadata_collections', []) @@ -338,20 +342,32 @@ class Database: if collection.get('container_type_name') == 'L7+ - CAMPAIGN': inherited_metadata = collection.get('inherited_metadata_values', []) + campaign_id_in_collection = None + has_global_reference = False + for inherited in inherited_metadata: metadata_element = inherited.get('metadata_element', {}) + # Extract Campaign ID + if metadata_element.get('id') == 'FERRERO.FIELD.CAMPAIGN ID': + campaign_id_value = metadata_element.get('value', {}).get('value', {}).get('value') + if campaign_id_value: + campaign_id_in_collection = campaign_id_value + # Look for GLOBAL CAMPAIGN REFERENCE field if metadata_element.get('id') == 'FERRERO.FIELD.GLOBAL CAMPAIGN REFERENCE': value = metadata_element.get('value', {}).get('value', {}).get('value') if value: global_master_campaign_id = value + has_global_reference = True logger.info("Found Global Campaign Reference: {}".format(value)) - # If this collection has a global reference, it might also have the folder ID - # The container itself might be the global master folder - if global_master_campaign_id: - # Get the container ID if available + # If this campaign has a global reference, it's the local campaign + if has_global_reference and campaign_id_in_collection: + local_campaign_id = campaign_id_in_collection + logger.info("Local Campaign ID: {}".format(local_campaign_id)) + + # Get the container ID (global master folder) container_id = collection.get('container_id') if container_id: global_master_folder_id = container_id @@ -359,7 +375,8 @@ class Database: return { 'global_master_campaign_id': global_master_campaign_id, - 'global_master_folder_id': global_master_folder_id + 'global_master_folder_id': global_master_folder_id, + 'local_campaign_id': local_campaign_id } def close(self):