From f954b7ee38b793b0e705313fb2f3a14d0f326aa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Manuel=20G=C3=B3mez?= Date: Fri, 17 Apr 2026 16:10:56 +0200 Subject: [PATCH] Fix encoding, batch sync and field mapping MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Force UTF-8 stdout with line buffering to fix Windows encoding error - Use batch_create/batch_update in Airtable sync (10x faster) - Fix CampaignID field type (string, not int) - Fix FechaEntrada → Fecha in leads query Co-Authored-By: Claude Sonnet 4.6 --- airtable_client.py | 19 +++++++++++++------ run.py | 4 ++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/airtable_client.py b/airtable_client.py index 255684e..1e9c18a 100644 --- a/airtable_client.py +++ b/airtable_client.py @@ -45,6 +45,8 @@ class AirtableClient: created = [] updated = [] + to_create = [] + to_update = [] # lista de (record_id, changes, name) for gc in google_campaigns: gid = gc["id"] @@ -52,11 +54,7 @@ class AirtableClient: at_record = at_by_gid.get(gid) if at_record is None: - self.campaigns.create({ - "Campaign Name": gc["name"], - "CampaignID": int(gid), - "Status": at_status, - }) + to_create.append({"Campaign Name": gc["name"], "CampaignID": gid, "Status": at_status}) created.append(gc["name"]) else: changes = {} @@ -65,9 +63,18 @@ class AirtableClient: if at_record["fields"].get("Status") != at_status: changes["Status"] = at_status if changes: - self.campaigns.update(at_record["id"], changes) + to_update.append((at_record["id"], changes, gc["name"])) updated.append(gc["name"]) + # Crear en lotes de 10 + for i in range(0, len(to_create), 10): + self.campaigns.batch_create(to_create[i:i+10]) + + # Actualizar en lotes de 10 + for i in range(0, len(to_update), 10): + batch = [{"id": rid, "fields": changes} for rid, changes, _ in to_update[i:i+10]] + self.campaigns.batch_update(batch) + return {"created": created, "updated": updated} def get_leads_this_month(self, cursoid_text: str) -> int: diff --git a/run.py b/run.py index b135e78..c6355e1 100644 --- a/run.py +++ b/run.py @@ -1,3 +1,7 @@ +import sys +import io +sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", line_buffering=True) + from airtable_client import AirtableClient from google_ads_client import GoogleAdsClient from analyzer import analyze