Skip to main content

Luxor’s unified toolbox for data ingestion, querying and analytics.

Project description

📚 Documentação LuxorASAP

Guia do desenvolvedor para os subpacotes datareader, ingest, btgapi e utils.

• Instalação rápida • Visão arquitetural • APIs detalhadas • Exemplos de uso • Extras opcional


Índice

  1. Visão Geral
  2. Instalação
  3. utils
  4. datareader
  5. ingest
  6. btgapi
  7. Roadmap & Contribuições

1. Visão Geral

LuxorASAP é o toolbox unificado da Luxor para ingestão, consulta e automação de dados financeiros.

Subpacote Função‑chave Extras PyPI
utils Utilidades puras (I/O ADLS, transformação de DataFrame, decorators) storage, dataframe
datareader Consulta de preços/tabelas no data lake via LuxorQuery datareader
ingest Carga de dados nova (parquet/zip/excel) em ADLS + loader legado ingest
btgapi Wrapper autenticado para as APIs do BTG Pactual (relatórios & trades) btgapi

2. Instalação

# core + leitura de dados
pip install luxorasap[datareader]

# tudo incluído (leitura, ingest, btg)
pip install luxorasap[datareader,ingest,btgapi]

# desenvolvimento
pip install -e ".[dev]"

Extras podem ser combinados à vontade (luxorasap[storage], etc.).

Configuração obrigatória do ADLS:

export AZURE_STORAGE_CONNECTION_STRING="DefaultEndpointsProtocol=..."

3. utils

Camada de utilidades sem dependências internas.

3.1 storage.BlobParquetClient

from luxorasap.utils.storage import BlobParquetClient
client = BlobParquetClient(container="luxorasap")

# write
client.write_df(df, "bronze/parquet/mytable.parquet")

# read (tuple -> DataFrame, success_flag)
df, ok = client.read_df("bronze/parquet/mytable.parquet")

3.2 dataframe

from luxorasap.utils.dataframe import prep_for_save, persist_column_formatting, read_bytes

df2 = prep_for_save(df, index=True, index_name="ID", normalize=True)

3.3 decorators & misc

with_retry, chunkify, timer… ficam em utils.helpers (caso precise).


4. datareader

4.1 Visão rápida

from luxorasap.datareader import LuxorQuery
lq = LuxorQuery()

# DataFrame completo
df = lq.get_table("assets")

# Série de preços diária
aapl = lq.get_prices("aapl us equity", start="2025-01-01", end="2025-03-31")

# Preço pontual
price = lq.get_price("aapl us equity", on="2025-03-31")

Caching: @lru_cache(maxsize=32) evita hits repetidos ao Blob.

4.2 Métodos-chave

Método Descrição
table_exists(name) checa metadados no ADLS
get_table(name) DataFrame completo (cached)
get_prices(asset, start, end, column="Price") pd.Series
get_price(asset, on) preço pontual (float ou None)

5. ingest

5.1 ingest.cloud (novo)

from luxorasap.ingest import save_table, incremental_load
from luxorasap.datareader import LuxorQuery

save_table("trades", df)

lq = LuxorQuery()
incremental_load(lq, "prices_daily", df_new, increment_column="Date")

5.2 ingest.legacy_local

from luxorasap.ingest import DataLoader   # Deprecado – ainda funcional

Decoration: ao importar DataLoader você verá DeprecationWarning.


6. btgapi

6.1 Autenticação

from luxorasap.btgapi import get_access_token
TOKEN = get_access_token(test_env=True)

6.2 Relatórios – Portfolio & Investor Transactions

from luxorasap.btgapi.reports import (
    request_portfolio, await_report_ticket_result, process_zip_to_dfs,
    request_investors_transactions_report,
)

ticket = request_portfolio(TOKEN, "LUXOR FUND - CLASS A",
                           start=dt.date(2025,1,1), end=dt.date(2025,1,31))
zip_bytes = await_report_ticket_result(TOKEN, ticket)
carteiras = process_zip_to_dfs(zip_bytes)

6.3 Trades offshore

from luxorasap.btgapi.trades import (
    submit_offshore_equity_trades,
    await_transaction_ticket_result,
)

ticket = submit_offshore_equity_trades(TOKEN, trades=[{...}], test_env=True)
status_df = await_transaction_ticket_result(TOKEN, ticket, test_env=True)

6.4 Extras

  • BTGApiError — exceção customizada para qualquer falha.

7. Roadmap & Contribuições

  • Remover ingest.legacy_local quando não houver mais dependências.
  • Suporte a partições Parquet (delta‑like) na gravação.
  • Adicionar pydantic para validar contratos BTG.
  • Pull requests bem‑vindos! Rode make lint && pytest -q antes de enviar.

Contatos

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

luxorasap-0.1.2.tar.gz (55.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

luxorasap-0.1.2-py3-none-any.whl (53.5 kB view details)

Uploaded Python 3

File details

Details for the file luxorasap-0.1.2.tar.gz.

File metadata

  • Download URL: luxorasap-0.1.2.tar.gz
  • Upload date:
  • Size: 55.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for luxorasap-0.1.2.tar.gz
Algorithm Hash digest
SHA256 b57a6cdf76b31163a82f25d19882c3cc5d06b6f6244ae17c44d6efb3c801f722
MD5 86b0a3682597159f1ea77d922950b0da
BLAKE2b-256 9f8688c62fecc8dac83433d27498d7b684f47da7a0898d80e668712f0c0c0172

See more details on using hashes here.

File details

Details for the file luxorasap-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: luxorasap-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 53.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for luxorasap-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0864739b0c0faf8d4c2a48c5f7465601067cbd557d3ba396360dc74d04572c98
MD5 77a426ce1b83ad44c1b7018adbff8c66
BLAKE2b-256 b81a0e8cec69a6c2659a59be1d35973f9e0f1b037fcdd61894df82f12afe36d4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page