taobin_project/inter/sgp/xml/event/dummy_layout_promotion.py

575 lines
No EOL
23 KiB
Python

from pathlib import Path
import json
print("params=" + param)
print( "dir= " + directory_to_process + "/page_catalog_group_recommend.lxml");
file_xml = open(directory_to_process + "/page_catalog_group_recommend.lxml", 'r')
file_content_main = file_xml.read()
#print(file_xml.read())
# ; include-file=dummy_layout.inc
file_inc = open(directory_to_process + "/dummy_layout.inc", 'r')
file_inc_content = file_inc.read()
file_xml.close()
if "template1" in param:
file_inc2 = open(directory_to_process + "/event/promotion_template1.inc", 'r')
file_inc2_content = file_inc2.read()
file_inc_img = open(directory_to_process + "/../image/event/image_template1", 'r')
file_inc2_img_content = file_inc_img.read()
# replace key.
sp_key = file_inc2_img_content.split("\n")
print("sp_key = " + str(len( sp_key)))
for sp_line in sp_key:
sp_line = sp_line.strip()
key_val = sp_line.split("=")
if len( key_val) == 2:
print("k = " + key_val[0] + " val=" + key_val[1])
file_inc2_content = file_inc2_content.replace( "###" + key_val[0], '"' + key_val[1].strip() + '"')
file_inc_event_click = open(directory_to_process + "/event/promotion_onclick1.inc", 'r')
file_inc_event_click_content = file_inc_event_click.read()
file_inc2_content = file_inc2_content.replace("###EventOnClick", file_inc_event_click_content)
print(file_inc2_content)
#print( file_inc_content)
content_data_was_repack = file_content_main.replace(";dummy_layout.inc", file_inc_content)
content_data = content_data_was_repack.replace(";BigLogoLayout", file_inc2_content)
begin_text = content_data.index(";TAGESP")
end_text = content_data.index(";TAGESP", begin_text + 7)
print("TAGESP sub text = " + str(begin_text) + " end = " + str(end_text))
tmp1 = content_data[: begin_text - 7]
tmp2 = content_data[ end_text:-1]
#print("tmp1=" + tmp1)
#print("tmp2=" + tmp2)
content_data = tmp1 + tmp2
file_xml3_out = open(directory_to_process + "/event/out_put_file1.txt", 'r')
file_xml3_out_content = file_xml3_out.read()
file_xml3_out_content = file_xml3_out_content.strip()
file_xml3_out_content = file_xml3_out_content.replace("\r", "")
file_xml3_out_content = file_xml3_out_content.replace("\n", "")
file_xml3 = open(directory_to_process + file_xml3_out_content, 'w')
file_xml3.write( content_data)
file_xml3.close()
if "template2" in param:
file_inc2 = open(directory_to_process + "/event/promotion_template2.inc", 'r')
file_inc2_content = file_inc2.read()
file_inc_img = open(directory_to_process + "/../image/event/image_template2", 'r')
file_inc2_img_content = file_inc_img.read()
# replace key.
sp_key = file_inc2_img_content.split("\n")
print("sp_key = " + str(len( sp_key)))
for sp_line in sp_key:
sp_line = sp_line.strip()
key_val = sp_line.split("=")
if len( key_val) == 2:
print("k = " + key_val[0] + " val=" + key_val[1])
file_inc2_content = file_inc2_content.replace( "###" + key_val[0], '"' + key_val[1].strip() + '"')
file_inc_event_click = open(directory_to_process + "/event/promotion_onclick2.inc", 'r')
file_inc_event_click_content = file_inc_event_click.read()
file_inc2_content = file_inc2_content.replace("###EventOnClick", file_inc_event_click_content)
print(file_inc2_content)
#print( file_inc_content)
content_data_was_repack = file_content_main.replace(";dummy_layout.inc", file_inc_content)
content_data = content_data_was_repack.replace(";BigLogoLayout", file_inc2_content)
begin_text = content_data.index(";TAGESP")
end_text = content_data.index(";TAGESP", begin_text + 7)
#print("sub text = " + str(begin_text) + " end = " + str(end_text))
tmp1 = content_data[: begin_text - 7]
tmp2 = content_data[ end_text:-1]
#print("tmp1=" + tmp1)
#print("tmp2=" + tmp2)
content_data = tmp1 + tmp2
file_xml3_out = open(directory_to_process + "/event/out_put_file2.txt", 'r')
file_xml3_out_content = file_xml3_out.read()
file_xml3_out_content = file_xml3_out_content.strip()
file_xml3_out_content = file_xml3_out_content.replace("\r", "")
file_xml3_out_content = file_xml3_out_content.replace("\n", "")
file_xml3 = open(directory_to_process + file_xml3_out_content, 'w')
file_xml3.write( content_data)
file_xml3.close()
if "template3" in param:
file_inc3 = open(directory_to_process + "/event/promotion_template3.inc", 'r')
file_inc3_content = file_inc3.read()
file_inc_img = open(directory_to_process + "/../image/event/image_template3", 'r')
file_inc3_img_content = file_inc_img.read()
# replace key.
sp_key = file_inc3_img_content.split("\n")
print("sp_key = " + str(len( sp_key)))
for sp_line in sp_key:
sp_line = sp_line.strip()
key_val = sp_line.split("=")
print("Kenta420:", key_val)
if len( key_val) == 2:
print("k = " + key_val[0] + " val=" + key_val[1])
file_inc3_content = file_inc3_content.replace( "###" + key_val[0], '"' + key_val[1].strip() + '"')
file_inc_event_click = open(directory_to_process + "/event/promotion_onclick3.inc", 'r')
file_inc_event_click_content = file_inc_event_click.read()
file_inc3_content = file_inc3_content.replace("###EventOnClick", file_inc_event_click_content)
print(file_inc3_content)
#print( file_inc_content)
content_data_was_repack = file_content_main.replace(";dummy_layout.inc", file_inc_content)
content_data = content_data_was_repack.replace(";BigLogoLayout", file_inc3_content)
begin_text = content_data.index(";TAGESP")
end_text = content_data.index(";TAGESP", begin_text + 7)
#print("sub text = " + str(begin_text) + " end = " + str(end_text))
tmp1 = content_data[: begin_text - 7]
tmp3 = content_data[ end_text:-1]
#print("tmp1=" + tmp1)
#print("tmp3=" + tmp3)
content_data = tmp1 + tmp3
file_xml3_out = open(directory_to_process + "/event/out_put_file3.txt", 'r')
file_xml3_out_content = file_xml3_out.read()
file_xml3_out_content = file_xml3_out_content.strip()
file_xml3_out_content = file_xml3_out_content.replace("\r", "")
file_xml3_out_content = file_xml3_out_content.replace("\n", "")
file_xml3 = open(directory_to_process + file_xml3_out_content, 'w')
file_xml3.write( content_data)
file_xml3.close()
if "template4" in param:
# NOTE: promotion_template4.inc, image_template4, promotion_onclick4.inc, out_put_file4.txt
# promotion 4
file_inc3 = open(directory_to_process + "/event/promotion_template4.inc", 'r')
file_inc3_content = file_inc3.read()
file_inc_img = open(directory_to_process + "/../image/event/image_template4", 'r')
file_inc3_img_content = file_inc_img.read()
# replace key.
sp_key = file_inc3_img_content.split("\n")
print("sp_key = " + str(len( sp_key)))
for sp_line in sp_key:
sp_line = sp_line.strip()
key_val = sp_line.split("=")
print("Kenta420:", key_val)
if len( key_val) == 2:
print("k = " + key_val[0] + " val=" + key_val[1])
file_inc3_content = file_inc3_content.replace( "###" + key_val[0], '"' + key_val[1].strip() + '"')
file_inc_event_click = open(directory_to_process + "/event/promotion_onclick4.inc", 'r')
file_inc_event_click_content = file_inc_event_click.read()
file_inc3_content = file_inc3_content.replace("###EventOnClick", file_inc_event_click_content)
print(file_inc3_content)
#print( file_inc_content)
content_data_was_repack = file_content_main.replace(";dummy_layout.inc", file_inc_content)
content_data = content_data_was_repack.replace(";BigLogoLayout", file_inc3_content)
begin_text = content_data.index(";TAGESP")
end_text = content_data.index(";TAGESP", begin_text + 7)
#print("sub text = " + str(begin_text) + " end = " + str(end_text))
tmp1 = content_data[: begin_text - 7]
tmp3 = content_data[ end_text:-1]
#print("tmp1=" + tmp1)
#print("tmp3=" + tmp3)
content_data = tmp1 + tmp3
file_xml3_out = open(directory_to_process + "/event/out_put_file4.txt", 'r')
file_xml3_out_content = file_xml3_out.read()
file_xml3_out_content = file_xml3_out_content.strip()
file_xml3_out_content = file_xml3_out_content.replace("\r", "")
file_xml3_out_content = file_xml3_out_content.replace("\n", "")
file_xml3 = open(directory_to_process + file_xml3_out_content, 'w')
file_xml3.write( content_data)
file_xml3.close()
if "template5" in param:
# promotion thai tea
file_inc3 = open(directory_to_process + "/event/promotion_template5.inc", 'r')
file_inc3_content = file_inc3.read()
file_inc_img = open(directory_to_process + "/../image/event/image_template5", 'r')
file_inc3_img_content = file_inc_img.read()
# replace key.
sp_key = file_inc3_img_content.split("\n")
print("sp_key = " + str(len( sp_key)))
for sp_line in sp_key:
sp_line = sp_line.strip()
key_val = sp_line.split("=")
print("Kenta420:", key_val)
if len( key_val) == 2:
print("k = " + key_val[0] + " val=" + key_val[1])
file_inc3_content = file_inc3_content.replace( "###" + key_val[0], '"' + key_val[1].strip() + '"')
file_inc_event_click = open(directory_to_process + "/event/promotion_onclick5.inc", 'r')
file_inc_event_click_content = file_inc_event_click.read()
file_inc3_content = file_inc3_content.replace("###EventOnClick", file_inc_event_click_content)
print(file_inc3_content)
#print( file_inc_content)
content_data_was_repack = file_content_main.replace(";dummy_layout.inc", file_inc_content)
content_data = content_data_was_repack.replace(";BigLogoLayout", file_inc3_content)
begin_text = content_data.index(";TAGESP")
end_text = content_data.index(";TAGESP", begin_text + 7)
#print("sub text = " + str(begin_text) + " end = " + str(end_text))
tmp1 = content_data[: begin_text - 7]
tmp3 = content_data[ end_text:-1]
#print("tmp1=" + tmp1)
#print("tmp3=" + tmp3)
content_data = tmp1 + tmp3
file_xml3_out = open(directory_to_process + "/event/out_put_file5.txt", 'r')
file_xml3_out_content = file_xml3_out.read()
file_xml3_out_content = file_xml3_out_content.strip()
file_xml3_out_content = file_xml3_out_content.replace("\r", "")
file_xml3_out_content = file_xml3_out_content.replace("\n", "")
file_xml3 = open(directory_to_process + file_xml3_out_content, 'w')
file_xml3.write( content_data)
file_xml3.close()
###############################################################
# MULTI PRO
###############################################################
print("dummy.current_file_name=", current_file_name)
if "multi_promotion" in param:
print("Should gen multi")
files = os.listdir(directory_to_process + "/event/")
files = [f for f in files if f.startswith("multi_promotion_config")]
for filename in files:
recommend_multi_pro_buff = Path(directory_to_process + "/page_catalog_group_recommend_multi_pro.lxml").read_text()
# print("pre-regex multi pro buff = ", recommend_multi_pro_buff)
# print("test split", json.dumps(recommend_multi_pro_buff.splitlines(), indent=2))
temp = []
for buffer in recommend_multi_pro_buff.splitlines():
# print("buffer:"+buffer)
if "\\n" in buffer:
# print("found")
buffer = buffer.replace("\\n", "\\\\n")
temp.append(buffer)
recommend_multi_pro_buff = "\n".join(temp)
# print("after-splitlines multi pro buff = ", recommend_multi_pro_buff)
# recommend_multi_pro_buff = recommend_multi_pro.read()
# recommend_multi_pro.close()
#read config
multi_pro_config_file = open(directory_to_process + "/event/"+ filename)
multi_pro_config = json.load(multi_pro_config_file)
# if has any 'reorder'
order_list: list = []
index = 0
promotion_name = []
while index < len(multi_pro_config):
promotion_config = multi_pro_config[index]
index += 1
# add promotion name for create filename later
promotion_name.append(promotion_config["name"])
#load template
template_file = open(directory_to_process + promotion_config["template"])
template = template_file.read()
template_file.close()
# TODO: get script and replace ###event_on_click
if gen_season_pass and promotion_config["name"].startswith("s") and "product_code_key" in promotion_config.keys():
product_code = promotion_config["product_code_key"]
script = None
print("try find script for ", product_code)
try:
script = season_pass_menu_script[product_code]
if "\\n" in script:
script = script.replace("\\n", "\\\\n")
except:
pass
# print("script=", script)
if script != None:
template = template.replace("###on_click_script", script.strip())
# replace state
product_code_state = "$Sum" + ''.join(product_code.split('.')[1:]).replace("-","").replace("#","")
product_code_list = product_code.split('.')[1:]
pd_dot_btn = [pd +".Button" for pd in product_code_list if "#" not in pd]
print("gen state", product_code_state)
# template = template.replace("BigButtonEnable", f"Flag( {','.join(pd_dot_btn)},Disable=Invisible,{product_code_state})")
if "dev" in param:
template = template.replace("BigButtonEnable", f"\"Enable\"")
else:
template = template.replace("BigButtonEnable", f"{product_code_state}")
template = template.replace("###on_click_script", "")
for key, value in promotion_config["config"].items():
template = template.replace("###"+key, '"' + value.strip() + '"')
promotion_block_str = '\r\n<Block>\r\n\t<State> PromotionState{0} </State>\r\n\t<MarginLeft> 33 </MarginLeft>\r\n\t<MarginTop> 22 </MarginTop>\r\n\t<Width> 484 </Width>\r\n\t<Height> 602 </Height>\r\n'.format(index)
if gen_season_pass and promotion_config["name"].startswith("s") and "product_code_key" in promotion_config.keys():
promotion_block_str = f"\r\n<Block>\r\n\t<State> Flag( {','.join(pd_dot_btn)},Disable=Invisible,{product_code_state}) </State>\r\n\t<MarginLeft> 33 </MarginLeft>\r\n\t<MarginTop> 22 </MarginTop>\r\n\t<Width> 484 </Width>\r\n\t<Height> 602 </Height>\r\n"
# insert overlay tag
# promotion_block_str += season_pass_menu_big_btn_ui[f"{product_code}.overlay"].replace("menu_overlay_set", "event/menu_overlay_set")
try:
template = template.replace(";#Overlay", season_pass_menu_big_btn_ui[f"{product_code}.overlay"].replace("menu_overlay_set", "event/menu_overlay_set"))
except:
print("Overlay not found for "+product_code)
pass
if "dev" in param:
promotion_block_str = f"\r\n<Block>\r\n\t<State> \"Enable\" </State>\r\n\t<MarginLeft> 33 </MarginLeft>\r\n\t<MarginTop> 22 </MarginTop>\r\n\t<Width> 484 </Width>\r\n\t<Height> 602 </Height>\r\n"
# Add text for price and name
# season_pass_menu_big_btn_ui
if gen_season_pass and promotion_config["name"].startswith("s") and "product_code_key" in promotion_config.keys():
price_name_ui = season_pass_menu_big_btn_ui[product_code]
if price_name_ui != None:
print("get cloned ui OK")
# print("preview\n", price_name_ui)
template += "\r\n" + price_name_ui.replace("\\n", "\\\\n")
# <Image>
# <X> 10 </X>
# <Y> 10 </Y>
# <Filename> "ROOT/taobin_project/inter/sgp/image/event/menu_overlay_set/gradeB/button_overlay_catalog_3_posi1.png" </Filename>
# </Image>
# print("after replace\n", template)
# try:
# # get overlay
# overlay_original_tag = season_pass_menu_big_btn_ui[f"{product_code}.overlay"]
# # print(f"[OverlayClone] {product_code} --- "+overlay_original_tag+".")
# overlay_new_path = " ".join(overlay_original_tag.split(' ')[3:-1]).replace("menu_overlay_set", "event/menu_overlay_set").replace(")","")
# template += f"\t<Image>\r\n\t<X> 10 </X>\r\n\t<Y> 10 </Y>\r\n\t<Filename> {overlay_new_path} </Filename>\r\n\t</Image>\r\n"
# except:
# print("\t\t> Overlay not found for "+product_code+"\n")
promotion_block_str += template
promotion_block_str += '\r\n</Block>\r\n'
recommend_multi_pro_buff = re.sub(r'(?is)(;block{0}).*(;endblock{0})'.format(index), r'\1{0}\2'.format(promotion_block_str), recommend_multi_pro_buff)
# print("before idx cond check", recommend_multi_pro_buff)
# Path("./before_idx_cond_check."+str(index)).write_text(recommend_multi_pro_buff, encoding="utf-8")
if gen_season_pass and promotion_config["name"].startswith("s") and "product_code_key" in promotion_config.keys():
current_season = int([ s for s in product_code.split('.')[0]][1])
print("[REPL] season ", current_season)
filter_sm = [ pd for pd in season_pass_menu[current_season] if pd.endswith("sm")]
print("[SM] expect at least 4, ", len(filter_sm))
has_reorder = "reorder" in promotion_config.keys()
# interact_idx = (-1, -1)
# do load list
if has_reorder:
print("reorder mode")
order_list = promotion_config["reorder"]
print(json.dumps(order_list, indent=2), " while ", json.dumps(filter_sm, indent=2))
# buffer_key = ""
# new_sorted_list = [
# "",
# "",
# "",
# ""
# ]
filter_sm = order_list
# sort by has_order
# for filtered in filter_sm:
# print("try reorder", filtered, order_list)
# # get index from order
# expect_index = order_list.index(filtered)
# # interact_idx[0] = expect_index
# print("get expect = ", expect_index)
# current_index = filter_sm.index(filtered)
# # interact_idx[1] = current_index
# print("get current = ", current_index)
# is_matched_index = expect_index != -1 and expect_index == current_index
# print(f"check match {filtered}: ", not is_matched_index)
# # apply to new list
# new_sorted_list[expect_index] = filtered
# if not is_matched_index:
# print(f"swap current={filtered}@{current_index} to position@{expect_index} was {filter_sm[expect_index]}")
# buffer_key = filter_sm[expect_index]
# filter_sm[expect_index] = filtered
# filter_sm[current_index] = buffer_key
# buffer_key = ""
# print("final reorder \n\n",filter_sm,order_list,"\n\n", new_sorted_list ,"\n\n")
# try get block
generated_block_buffer = ""
for sm_menu in filter_sm:
if ";season-sm-block" not in recommend_multi_pro_buff:
print("expect already generated")
break
try:
sm_menu = ".".join(sm_menu.split(".")[:-1])
print("sm_menu", sm_menu)
curr_sm_block = store_block_list[sm_menu]
curr_sm_block = curr_sm_block.replace(",$Sum", ",Disable=Invisible,$Sum").replace("\\n", "\\\\n")
generated_block_buffer += curr_sm_block
# if "52-05-02-0076" in sm_menu:
# print("52-05-02-0076", generated_block_buffer)
except:
print("Cannot find store block for ", sm_menu)
pass
# replace by set of season menus
if generated_block_buffer != "" and ";season-sm-block" in recommend_multi_pro_buff:
print("init replace block")
recommend_multi_pro_buff = re.sub(r'(?is);season-sm-block.*?;end-season-sm-block', generated_block_buffer, recommend_multi_pro_buff)
# print(recommend_multi_pro_buff)
# recommend_multi_pro_buff = recommend_multi_pro_buff.replace("\\n", "\\n")
# Path("./generated_buffer_sm."+str(index)).write_text(recommend_multi_pro_buff, encoding="utf-8")
if index == 2:
# expend block3 to full width bottom
inner_block = re.search(r'(?is);block{0}(.*);endblock{0}'.format(index+1), recommend_multi_pro_buff).group(1)
inner_block = inner_block.replace("<Width> 516 </Width>", "<Width> 1032 </Width>", 2)
inner_block = inner_block.replace("<Max> 4 </Max>", "<Max> 8 </Max>", 1)
inner_block = inner_block.replace("<Column> 2 </Column>", "<Column> 4 </Column>", 1)
recommend_multi_pro_buff = re.sub(r'(?is)(;block{0}).*(;endblock{0})'.format(index+1), r'\1{0}\2'.format(inner_block), recommend_multi_pro_buff)
# remove block4
recommend_multi_pro_buff = re.sub(r'(?is)(;block{0}).*(;endblock{0})'.format(index+2), r'\1\2', recommend_multi_pro_buff)
# print("after idx 2 cond check", recommend_multi_pro_buff)
if index == 3:
# create expand block
# print("inner block2. Is buffer contain ;block?", ";block" in recommend_multi_pro_buff, re.search(r'(?is)(;block{0}.*;endblock{0})'.format(index+1), recommend_multi_pro_buff))
inner_block2 = re.search(r'(?is)(;block{0}.*;endblock{0})'.format(index+1), recommend_multi_pro_buff).group(1)
# print("inner_block2 = ", inner_block2)
# Path("./inner_block2."+str(index)).write_text(inner_block2, encoding="utf-8")
# Path("./inner_block2_buffer."+str(index)).write_text(recommend_multi_pro_buff, encoding="utf-8")
inner_block2 = inner_block2.replace(";block{0}".format(index+1), ";block{0}-expand".format(index+1))
# print("inner_block2_1 = ", inner_block2)
# Path("./inner_block2_1."+str(index)).write_text(inner_block2, encoding="utf-8")
# Path("./inner_block2_1_buffer."+str(index)).write_text(recommend_multi_pro_buff, encoding="utf-8")
inner_block2 = inner_block2.replace(";endblock{0}".format(index+1), ";endblock{0}-expand".format(index+1))
# print("inner_block2_2 = ", inner_block2)
# Path("./inner_block2_2."+str(index)).write_text(inner_block2, encoding="utf-8")
# Path("./inner_block2_2_buffer."+str(index)).write_text(recommend_multi_pro_buff, encoding="utf-8")
# print(f"inner_block2_2.buffer {index} = ", recommend_multi_pro_buff)
inner_block2 = inner_block2.replace("<Width> 516 </Width>", "<Width> 1032 </Width>", 2)
# inner_block2 = inner_block2.replace("<State> \"Enable\" </State> ", "<State>\r\n\teval(\r\n\tIf PromotionState{0} = \"Enable\" Then\r\n\t\tVar block_expend_show = \"Invisible\"\r\n\tElse\r\n\t\tVar block_expend_show = \"Enable\"\r\n\tEndIf\r\n\tVar return = block_expend_show\r\n\t)\r\n</State>".format(index), 1)
inner_block2 = inner_block2.replace("<Max> 4 </Max>", "<Max>\r\neval(\r\n\tIf CountEnablePromotion > 2 Then\r\n\t\tVar max_count = 4\r\n\tElse\r\n\t\tVar max_count = 8\r\n\tEndIf\r\n\tVar return = max_count\r\n)\r\n</Max>", 1)
inner_block2 = inner_block2.replace("<Column> 2 </Column>", "<Column>\r\neval(\r\n\tIf CountEnablePromotion > 2 Then\r\n\t\tVar column_count = 2\r\n\tElse\r\n\t\tVar column_count = 4\r\n\tEndIf\r\n\tVar return = column_count\r\n)\r\n</Column>", 1)
# print("inner_block2_3 = ", inner_block2)
if "\\n" in inner_block2:
inner_block2 = inner_block2.replace("\\n", "\\\\n")
recommend_multi_pro_buff = re.sub(r'(?is);block{0}.*;endblock{0}'.format(index+1), inner_block2, recommend_multi_pro_buff)
# print("after idx 3 cond check", recommend_multi_pro_buff)
# print("index = ", index)
# create promotion file
count_name_dict = {
2: "double_",
3: "triple_"
}
# print("write buffer encode: ", str(recommend_multi_pro_buff))
# test
# print("test pathlib", Path(directory_to_process + "/page_catalog_group_recommend_multi_pro.lxml").read_text())
# promo_file = open(directory_to_process + "/event/" + count_name_dict[len(multi_pro_config)]+ "promotion_" + "_and_".join(promotion_name) + ".lxml", "w")
Path(directory_to_process + "/event/" + count_name_dict[len(multi_pro_config)]+ "promotion_" + "_and_".join(promotion_name) + ".lxml").write_text(recommend_multi_pro_buff, encoding="utf-8")
# promo_file.write(recommend_multi_pro_buff)
# # promo_file.writelines(recommend_multi_pro_buff.split("\r\n"))
# promo_file.close()