diff --git a/.release-please-manifest.json b/.release-please-manifest.json index b7634f9..80d368a 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.0.3" + ".": "1.0.4" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 00e0370..3d5ec16 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 11 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/alisson%2Fbrapi-bf7b0065e4057ae80522a943caa4967f1fe0aa0a6989122f5687788f39dfbdea.yml -openapi_spec_hash: 7ac81061bb9f3cb0c180b82b5ea83258 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/alisson%2Fbrapi-11630ce70d2f2c187912989dd9004b10828eaab889f617ba39d5a7a8e4b03b62.yml +openapi_spec_hash: 4198e5f7a76f3002723c113663465c00 config_hash: 6f10a67950f65bf850612b59838ad03b diff --git a/CHANGELOG.md b/CHANGELOG.md index 58d2679..d5ad74c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,21 @@ # Changelog +## 1.0.4 (2025-12-09) + +Full Changelog: [v1.0.3...v1.0.4](https://github.com/brapi-dev/brapi-python/compare/v1.0.3...v1.0.4) + +### Bug Fixes + +* ensure streams are always closed ([d1f3a3e](https://github.com/brapi-dev/brapi-python/commit/d1f3a3e1d98fb1ed84e31a58a1df5332446cd793)) +* **types:** allow pyright to infer TypedDict types within SequenceNotStr ([d1f1fcc](https://github.com/brapi-dev/brapi-python/commit/d1f1fcc15a0457f8c03ed22ed76730bee6b56fc1)) + + +### Chores + +* **deps:** mypy 1.18.1 has a regression, pin to 1.17 ([c03a35a](https://github.com/brapi-dev/brapi-python/commit/c03a35aa19cb32632f2929ebe8e44c171445e5fd)) +* **docs:** use environment variables for authentication in code snippets ([f80ab62](https://github.com/brapi-dev/brapi-python/commit/f80ab628737e2f32db10fc63b47ad0339733c57f)) +* update lockfile ([972cee4](https://github.com/brapi-dev/brapi-python/commit/972cee46353bc8dd7a096f975ae233e508bcf6ec)) + ## 1.0.3 (2025-11-22) Full Changelog: [v1.0.2...v1.0.3](https://github.com/brapi-dev/brapi-python/compare/v1.0.2...v1.0.3) diff --git a/README.md b/README.md index ccd626c..0c5bf22 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,7 @@ pip install brapi[aiohttp] Then you can enable it by instantiating the client with `http_client=DefaultAioHttpClient()`: ```python +import os import asyncio from brapi import DefaultAioHttpClient from brapi import AsyncBrapi @@ -94,7 +95,7 @@ from brapi import AsyncBrapi async def main() -> None: async with AsyncBrapi( - api_key="My API Key", + api_key=os.environ.get("BRAPI_API_KEY"), # This is the default and can be omitted http_client=DefaultAioHttpClient(), ) as client: quote = await client.quote.retrieve( diff --git a/pyproject.toml b/pyproject.toml index eb53185..0ffae3a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,20 +1,22 @@ [project] name = "brapi" -version = "1.0.3" +version = "1.0.4" description = "The official Python library for the brapi API" dynamic = ["readme"] license = "Apache-2.0" authors = [ { name = "Brapi", email = "contact@brapi.dev" }, ] + dependencies = [ - "httpx>=0.23.0, <1", - "pydantic>=1.9.0, <3", - "typing-extensions>=4.10, <5", - "anyio>=3.5.0, <5", - "distro>=1.7.0, <2", - "sniffio", + "httpx>=0.23.0, <1", + "pydantic>=1.9.0, <3", + "typing-extensions>=4.10, <5", + "anyio>=3.5.0, <5", + "distro>=1.7.0, <2", + "sniffio", ] + requires-python = ">= 3.9" classifiers = [ "Typing :: Typed", @@ -46,7 +48,7 @@ managed = true # version pins are in requirements-dev.lock dev-dependencies = [ "pyright==1.1.399", - "mypy", + "mypy==1.17", "respx", "pytest", "pytest-asyncio", diff --git a/requirements-dev.lock b/requirements-dev.lock index 3050a50..659c238 100644 --- a/requirements-dev.lock +++ b/requirements-dev.lock @@ -12,40 +12,45 @@ -e file:. aiohappyeyeballs==2.6.1 # via aiohttp -aiohttp==3.12.8 +aiohttp==3.13.2 # via brapi # via httpx-aiohttp -aiosignal==1.3.2 +aiosignal==1.4.0 # via aiohttp -annotated-types==0.6.0 +annotated-types==0.7.0 # via pydantic -anyio==4.4.0 +anyio==4.12.0 # via brapi # via httpx -argcomplete==3.1.2 +argcomplete==3.6.3 # via nox async-timeout==5.0.1 # via aiohttp -attrs==25.3.0 +attrs==25.4.0 # via aiohttp -certifi==2023.7.22 + # via nox +backports-asyncio-runner==1.2.0 + # via pytest-asyncio +certifi==2025.11.12 # via httpcore # via httpx -colorlog==6.7.0 +colorlog==6.10.1 + # via nox +dependency-groups==1.3.1 # via nox -dirty-equals==0.6.0 -distlib==0.3.7 +dirty-equals==0.11 +distlib==0.4.0 # via virtualenv -distro==1.8.0 +distro==1.9.0 # via brapi -exceptiongroup==1.2.2 +exceptiongroup==1.3.1 # via anyio # via pytest -execnet==2.1.1 +execnet==2.1.2 # via pytest-xdist -filelock==3.12.4 +filelock==3.19.1 # via virtualenv -frozenlist==1.6.2 +frozenlist==1.8.0 # via aiohttp # via aiosignal h11==0.16.0 @@ -58,80 +63,87 @@ httpx==0.28.1 # via respx httpx-aiohttp==0.1.9 # via brapi -idna==3.4 +humanize==4.13.0 + # via nox +idna==3.11 # via anyio # via httpx # via yarl -importlib-metadata==7.0.0 -iniconfig==2.0.0 +importlib-metadata==8.7.0 +iniconfig==2.1.0 # via pytest markdown-it-py==3.0.0 # via rich mdurl==0.1.2 # via markdown-it-py -multidict==6.4.4 +multidict==6.7.0 # via aiohttp # via yarl -mypy==1.14.1 -mypy-extensions==1.0.0 +mypy==1.17.0 +mypy-extensions==1.1.0 # via mypy -nodeenv==1.8.0 +nodeenv==1.9.1 # via pyright -nox==2023.4.22 -packaging==23.2 +nox==2025.11.12 +packaging==25.0 + # via dependency-groups # via nox # via pytest -platformdirs==3.11.0 +pathspec==0.12.1 + # via mypy +platformdirs==4.4.0 # via virtualenv -pluggy==1.5.0 +pluggy==1.6.0 # via pytest -propcache==0.3.1 +propcache==0.4.1 # via aiohttp # via yarl -pydantic==2.11.9 +pydantic==2.12.5 # via brapi -pydantic-core==2.33.2 +pydantic-core==2.41.5 # via pydantic -pygments==2.18.0 +pygments==2.19.2 + # via pytest # via rich pyright==1.1.399 -pytest==8.3.3 +pytest==8.4.2 # via pytest-asyncio # via pytest-xdist -pytest-asyncio==0.24.0 -pytest-xdist==3.7.0 -python-dateutil==2.8.2 +pytest-asyncio==1.2.0 +pytest-xdist==3.8.0 +python-dateutil==2.9.0.post0 # via time-machine -pytz==2023.3.post1 - # via dirty-equals respx==0.22.0 -rich==13.7.1 -ruff==0.9.4 -setuptools==68.2.2 - # via nodeenv -six==1.16.0 +rich==14.2.0 +ruff==0.14.7 +six==1.17.0 # via python-dateutil -sniffio==1.3.0 - # via anyio +sniffio==1.3.1 # via brapi -time-machine==2.9.0 -tomli==2.0.2 +time-machine==2.19.0 +tomli==2.3.0 + # via dependency-groups # via mypy + # via nox # via pytest -typing-extensions==4.12.2 +typing-extensions==4.15.0 + # via aiosignal # via anyio # via brapi + # via exceptiongroup # via multidict # via mypy # via pydantic # via pydantic-core # via pyright + # via pytest-asyncio # via typing-inspection -typing-inspection==0.4.1 + # via virtualenv +typing-inspection==0.4.2 # via pydantic -virtualenv==20.24.5 +virtualenv==20.35.4 # via nox -yarl==1.20.0 +yarl==1.22.0 # via aiohttp -zipp==3.17.0 +zipp==3.23.0 # via importlib-metadata diff --git a/requirements.lock b/requirements.lock index cf79912..f030e74 100644 --- a/requirements.lock +++ b/requirements.lock @@ -12,28 +12,28 @@ -e file:. aiohappyeyeballs==2.6.1 # via aiohttp -aiohttp==3.12.8 +aiohttp==3.13.2 # via brapi # via httpx-aiohttp -aiosignal==1.3.2 +aiosignal==1.4.0 # via aiohttp -annotated-types==0.6.0 +annotated-types==0.7.0 # via pydantic -anyio==4.4.0 +anyio==4.12.0 # via brapi # via httpx async-timeout==5.0.1 # via aiohttp -attrs==25.3.0 +attrs==25.4.0 # via aiohttp -certifi==2023.7.22 +certifi==2025.11.12 # via httpcore # via httpx -distro==1.8.0 +distro==1.9.0 # via brapi -exceptiongroup==1.2.2 +exceptiongroup==1.3.1 # via anyio -frozenlist==1.6.2 +frozenlist==1.8.0 # via aiohttp # via aiosignal h11==0.16.0 @@ -45,31 +45,32 @@ httpx==0.28.1 # via httpx-aiohttp httpx-aiohttp==0.1.9 # via brapi -idna==3.4 +idna==3.11 # via anyio # via httpx # via yarl -multidict==6.4.4 +multidict==6.7.0 # via aiohttp # via yarl -propcache==0.3.1 +propcache==0.4.1 # via aiohttp # via yarl -pydantic==2.11.9 +pydantic==2.12.5 # via brapi -pydantic-core==2.33.2 +pydantic-core==2.41.5 # via pydantic -sniffio==1.3.0 - # via anyio +sniffio==1.3.1 # via brapi -typing-extensions==4.12.2 +typing-extensions==4.15.0 + # via aiosignal # via anyio # via brapi + # via exceptiongroup # via multidict # via pydantic # via pydantic-core # via typing-inspection -typing-inspection==0.4.1 +typing-inspection==0.4.2 # via pydantic -yarl==1.20.0 +yarl==1.22.0 # via aiohttp diff --git a/src/brapi/_streaming.py b/src/brapi/_streaming.py index d0ff08c..e5f7242 100644 --- a/src/brapi/_streaming.py +++ b/src/brapi/_streaming.py @@ -54,11 +54,12 @@ def __stream__(self) -> Iterator[_T]: process_data = self._client._process_response_data iterator = self._iter_events() - for sse in iterator: - yield process_data(data=sse.json(), cast_to=cast_to, response=response) - - # As we might not fully consume the response stream, we need to close it explicitly - response.close() + try: + for sse in iterator: + yield process_data(data=sse.json(), cast_to=cast_to, response=response) + finally: + # Ensure the response is closed even if the consumer doesn't read all data + response.close() def __enter__(self) -> Self: return self @@ -117,11 +118,12 @@ async def __stream__(self) -> AsyncIterator[_T]: process_data = self._client._process_response_data iterator = self._iter_events() - async for sse in iterator: - yield process_data(data=sse.json(), cast_to=cast_to, response=response) - - # As we might not fully consume the response stream, we need to close it explicitly - await response.aclose() + try: + async for sse in iterator: + yield process_data(data=sse.json(), cast_to=cast_to, response=response) + finally: + # Ensure the response is closed even if the consumer doesn't read all data + await response.aclose() async def __aenter__(self) -> Self: return self diff --git a/src/brapi/_types.py b/src/brapi/_types.py index a3e695f..c98ff51 100644 --- a/src/brapi/_types.py +++ b/src/brapi/_types.py @@ -243,6 +243,9 @@ class HttpxSendArgs(TypedDict, total=False): if TYPE_CHECKING: # This works because str.__contains__ does not accept object (either in typeshed or at runtime) # https://github.com/hauntsaninja/useful_types/blob/5e9710f3875107d068e7679fd7fec9cfab0eff3b/useful_types/__init__.py#L285 + # + # Note: index() and count() methods are intentionally omitted to allow pyright to properly + # infer TypedDict types when dict literals are used in lists assigned to SequenceNotStr. class SequenceNotStr(Protocol[_T_co]): @overload def __getitem__(self, index: SupportsIndex, /) -> _T_co: ... @@ -251,8 +254,6 @@ def __getitem__(self, index: slice, /) -> Sequence[_T_co]: ... def __contains__(self, value: object, /) -> bool: ... def __len__(self) -> int: ... def __iter__(self) -> Iterator[_T_co]: ... - def index(self, value: Any, start: int = 0, stop: int = ..., /) -> int: ... - def count(self, value: Any, /) -> int: ... def __reversed__(self) -> Iterator[_T_co]: ... else: # just point this to a normal `Sequence` at runtime to avoid having to special case diff --git a/src/brapi/_version.py b/src/brapi/_version.py index 59676ab..aa6a0a5 100644 --- a/src/brapi/_version.py +++ b/src/brapi/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "brapi" -__version__ = "1.0.3" # x-release-please-version +__version__ = "1.0.4" # x-release-please-version diff --git a/src/brapi/types/available_list_response.py b/src/brapi/types/available_list_response.py index 20f59dd..07e0719 100644 --- a/src/brapi/types/available_list_response.py +++ b/src/brapi/types/available_list_response.py @@ -8,6 +8,8 @@ class AvailableListResponse(BaseModel): + """Resposta do endpoint que lista todos os tickers disponíveis.""" + indexes: List[str] """Lista de tickers de **índices** disponíveis (ex: `^BVSP`, `^IFIX`).""" diff --git a/src/brapi/types/balance_sheet_entry.py b/src/brapi/types/balance_sheet_entry.py index f40cd15..38a4aa7 100644 --- a/src/brapi/types/balance_sheet_entry.py +++ b/src/brapi/types/balance_sheet_entry.py @@ -12,6 +12,10 @@ class BalanceSheetEntry(BaseModel): + """ + Representa os dados de um Balanço Patrimonial para um período específico (anual ou trimestral). + """ + accounts_payable: Optional[float] = FieldInfo(alias="accountsPayable", default=None) """Contas a pagar (fornecedores).""" diff --git a/src/brapi/types/cashflow_entry.py b/src/brapi/types/cashflow_entry.py index b8b7fb9..a17f213 100644 --- a/src/brapi/types/cashflow_entry.py +++ b/src/brapi/types/cashflow_entry.py @@ -12,6 +12,10 @@ class CashflowEntry(BaseModel): + """ + Representa os dados de uma Demonstração do Fluxo de Caixa (DFC) para um período específico (anual ou trimestral). + """ + adjustments_to_profit_or_loss: Optional[float] = FieldInfo(alias="adjustmentsToProfitOrLoss", default=None) """ Ajustes ao lucro/prejuízo (depreciação, amortização, equivalência patrimonial, diff --git a/src/brapi/types/default_key_statistics_entry.py b/src/brapi/types/default_key_statistics_entry.py index dc1315b..44b1660 100644 --- a/src/brapi/types/default_key_statistics_entry.py +++ b/src/brapi/types/default_key_statistics_entry.py @@ -12,6 +12,10 @@ class DefaultKeyStatisticsEntry(BaseModel): + """ + Representa um conjunto de principais indicadores e estatísticas financeiras para um período (TTM, anual ou trimestral). + """ + api_52_week_change: Optional[float] = FieldInfo(alias="52WeekChange", default=None) """Variação percentual do preço da ação nas últimas 52 semanas.""" diff --git a/src/brapi/types/financial_data_entry.py b/src/brapi/types/financial_data_entry.py index 3db991a..3b6a05b 100644 --- a/src/brapi/types/financial_data_entry.py +++ b/src/brapi/types/financial_data_entry.py @@ -12,6 +12,10 @@ class FinancialDataEntry(BaseModel): + """ + Representa um conjunto de dados e indicadores financeiros calculados para um período (TTM, anual ou trimestral). + """ + current_price: Optional[float] = FieldInfo(alias="currentPrice", default=None) """Preço atual da ação (pode ser ligeiramente defasado).""" diff --git a/src/brapi/types/income_statement_entry.py b/src/brapi/types/income_statement_entry.py index 7429e0a..34bfc0b 100644 --- a/src/brapi/types/income_statement_entry.py +++ b/src/brapi/types/income_statement_entry.py @@ -12,6 +12,10 @@ class IncomeStatementEntry(BaseModel): + """ + Representa os dados de uma Demonstração do Resultado do Exercício (DRE) para um período específico (anual ou trimestral). + """ + id: Optional[str] = None """Identificador único deste registro de DRE (interno).""" diff --git a/src/brapi/types/quote_list_response.py b/src/brapi/types/quote_list_response.py index b1ca5d7..194ef67 100644 --- a/src/brapi/types/quote_list_response.py +++ b/src/brapi/types/quote_list_response.py @@ -11,6 +11,8 @@ class Index(BaseModel): + """Resumo de informações de um índice, geralmente retornado em listas.""" + name: Optional[str] = None """Nome do índice (ex: `IBOVESPA`).""" @@ -19,6 +21,10 @@ class Index(BaseModel): class Stock(BaseModel): + """ + Resumo de informações de um ativo (ação, FII, BDR), geralmente retornado em listas. + """ + change: Optional[float] = None """Variação percentual do preço em relação ao fechamento anterior.""" @@ -57,6 +63,8 @@ class Stock(BaseModel): class QuoteListResponse(BaseModel): + """Resposta do endpoint de listagem de cotações (`/api/quote/list`).""" + available_sectors: Optional[List[str]] = FieldInfo(alias="availableSectors", default=None) """ Lista de todos os setores disponíveis que podem ser usados no parâmetro de diff --git a/src/brapi/types/quote_retrieve_response.py b/src/brapi/types/quote_retrieve_response.py index 8f9e542..9deefa1 100644 --- a/src/brapi/types/quote_retrieve_response.py +++ b/src/brapi/types/quote_retrieve_response.py @@ -25,6 +25,8 @@ class ResultDividendsDataCashDividend(BaseModel): + """Detalhes sobre um pagamento de provento em dinheiro (Dividendo ou JCP).""" + approved_on: Optional[datetime] = FieldInfo(alias="approvedOn", default=None) """Data em que o pagamento do provento foi aprovado pela empresa. @@ -76,6 +78,10 @@ class ResultDividendsDataCashDividend(BaseModel): class ResultDividendsDataStockDividend(BaseModel): + """ + Detalhes sobre um evento corporativo que afeta a quantidade de ações (Desdobramento/Split, Grupamento/Inplit, Bonificação). + """ + approved_on: Optional[datetime] = FieldInfo(alias="approvedOn", default=None) """Data em que o evento foi aprovado. Formato ISO 8601.""" @@ -109,6 +115,11 @@ class ResultDividendsDataStockDividend(BaseModel): class ResultDividendsData(BaseModel): + """Objeto contendo informações sobre dividendos, JCP e outros eventos corporativos. + + Retornado apenas se `dividends=true` for especificado na requisição. + """ + cash_dividends: Optional[List[ResultDividendsDataCashDividend]] = FieldInfo(alias="cashDividends", default=None) """Lista de proventos pagos em dinheiro (Dividendos e JCP).""" @@ -120,6 +131,8 @@ class ResultDividendsData(BaseModel): class ResultHistoricalDataPrice(BaseModel): + """Representa um ponto na série histórica de preços de um ativo.""" + adjusted_close: Optional[float] = FieldInfo(alias="adjustedClose", default=None) """ Preço de fechamento ajustado para proventos (dividendos, JCP, bonificações, @@ -149,6 +162,11 @@ class ResultHistoricalDataPrice(BaseModel): class ResultSummaryProfile(BaseModel): + """Resumo do perfil da empresa. + + Retornado apenas se `modules` incluir `summaryProfile`. + """ + address1: Optional[str] = None """Linha 1 do endereço da sede da empresa.""" @@ -205,6 +223,10 @@ class ResultSummaryProfile(BaseModel): class Result(BaseModel): + """ + Contém os dados detalhados de um ativo específico retornado pelo endpoint `/api/quote/{tickers}`. + """ + average_daily_volume10_day: Optional[float] = FieldInfo(alias="averageDailyVolume10Day", default=None) """Média do volume financeiro diário negociado nos últimos 10 dias.""" @@ -460,6 +482,8 @@ class Result(BaseModel): class QuoteRetrieveResponse(BaseModel): + """Resposta principal do endpoint `/api/quote/{tickers}`.""" + requested_at: Optional[datetime] = FieldInfo(alias="requestedAt", default=None) """Timestamp indicando quando a requisição foi recebida pelo servidor. diff --git a/src/brapi/types/v2/crypto_list_available_response.py b/src/brapi/types/v2/crypto_list_available_response.py index 5951e9a..d4dab7f 100644 --- a/src/brapi/types/v2/crypto_list_available_response.py +++ b/src/brapi/types/v2/crypto_list_available_response.py @@ -8,6 +8,8 @@ class CryptoListAvailableResponse(BaseModel): + """Resposta do endpoint que lista todas as criptomoedas disponíveis.""" + coins: Optional[List[str]] = None """ Lista de siglas (tickers) das criptomoedas disponíveis (ex: `BTC`, `ETH`, diff --git a/src/brapi/types/v2/crypto_retrieve_response.py b/src/brapi/types/v2/crypto_retrieve_response.py index 11d50b7..2b4ffa8 100644 --- a/src/brapi/types/v2/crypto_retrieve_response.py +++ b/src/brapi/types/v2/crypto_retrieve_response.py @@ -11,6 +11,8 @@ class CoinHistoricalDataPrice(BaseModel): + """Representa um ponto na série histórica de preços de uma criptomoeda.""" + adjusted_close: Optional[float] = FieldInfo(alias="adjustedClose", default=None) """Preço de fechamento ajustado (geralmente igual ao `close` para cripto).""" @@ -37,6 +39,10 @@ class CoinHistoricalDataPrice(BaseModel): class Coin(BaseModel): + """ + Contém os dados detalhados de uma criptomoeda específica retornada pelo endpoint `/api/v2/crypto`. + """ + coin: Optional[str] = None """Sigla (ticker) da criptomoeda (ex: `BTC`, `ETH`).""" @@ -113,5 +119,7 @@ class Coin(BaseModel): class CryptoRetrieveResponse(BaseModel): + """Resposta principal do endpoint `/api/v2/crypto`.""" + coins: Optional[List[Coin]] = None """Array contendo os resultados detalhados para cada criptomoeda solicitada.""" diff --git a/src/brapi/types/v2/currency_list_available_response.py b/src/brapi/types/v2/currency_list_available_response.py index 2a515fc..0ceda29 100644 --- a/src/brapi/types/v2/currency_list_available_response.py +++ b/src/brapi/types/v2/currency_list_available_response.py @@ -17,6 +17,8 @@ class Currency(BaseModel): class CurrencyListAvailableResponse(BaseModel): + """Resposta do endpoint que lista todas as moedas fiduciárias disponíveis.""" + currencies: Optional[List[Currency]] = None """ Lista de objetos, cada um contendo o nome de uma moeda fiduciária ou par diff --git a/src/brapi/types/v2/currency_retrieve_response.py b/src/brapi/types/v2/currency_retrieve_response.py index 7cc09b5..fdf3b33 100644 --- a/src/brapi/types/v2/currency_retrieve_response.py +++ b/src/brapi/types/v2/currency_retrieve_response.py @@ -10,6 +10,10 @@ class Currency(BaseModel): + """ + Contém os dados detalhados da cotação de um **par de moedas fiduciárias específico**, retornado como um elemento do array `currency` no endpoint `/api/v2/currency`. + """ + ask_price: str = FieldInfo(alias="askPrice") """ **Preço de Venda (Ask):** Preço atual pelo qual o mercado está disposto a vender @@ -77,6 +81,8 @@ class Currency(BaseModel): class CurrencyRetrieveResponse(BaseModel): + """Estrutura da **resposta principal** do endpoint `GET /api/v2/currency`.""" + currency: List[Currency] """ Array contendo os objetos `CurrencyQuote`, um para cada par de moeda válido diff --git a/src/brapi/types/v2/inflation_list_available_response.py b/src/brapi/types/v2/inflation_list_available_response.py index 971e902..964adf4 100644 --- a/src/brapi/types/v2/inflation_list_available_response.py +++ b/src/brapi/types/v2/inflation_list_available_response.py @@ -8,6 +8,8 @@ class InflationListAvailableResponse(BaseModel): + """Resposta do endpoint que lista os países com dados de inflação disponíveis.""" + countries: Optional[List[str]] = None """ Lista de nomes de países (em minúsculas) para os quais há dados de inflação diff --git a/src/brapi/types/v2/inflation_retrieve_response.py b/src/brapi/types/v2/inflation_retrieve_response.py index 864488a..a7daeaa 100644 --- a/src/brapi/types/v2/inflation_retrieve_response.py +++ b/src/brapi/types/v2/inflation_retrieve_response.py @@ -10,6 +10,8 @@ class Inflation(BaseModel): + """Representa um ponto de dado histórico de inflação para um país.""" + date: Optional[str] = None """Data da medição da inflação, no formato `DD/MM/YYYY`.""" @@ -27,6 +29,8 @@ class Inflation(BaseModel): class InflationRetrieveResponse(BaseModel): + """Resposta principal do endpoint `/api/v2/inflation`.""" + inflation: Optional[List[Inflation]] = None """ Array contendo os registros históricos de inflação para o país e período diff --git a/src/brapi/types/v2/prime_rate_list_available_response.py b/src/brapi/types/v2/prime_rate_list_available_response.py index 4cfacdd..67e901a 100644 --- a/src/brapi/types/v2/prime_rate_list_available_response.py +++ b/src/brapi/types/v2/prime_rate_list_available_response.py @@ -8,6 +8,10 @@ class PrimeRateListAvailableResponse(BaseModel): + """ + Resposta do endpoint `/api/v2/prime-rate/available` que lista os países disponíveis para consulta de taxa básica de juros (SELIC). + """ + countries: Optional[List[str]] = None """ Lista de países com dados de taxa básica de juros (SELIC) disponíveis para diff --git a/src/brapi/types/v2/prime_rate_retrieve_response.py b/src/brapi/types/v2/prime_rate_retrieve_response.py index 967860e..b4e9a78 100644 --- a/src/brapi/types/v2/prime_rate_retrieve_response.py +++ b/src/brapi/types/v2/prime_rate_retrieve_response.py @@ -10,6 +10,10 @@ class PrimeRate(BaseModel): + """ + Representa um registro individual de taxa básica de juros (SELIC) para uma data específica. + """ + date: Optional[str] = None """Data do registro no formato DD/MM/YYYY.""" @@ -21,6 +25,8 @@ class PrimeRate(BaseModel): class PrimeRateRetrieveResponse(BaseModel): + """Resposta principal do endpoint `/api/v2/prime-rate`.""" + prime_rate: Optional[List[PrimeRate]] = FieldInfo(alias="prime-rate", default=None) """ Array contendo os registros históricos de taxa básica de juros (SELIC) para o diff --git a/src/brapi/types/value_added_entry.py b/src/brapi/types/value_added_entry.py index 70c0db2..b553683 100644 --- a/src/brapi/types/value_added_entry.py +++ b/src/brapi/types/value_added_entry.py @@ -12,6 +12,10 @@ class ValueAddedEntry(BaseModel): + """ + Representa os dados de uma Demonstração do Valor Adicionado (DVA) para um período específico (anual ou trimestral). A DVA mostra como a riqueza gerada pela empresa foi distribuída. + """ + added_value_received_by_transfer: Optional[float] = FieldInfo(alias="addedValueReceivedByTransfer", default=None) """ Valor Adicionado Recebido em Transferência (Resultado de Equivalência