1
- #TODO: edge case where segment rules have "existing segments", need to check if dependent segment exists beforehand
2
-
3
1
import os
4
2
import requests
5
3
@@ -55,7 +53,7 @@ def build_seg_lists():
55
53
from_data_dict [from_segs_list [i ]["name" ]] = [from_segs_list [i ]["id" ], from_segs_list [i ]["description" ], from_segs_list [i ]["rule" ], from_segs_list [i ]["kind" ]]
56
54
from_name_set .add (from_segs_list [i ]["name" ])
57
55
for j in range (len (to_segs_list )):
58
- to_data_dict [to_segs_list [j ]["name" ]]
56
+ # to_data_dict[to_segs_list[j]["name"]]
59
57
to_name_set .add (to_segs_list [j ]["name" ])
60
58
61
59
# Post new segment via Audience API
@@ -74,23 +72,48 @@ def detect_existing(sn, ns2):
74
72
seg_exists = True
75
73
return seg_exists
76
74
75
+ # Segments that have existing segment reference
76
+ def detect_seg_ref (sn , rule ):
77
+ seg_ref = False
78
+ for c in rule .get ("conditions" , []):
79
+ if "conditions" in c :
80
+ for sc in c ["conditions" ]:
81
+ if str (sc ).find ("'type': 'Reference'" ) > 0 :
82
+ seg_ref = True
83
+ return seg_ref
84
+
85
+ # Extract existing segments from segment rule
86
+ def extract_existing_segments (rule ):
87
+ ref_list = []
88
+ for condition_group in rule ["conditions" ]:
89
+ for condition in condition_group .get ("conditions" , []):
90
+ if condition .get ("type" ) == "Reference" and "id" in condition :
91
+ ref_list .append (condition ["id" ])
92
+ return ref_list
93
+
77
94
# Compare segment lists and create diff
78
95
def replicate_diff ():
79
96
for sn in from_name_set :
80
- if not detect_existing (sn , to_name_set ):
97
+ rule = from_data_dict [sn ][2 ]
98
+ kind = from_data_dict [sn ][3 ]
99
+ desc = from_data_dict [sn ][1 ]
100
+ if not detect_existing (sn , to_name_set ) and not detect_seg_ref (sn , rule ):
81
101
payload = {
82
102
'audienceId' : to_audience ,
83
103
'name' : sn ,
84
- 'kind' : from_data_dict [ sn ][ 3 ] ,
85
- 'description' : from_data_dict [ sn ][ 1 ] ,
104
+ 'kind' : kind ,
105
+ 'description' : desc ,
86
106
'segmentFolderId' : to_folder ,
87
- 'rule' : from_data_dict [ sn ][ 2 ]
107
+ 'rule' : rule
88
108
}
89
109
headers = {
90
110
"Authorization" : f"TD1 { td_api_key } " ,
91
111
"Content-Type" : "application/json"
92
112
}
93
113
post_seg (sn , headers , payload )
114
+ elif detect_seg_ref (sn , rule ):
115
+ ref_seg_ids = extract_existing_segments (rule )
116
+ print (f"Skipping '{ sn } '. Found referenced segment ids: '{ ref_seg_ids } '." )
94
117
95
118
from_segs_list , to_segs_list = get_segs ()
96
119
build_seg_lists ()
0 commit comments