You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 200b2b5
Browse filesBrowse the repository at this point in the historyBrowse files
Fix create_ad_creative to use object_story_spec for simple creatives
Fixes#25
Simple creatives with singular headline/description now correctly use
object_story_spec with link_data instead of incorrectly using asset_feed_spec
with headlines array which was rejected by Meta API.
- Changed create_ad_creative to distinguish between simple and dynamic creatives
- Singular headline/description now use object_story_spec->link_data structure
- Plural headlines/descriptions still use asset_feed_spec (dynamic creatives)
- Updated tests to verify correct behavior
- Added E2E test (manual run only)
returnjson.dumps({"error": "Cannot specify both 'description' and 'descriptions'. Use 'description' for single description or 'descriptions' for multiple."}, indent=2)
833
833
834
-
# Convert simple parameters to complex format for internal processing
835
-
final_headlines=None
836
-
final_descriptions=None
837
-
838
-
ifheadline:
839
-
final_headlines= [headline]
840
-
elifheadlines:
841
-
final_headlines=headlines
842
-
843
-
ifdescription:
844
-
final_descriptions= [description]
845
-
elifdescriptions:
846
-
final_descriptions=descriptions
847
-
848
-
# Validate dynamic creative parameters
849
-
iffinal_headlines:
850
-
iflen(final_headlines) >5:
834
+
# Validate dynamic creative parameters (plural forms only)
835
+
ifheadlines:
836
+
iflen(headlines) >5:
851
837
returnjson.dumps({"error": "Maximum 5 headlines allowed for dynamic creatives"}, indent=2)
852
-
fori, hinenumerate(final_headlines):
838
+
fori, hinenumerate(headlines):
853
839
iflen(h) >40:
854
840
returnjson.dumps({"error": f"Headline {i+1} exceeds 40 character limit"}, indent=2)
855
841
856
-
iffinal_descriptions:
857
-
iflen(final_descriptions) >5:
842
+
ifdescriptions:
843
+
iflen(descriptions) >5:
858
844
returnjson.dumps({"error": "Maximum 5 descriptions allowed for dynamic creatives"}, indent=2)
859
-
fori, dinenumerate(final_descriptions):
845
+
fori, dinenumerate(descriptions):
860
846
iflen(d) >125:
861
847
returnjson.dumps({"error": f"Description {i+1} exceeds 125 character limit"}, indent=2)
returnjson.dumps({"error": "Cannot specify both 'description' and 'descriptions'. Use 'description' for single description or 'descriptions' for multiple."}, indent=2)
1000
995
1001
-
# Convert simple parameters to complex format for internal processing
1002
-
final_headlines=None
1003
-
final_descriptions=None
1004
-
1005
-
ifheadline:
1006
-
final_headlines= [headline]
1007
-
elifheadlines:
1008
-
final_headlines=headlines
1009
-
1010
-
ifdescription:
1011
-
final_descriptions= [description]
1012
-
elifdescriptions:
1013
-
final_descriptions=descriptions
1014
-
1015
-
# Validate dynamic creative parameters
1016
-
iffinal_headlines:
1017
-
iflen(final_headlines) >5:
996
+
# Validate dynamic creative parameters (plural forms only)
997
+
ifheadlines:
998
+
iflen(headlines) >5:
1018
999
returnjson.dumps({"error": "Maximum 5 headlines allowed for dynamic creatives"}, indent=2)
1019
-
fori, hinenumerate(final_headlines):
1000
+
fori, hinenumerate(headlines):
1020
1001
iflen(h) >40:
1021
1002
returnjson.dumps({"error": f"Headline {i+1} exceeds 40 character limit"}, indent=2)
1022
1003
1023
-
iffinal_descriptions:
1024
-
iflen(final_descriptions) >5:
1004
+
ifdescriptions:
1005
+
iflen(descriptions) >5:
1025
1006
returnjson.dumps({"error": "Maximum 5 descriptions allowed for dynamic creatives"}, indent=2)
1026
-
fori, dinenumerate(final_descriptions):
1007
+
fori, dinenumerate(descriptions):
1027
1008
iflen(d) >125:
1028
1009
returnjson.dumps({"error": f"Description {i+1} exceeds 125 character limit"}, indent=2)
0 commit comments