Premium: [sheet-service] update reconstruct table name, API export sheet data
This commit is contained in:
parent
f24002010e
commit
2612d33eb2
3 changed files with 146 additions and 27 deletions
|
|
@ -17,17 +17,6 @@ services:
|
||||||
# networks:
|
# networks:
|
||||||
# - kong-net
|
# - kong-net
|
||||||
|
|
||||||
nginx:
|
|
||||||
image: nginx:latest
|
|
||||||
container_name: nginx-image-container
|
|
||||||
volumes:
|
|
||||||
- ~/repo/taobin_project:/taobin_project
|
|
||||||
- ./nginx.conf:/etc/nginx/conf.d/default.conf
|
|
||||||
ports:
|
|
||||||
- "8080:80"
|
|
||||||
# networks:
|
|
||||||
# - kong-net
|
|
||||||
|
|
||||||
# networks:
|
# networks:
|
||||||
# kong-net:
|
# kong-net:
|
||||||
# external: true
|
# external: true
|
||||||
|
|
|
||||||
153
main.py
153
main.py
|
|
@ -929,7 +929,7 @@ def update_sheets(country: str, catalog: str, content: list):
|
||||||
|
|
||||||
|
|
||||||
def sync_nv2_to_nl(country: str, catalog: str, nv2_updates: list, headers: dict):
|
def sync_nv2_to_nl(country: str, catalog: str, nv2_updates: list, headers: dict):
|
||||||
"""Sync updates จาก new-layout-v2 ไปอัปเดต new-layout สำหรับ THA"""
|
"""Sync updates from new-layout-v2 to new-layout (If is tha)"""
|
||||||
config = COUNTRY_MAPPING.get(country)
|
config = COUNTRY_MAPPING.get(country)
|
||||||
grist_docs = config.get("grist_doc_id", {})
|
grist_docs = config.get("grist_doc_id", {})
|
||||||
|
|
||||||
|
|
@ -1539,6 +1539,74 @@ def grist_push_data_sheet_api(country: str):
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
raise HTTPException(status_code=500, detail=str(e))
|
raise HTTPException(status_code=500, detail=str(e))
|
||||||
|
|
||||||
|
@app.get("/export/{country}")
|
||||||
|
def export_country(country: str):
|
||||||
|
try:
|
||||||
|
data = get_country_sheet_data(country)
|
||||||
|
|
||||||
|
return {
|
||||||
|
"country": country,
|
||||||
|
"sheets": data
|
||||||
|
}
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
raise HTTPException(status_code=400, detail=str(e))
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
Get data sheet from grist
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
def get_country_sheet_data(country_key):
|
||||||
|
if country_key not in COUNTRY_MAPPING:
|
||||||
|
raise Exception(f"Country '{country_key}' not found")
|
||||||
|
|
||||||
|
config = COUNTRY_MAPPING[country_key]
|
||||||
|
sheets = config["sheets"]
|
||||||
|
grist_doc_ids = config.get("grist_doc_id", {})
|
||||||
|
|
||||||
|
result = {}
|
||||||
|
|
||||||
|
for sheet_key, sheet_name in sheets.items():
|
||||||
|
if not sheet_name:
|
||||||
|
continue
|
||||||
|
|
||||||
|
doc_id = grist_doc_ids.get(sheet_key)
|
||||||
|
if not doc_id:
|
||||||
|
continue
|
||||||
|
|
||||||
|
try:
|
||||||
|
if sheet_key == "name-desc-v2":
|
||||||
|
rows = fetch_grist_table_data(doc_id, "Name_desc_v2")
|
||||||
|
result[sheet_key] = [r["fields"] for r in rows]
|
||||||
|
|
||||||
|
elif sheet_key in ["new-layout", "new-layout-v2"]:
|
||||||
|
all_tables = get_all_grist_tables(doc_id)
|
||||||
|
|
||||||
|
all_rows = []
|
||||||
|
|
||||||
|
for t_id in all_tables:
|
||||||
|
if t_id.lower() == "name_desc_v2":
|
||||||
|
continue
|
||||||
|
|
||||||
|
rows = fetch_grist_table_data(doc_id, t_id)
|
||||||
|
|
||||||
|
if rows:
|
||||||
|
original_name = reconstruct_table_name(t_id)
|
||||||
|
|
||||||
|
all_rows.append([original_name])
|
||||||
|
all_rows.extend([r["fields"] for r in rows])
|
||||||
|
|
||||||
|
result[sheet_key] = all_rows
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
result[sheet_key] = {
|
||||||
|
"error": str(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
@ -1697,13 +1765,84 @@ def col_to_index(col_str):
|
||||||
|
|
||||||
def reconstruct_table_name(t_id):
|
def reconstruct_table_name(t_id):
|
||||||
name = t_id
|
name = t_id
|
||||||
|
|
||||||
if name.startswith("Name_"):
|
if name.startswith("Name_"):
|
||||||
name = name.replace("Name_", "Name=", 1)
|
name = name[5:]
|
||||||
if "_file_" in name:
|
|
||||||
name = name.replace("_file_", ",file=", 1)
|
if "_file_" in name:
|
||||||
if name.endswith("_skt"):
|
parts = name.split("_file_", 1)
|
||||||
name = name[:-4] + ".skt"
|
name_part = parts[0]
|
||||||
return name
|
rest = parts[1]
|
||||||
|
|
||||||
|
name_value = name_part.replace("_", "")
|
||||||
|
|
||||||
|
result = f"Name={name_value},file="
|
||||||
|
|
||||||
|
if "_skt_" in rest:
|
||||||
|
file_part, params_part = rest.split("_skt_", 1)
|
||||||
|
result += reconstruct_file_part(file_part) + ".skt"
|
||||||
|
|
||||||
|
params = reconstruct_params(params_part)
|
||||||
|
if params:
|
||||||
|
result += "," + params
|
||||||
|
|
||||||
|
elif rest.endswith("_skt"):
|
||||||
|
file_part = rest[:-4]
|
||||||
|
result += reconstruct_file_part(file_part) + ".skt"
|
||||||
|
|
||||||
|
else:
|
||||||
|
result += reconstruct_file_part(rest)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
return t_id
|
||||||
|
|
||||||
|
|
||||||
|
def reconstruct_file_part(file_id_part):
|
||||||
|
return file_id_part
|
||||||
|
|
||||||
|
|
||||||
|
def reconstruct_params(params_part):
|
||||||
|
|
||||||
|
result_parts = []
|
||||||
|
remaining = params_part
|
||||||
|
|
||||||
|
if "_parameter_" in remaining:
|
||||||
|
parts = remaining.rsplit("_parameter_", 1)
|
||||||
|
if len(parts) == 2:
|
||||||
|
before, param_value = parts
|
||||||
|
if "_file_" in before or "_xml_" in before:
|
||||||
|
if "_xml_file_" in before:
|
||||||
|
file_parts = before.split("_xml_file_", 1)
|
||||||
|
key_name = file_parts[0] # "topping"
|
||||||
|
full_key = key_name + "_xml_file" if not key_name.endswith("_xml") else key_name + "_file"
|
||||||
|
value_part = file_parts[1]
|
||||||
|
result_parts.append(f"{full_key}={reconstruct_file_with_ext(value_part)}")
|
||||||
|
|
||||||
|
elif "_file_" in before:
|
||||||
|
file_parts = before.rsplit("_file_", 1)
|
||||||
|
key_name = file_parts[0]
|
||||||
|
value_part = file_parts[1]
|
||||||
|
result_parts.append(f"{key_name}_file={reconstruct_file_with_ext(value_part)}")
|
||||||
|
|
||||||
|
result_parts.append(f"parameter={param_value.replace('_', '-')}")
|
||||||
|
|
||||||
|
return ",".join(result_parts)
|
||||||
|
|
||||||
|
|
||||||
|
def reconstruct_file_with_ext(file_id_part):
|
||||||
|
|
||||||
|
extensions = {
|
||||||
|
"_lxml": ".lxml",
|
||||||
|
"_xml": ".xml",
|
||||||
|
"_skt": ".skt"
|
||||||
|
}
|
||||||
|
|
||||||
|
for ext_id, ext_real in extensions.items():
|
||||||
|
if file_id_part.endswith(ext_id):
|
||||||
|
return file_id_part[:-len(ext_id)] + ext_real
|
||||||
|
|
||||||
|
return file_id_part
|
||||||
|
|
||||||
def get_all_grist_tables(doc_id):
|
def get_all_grist_tables(doc_id):
|
||||||
""" Pull all table name in Document """
|
""" Pull all table name in Document """
|
||||||
|
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
server {
|
|
||||||
|
|
||||||
listen 80;
|
|
||||||
|
|
||||||
location /static/ {
|
|
||||||
alias /taobin_project/;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue