Guía de Migración: implementación legacy → src/¶
Migración de v1 a v2¶
v2 mantiene los clientes, modelos y métodos principales, pero introduce dos cambios incompatibles:
- Instale el backend de DataFrame explícitamente:
bcch-sdk[polars],bcch-sdk[pandas]obcch-sdk[dataframe]. - Reemplace
SerieInformationporSeriesInformationeInvalidsCredentialsExceptionporInvalidCredentialsException.
Una instalación base (pip install bcch-sdk) permite usar
BCChSyncClient/BCChAsyncClient y los modelos Pydantic. Invocar el SDK de
alto nivel sin el extra requerido produce
MissingDataFrameDependencyException con una instrucción de instalación.
Esta guía documenta las diferencias funcionales y de diseño entre la implementación legacy (código anterior usado como referencia) y la nueva implementación reescrita bajo src/.
Resumen rápido:
- La implementación legacy ofrecía una clase
Sessionque exponíagetysearch(métodos sync usandorequests). - La reimplementación en
src/separa responsabilidades en: clients/— clientes sync/async con transporte y validación robusta.builders/— construcción de parámetros y normalización de entradas.models/— validación y conversión directa de payloads a modelos tipados (Pydantic).sdk/— capa pública que ofrece conveniencias y concurrencia.
Detalles por módulo
-
Legacy
credentialsvsbcch_sdk.types.auth+bcch_sdk/mappers/credentials -
Legacy: funciones
get_credentials()yread_credentials(file)que devuelven(user, password)leídos desde input o archivo. - Nueva: uso de
InternalCredentials(src/bcch_sdk/types/auth.py) comoTypedDictyCredentialsMapper.to_query_credentials(bcch_sdk/mappers/credentials.py) para transformar al dict de query esperado (user,pass). -
Razonamiento: tipos explícitos y separación de IO (lectura de credenciales) de mapeo a parámetros de consulta.
-
Legacy
exceptionvssrc/bcch_sdk/exceptions -
Legacy: excepciones simples que heredan de
Exception(p. ej.InvalidSeries,InvalidCredentials). - Nueva: jerarquía de excepciones más rica (
TransportException,ResponseParseException,InvalidCredentialsException,InvalidDateException, etc.) que mejoran el control de flujos y diferenciación de fallos. -
Razonamiento: distinguir problemas de transporte, parseo y errores de negocio facilita manejo en aplicaciones consumidoras.
-
Legacy
webservice.Sessionvssrc/bcch_sdk/clients/(BCChSyncClientyBCChAsyncClient) -
Legacy:
Session.get(time_series, first_date, last_date)ySession.search(frequency)usandorequests.get, parseo JSON directo y conversión con clasesWSResponse. - Nueva: clientes sincronous y asíncronos (
src/bcch_sdk/clients/sync_client.pyysrc/bcch_sdk/clients/async_client.py) que:- Soportan
httpxconTimeoutyRetryTransport. - Centralizan validación y parseo en
_validate_responseretornandoWebServiceResponsetipado (src/bcch_sdk/models/web_service.py). - Tiran excepciones concretas para códigos de API y errores de transporte.
- Soportan
-
Razonamiento: independencia de la librería de transporte, mejores tiempos de espera configurables y reintentos automáticos.
-
Formato de parámetros HTTP
-
Legacy: construía
paramscon las clavesuser,pass,firstdate,lastdate,timeseriesyfunction. - Nueva:
src/bcch_sdk/builders/parameters.pyencapsula la construcción de parámetros y usaCredentialsMapperademás deDateBuilder. La clave usada para las series estimeseries(coincide con legacy). -
Importante: la API Python expone
time_seriescomo nombre de variable/argumento, yParameterBuildermappea a la clave HTTPtimeseries. -
Manejo de respuestas: implementación legacy vs
src/bcch_sdk/models/* -
Legacy:
WSResponse,GSResponse,SSResponsecon métodos para transformar apandas.Series/pandas.DataFrame. - Nueva: modelos Pydantic (
src/bcch_sdk/models/web_service.py,src/bcch_sdk/models/series.py,src/bcch_sdk/models/series_information.py,src/bcch_sdk/models/observation_series.py) que normalizan nombres de campos (camelCase → snake_case y traducciones más claras, p. ej.descripEsp→spanish_description). - Razonamiento: los alias de validación de Pydantic eliminan la necesidad de DTOs duplicados, mejoran la interoperabilidad con herramientas de tipado y permiten que
DataFrameMappergenere DataFrames cuando se necesite.
Migración práctica — pasos recomendados para los usuarios del paquete legacy:
- Reemplace
SessionporBCChSyncClientoBCChAsyncClient. - Cambie la lectura de credenciales para usar
InternalCredentialso pasar un dict{"username": ..., "password": ...}y deje que laCredentialsMapperhaga la transformación. - Ajuste el nombre del argumento
time_series(el SDK lo usa así) — los parámetros HTTP continuarán usandotimeseries. - Actualice su manejo de excepciones para capturar
TransportException,InvalidCredentialsException,ResponseParseExceptionen lugar de las excepciones legacy.
En la página de comparación (Comparison) se incluyen ejemplos concretos y fragmentos de código lado a lado.