Estructura del proyecto
Archivos de tu proyecto cliente y qué debés implementar en cada uno.
Tu proyecto cliente sigue esta estructura. Cada página de esta sección explica qué implementar en un archivo concreto de tu repositorio.
brightmarket-<tu-org>-sync/
├── .env.example
├── login_aws.env.example
├── requirements.txt
├── scripts/
│ ├── auth-pip.sh
│ ├── auth-pip-win.ps1
│ ├── auth-pip-win.cmd
│ ├── print-codeartifact-token.sh
│ └── print-codeartifact-token-win.ps1
├── .github/workflows/build.yml # opcional
└── src/
├── main.py
├── sync_registry.py
├── db.py
├── adapter.py
├── constants.py
└── transforms/ # opcional: lógica específica del cliente
└── ...Capas
| Capa | Archivo | Rol |
|---|---|---|
| SDK (pip) | — | Login HTTP, sync y escritura en la API |
| Adapter | src/adapter.py | Lee tu fuente de datos (get_*) |
| Constants | src/constants.py | Field maps (*_FIELD_MAP) y value maps (*_MAPPING) |
| Transforms | src/transforms/ | Enrichment propio del cliente (nombres, IDs, parsing) antes del sync |
| Registry | src/sync_registry.py | Conecta adapter + constants al runner del SDK |
| CLI | src/main.py | Wrapper que delega en el SDK |
No necesitás src/sync/*.py. El SDK (brightmarket_data_sync.sync) agrupa filas, arma payloads y llama writers.
Buena práctica: src/transforms/
Mantené la raíz de src/ solo para el cableado del SDK (adapter, constants, sync_registry, main, db). Si necesitás reglas de negocio propias del cliente (por ejemplo enriquecer el name/externalId de una promoción con fechas), ponelas en src/transforms/ y llámálas desde el adapter antes de devolver las filas. No pongas writers ni orquestación de sync ahí.
Páginas de referencia
- main.py — entrypoint CLI
- sync_registry.py — registro de comandos
- adapter.py — protocolo de lectura
- Field maps — columnas fuente → claves lógicas del SDK
- db.py — conexión a tu fuente
- constants.py — field maps y value maps
- Ops: Autenticación pip, CI / PyInstaller
Contrato de filas y sync del SDK: Referencia del SDK.