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
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_localquando não houver mais dependências. - Suporte a partições Parquet (delta‑like) na gravação.
- Adicionar
pydanticpara validar contratos BTG. - Pull requests bem‑vindos! Rode
make lint && pytest -qantes de enviar.
Contatos
- Dados / Back‑Office – backoffice@luxor.com.br
- Mantenedor principal – Sergio
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b57a6cdf76b31163a82f25d19882c3cc5d06b6f6244ae17c44d6efb3c801f722
|
|
| MD5 |
86b0a3682597159f1ea77d922950b0da
|
|
| BLAKE2b-256 |
9f8688c62fecc8dac83433d27498d7b684f47da7a0898d80e668712f0c0c0172
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0864739b0c0faf8d4c2a48c5f7465601067cbd557d3ba396360dc74d04572c98
|
|
| MD5 |
77a426ce1b83ad44c1b7018adbff8c66
|
|
| BLAKE2b-256 |
b81a0e8cec69a6c2659a59be1d35973f9e0f1b037fcdd61894df82f12afe36d4
|