Fix encoding, batch sync and field mapping

- 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 <noreply@anthropic.com>
This commit is contained in:
Jose Manuel 2026-04-17 16:10:56 +02:00
parent ef7d494aeb
commit f954b7ee38
2 changed files with 17 additions and 6 deletions

View File

@ -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:

4
run.py
View File

@ -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