flowchart TD
subgraph Entrypoints["Entrypoints that can schedule creative fetch work"]
UrlSync["URL: POST /:account_id/sync-assets/"]
UrlResync["URL: POST /:account_id/re-sync-assets/"]
UrlFailed["URL: POST /:account_id/sync-failed-assets/"]
BeatAssets["Celery beat: account_creatives_daily_sync"]
BeatFailed["Celery beat: failed_creatives_daily_sync"]
PipelineRetry["sync_account_metrics_task retry path"]
ExternalSync["external integration sync tasks"]
end
subgraph Scheduling["Scheduling layer"]
SyncView["SyncAssetsView.post()"]
ResyncView["ReSyncAssetsView.post()"]
FailedView["SyncFailedAssetsView.post()"]
SyncAssets["sync_assets()"]
AccountDaily["account_creatives_daily_sync()"]
GetNew["get_new_assets_task()"]
ResyncExisting["re_sync_existing_assets()"]
SyncFailed["sync_failed_assets()"]
FailedDaily["failed_creatives_daily_sync()"]
FetchTask["fetch_ad_creative_data_task()"]
end
subgraph Runtime["Runtime path inside fetch_ad_creative_data_task"]
DataManager["PerformanceDataManager.get_ad_creative_data()"]
FbCreative["get_ad_creatives_from_fb()"]
FbClient["get_facebook_client() returns FacebookAdsApiWithLogging"]
AdFetch["Ad(...).api_get() and get_insights()"]
CreativeFetch["AdCreative(...).api_get()"]
ImageFetch["AdAccount(...).get_ad_images()"]
VideoFetch["AdVideo(video_id).api_get()"]
PermissionCheck{"video fetch permission denied and actor_id present?"}
PageToken["Page(actor_id).api_get(fields=['access_token'])"]
ApiWrapper["FacebookAdsApiWithLogging.call()"]
ErrorLog["line 351 logs Failed to execute facebook ad request, then raises PlatformUnknownError"]
PageTokenCatch["page-token fallback catches it and logs warning"]
PostFallback["fallback: build facebook.com post URL and try CDN extraction"]
end
UrlSync --> SyncView --> SyncAssets
PipelineRetry --> SyncAssets
BeatAssets --> AccountDaily --> GetNew
ExternalSync --> GetNew
SyncAssets --> GetNew
UrlResync --> ResyncView --> ResyncExisting
UrlFailed --> FailedView --> SyncFailed
PipelineRetry --> SyncFailed
BeatFailed --> FailedDaily
GetNew --> FetchTask
ResyncExisting --> FetchTask
SyncFailed --> FetchTask
FailedDaily --> FetchTask
FetchTask --> DataManager --> FbCreative
FbCreative --> FbClient
FbCreative --> AdFetch --> CreativeFetch
FbCreative --> ImageFetch
CreativeFetch --> VideoFetch
VideoFetch --> PermissionCheck
PermissionCheck -- yes --> PageToken --> ApiWrapper --> ErrorLog --> PageTokenCatch --> PostFallback
PermissionCheck -- no --> PostFallback
classDef failure fill:#ffe5e5,stroke:#c33,stroke-width:2px,color:#111;
classDef task fill:#e8f1ff,stroke:#3b73d9,stroke-width:1px,color:#111;
classDef entry fill:#f4f4f4,stroke:#777,stroke-width:1px,color:#111;
class PageToken,ApiWrapper,ErrorLog failure;
class FetchTask,GetNew,SyncFailed,FailedDaily,ResyncExisting task;
class UrlSync,UrlResync,UrlFailed,BeatAssets,BeatFailed,PipelineRetry,ExternalSync entry;
click UrlSync "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/urls.py&line=29&column=1" "creative_module/urls.py:29"
click UrlResync "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/urls.py&line=31&column=1" "creative_module/urls.py:31"
click UrlFailed "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/urls.py&line=32&column=1" "creative_module/urls.py:32"
click BeatAssets "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/crux_ferrous_insights_app/celery.py&line=188&column=1" "crux_ferrous_insights_app/celery.py:188"
click BeatFailed "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/crux_ferrous_insights_app/celery.py&line=198&column=1" "crux_ferrous_insights_app/celery.py:198"
click PipelineRetry "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_pipeline_module/tasks/pipeline.py&line=124&column=1" "data_pipeline_module/tasks/pipeline.py:124"
click ExternalSync "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/external_integrations/tasks/periodic_sync.py&line=367&column=1" "external_integrations/tasks/periodic_sync.py:367"
click SyncView "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/views.py&line=2765&column=1" "creative_module/views.py:2765"
click ResyncView "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/views.py&line=3115&column=1" "creative_module/views.py:3115"
click FailedView "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/views.py&line=3134&column=1" "creative_module/views.py:3134"
click SyncAssets "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/tasks/ad_creative_task.py&line=1614&column=1" "creative_module/tasks/ad_creative_task.py:1614"
click AccountDaily "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/tasks/ad_creative_task.py&line=2806&column=1" "creative_module/tasks/ad_creative_task.py:2806"
click GetNew "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/tasks/ad_creative_task.py&line=1123&column=1" "creative_module/tasks/ad_creative_task.py:1123"
click ResyncExisting "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/tasks/ad_creative_task.py&line=1573&column=1" "creative_module/tasks/ad_creative_task.py:1573"
click SyncFailed "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/tasks/ad_creative_task.py&line=2368&column=1" "creative_module/tasks/ad_creative_task.py:2368"
click FailedDaily "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/tasks/ad_creative_task.py&line=2922&column=1" "creative_module/tasks/ad_creative_task.py:2922"
click FetchTask "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/creative_module/tasks/ad_creative_task.py&line=143&column=1" "creative_module/tasks/ad_creative_task.py:143"
click DataManager "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_module/services/platform_service.py&line=594&column=1" "data_module/services/platform_service.py:594"
click FbCreative "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_module/services/fb_services.py&line=667&column=1" "data_module/services/fb_services.py:667"
click FbClient "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_module/services/fb_services.py&line=400&column=1" "data_module/services/fb_services.py:400"
click AdFetch "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_module/services/fb_services.py&line=688&column=1" "data_module/services/fb_services.py:688"
click CreativeFetch "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_module/services/fb_services.py&line=698&column=1" "data_module/services/fb_services.py:698"
click ImageFetch "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_module/services/fb_services.py&line=883&column=1" "data_module/services/fb_services.py:883"
click VideoFetch "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_module/services/fb_services.py&line=910&column=1" "data_module/services/fb_services.py:910"
click PageToken "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_module/services/fb_services.py&line=919&column=1" "data_module/services/fb_services.py:919"
click ApiWrapper "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_module/services/fb_services.py&line=298&column=1" "data_module/services/fb_services.py:298"
click ErrorLog "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_module/services/fb_services.py&line=351&column=1" "data_module/services/fb_services.py:351"
click PageTokenCatch "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_module/services/fb_services.py&line=925&column=1" "data_module/services/fb_services.py:925"
click PostFallback "zed-open://open?path=/Users/pranavanurag/Documents/code/crus_ferrous_insights_app/data_module/services/fb_services.py&line=930&column=1" "data_module/services/fb_services.py:930"