diff --git a/docker-compose.yml b/docker-compose.yml index 0d42e70..887595e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,17 +17,6 @@ services: # networks: # - 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: # kong-net: # external: true diff --git a/main.py b/main.py index accc819..66b9716 100644 --- a/main.py +++ b/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): - """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) grist_docs = config.get("grist_doc_id", {}) @@ -1539,6 +1539,74 @@ def grist_push_data_sheet_api(country: str): traceback.print_exc() 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): name = t_id + if name.startswith("Name_"): - name = name.replace("Name_", "Name=", 1) - if "_file_" in name: - name = name.replace("_file_", ",file=", 1) - if name.endswith("_skt"): - name = name[:-4] + ".skt" - return name + name = name[5:] + + if "_file_" in name: + parts = name.split("_file_", 1) + name_part = parts[0] + 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): """ Pull all table name in Document """ diff --git a/nginx.conf b/nginx.conf deleted file mode 100644 index d0db620..0000000 --- a/nginx.conf +++ /dev/null @@ -1,9 +0,0 @@ -server { - - listen 80; - - location /static/ { - alias /taobin_project/; - } - -} \ No newline at end of file