ferrero-opentext/Python-Version/scripts/shared
DJP 32ad6b0370 Add detailed upload logging and job polling for actual asset ID
Enhanced upload process with better logging and true asset ID retrieval.

UPLOAD LOGGING IMPROVEMENTS:
- Now logs asset representation being sent:
  - Model ID
  - Security policy count
  - Metadata field count
- Helps debug upload issues

ASSET ID vs JOB ID FIX:
Previously: When DAM returned job_handle, we stored job_id as asset_id
Now: Poll the job to get the ACTUAL asset ID

NEW METHOD: _poll_job_for_asset_id()
- Polls /v6/jobs/{job_id} endpoint (max 10 attempts, 2 sec delay)
- Checks multiple response locations for asset_id
- Logs job status progress
- Returns actual asset ID when job completes
- Falls back to job_id if asset ID not found

RESPONSE HANDLING:
1. If 'asset_resource_list' in response:
   - Direct asset ID (synchronous upload)
   - Log: "Upload successful: file.jpg → Asset ID: abc123"

2. If 'job_handle' in response:
   - Async job (needs polling)
   - Log: "Upload accepted (async): file.jpg → Job ID: job123"
   - Log: "Polling job for actual asset ID..."
   - Poll job status every 2 seconds
   - Log: "Job status (attempt X): running/completed"
   - Log: "✓ Job completed → Asset ID: abc123"

BENEFITS:
✓ True asset ID stored in database (not job ID)
✓ Better upload debugging with detailed logs
✓ Can track job progress
✓ Handles both sync and async uploads correctly

LOGGING EXAMPLE:
```
Uploading: my_file.jpg
  Parent Folder ID: abc123
  Asset Representation:
    Model ID: ferrero.model.video
    Security Policies: 2
    Metadata Fields: 27
Upload accepted (async): my_file.jpg → Job ID: job456
Polling job for actual asset ID...
  Job status (attempt 1): running
  Job status (attempt 2): completed
✓ Job completed → Asset ID: asset789
```

Changes:
- scripts/shared/dam_client.py
  - Added upload logging before API call
  - Added _poll_job_for_asset_id() method
  - Updated upload_asset() to poll jobs for asset ID
  - Returns both asset_id and job_id in result

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-05 12:38:45 -05:00
..
__pycache__ Update comprehensive README and reorganize documentation files 2025-11-05 10:57:11 -05:00
__init__.py Start Python automation - Foundation components 2025-10-30 16:38:26 -04:00
box_client.py Add recursive folder search, NOT APPROVED filtering, and rejection details for A5→A6 2025-11-04 14:49:19 -05:00
config_loader.py Start Python automation - Foundation components 2025-10-30 16:38:26 -04:00
dam_client.py Add detailed upload logging and job polling for actual asset ID 2025-11-05 12:38:45 -05:00
database.py Add A5→A6 rework workflow automation (Python) 2025-11-04 13:36:35 -05:00
filename_parser.py Complete Python automation implementation - All components built 2025-10-30 16:49:14 -04:00
metadata_extractor_mvp.py Add Box metadata extraction for CreativeX fields in A2→A3 workflow 2025-11-03 14:26:00 -05:00
notifier.py Add daily summary report with comprehensive statistics 2025-11-04 16:34:44 -05:00