luxorasap 0.1.3__tar.gz → 0.1.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. luxorasap-0.1.4/PKG-INFO +128 -0
  2. luxorasap-0.1.4/README.md +81 -0
  3. {luxorasap-0.1.3 → luxorasap-0.1.4}/pyproject.toml +7 -3
  4. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap/__init__.py +1 -1
  5. luxorasap-0.1.4/src/luxorasap.egg-info/PKG-INFO +128 -0
  6. luxorasap-0.1.3/PKG-INFO +0 -241
  7. luxorasap-0.1.3/README.md +0 -196
  8. luxorasap-0.1.3/src/luxorasap.egg-info/PKG-INFO +0 -241
  9. {luxorasap-0.1.3 → luxorasap-0.1.4}/setup.cfg +0 -0
  10. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap/btgapi/__init__.py +0 -0
  11. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap/btgapi/auth.py +0 -0
  12. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap/btgapi/reports.py +0 -0
  13. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap/btgapi/trades.py +0 -0
  14. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap/datareader/__init__.py +0 -0
  15. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap/datareader/core.py +0 -0
  16. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap/ingest/__init__.py +0 -0
  17. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap/ingest/cloud/__init__.py +0 -0
  18. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap/ingest/legacy_local/dataloader.py +0 -0
  19. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap/utils/__init__.py +0 -0
  20. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap/utils/dataframe/__init__.py +0 -0
  21. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap/utils/dataframe/reader.py +0 -0
  22. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap/utils/dataframe/transforms.py +0 -0
  23. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap/utils/storage/__init__.py +0 -0
  24. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap/utils/storage/blob.py +0 -0
  25. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap.egg-info/SOURCES.txt +0 -0
  26. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap.egg-info/dependency_links.txt +0 -0
  27. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap.egg-info/entry_points.txt +0 -0
  28. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap.egg-info/requires.txt +0 -0
  29. {luxorasap-0.1.3 → luxorasap-0.1.4}/src/luxorasap.egg-info/top_level.txt +0 -0
  30. {luxorasap-0.1.3 → luxorasap-0.1.4}/tests/test_btgapi_auth.py +0 -0
  31. {luxorasap-0.1.3 → luxorasap-0.1.4}/tests/test_btgapi_reports.py +0 -0
  32. {luxorasap-0.1.3 → luxorasap-0.1.4}/tests/test_btgapi_trades.py +0 -0
  33. {luxorasap-0.1.3 → luxorasap-0.1.4}/tests/test_datareader.py +0 -0
  34. {luxorasap-0.1.3 → luxorasap-0.1.4}/tests/test_ingest_cloud.py +0 -0
  35. {luxorasap-0.1.3 → luxorasap-0.1.4}/tests/test_ingest_legacy_local.py +0 -0
  36. {luxorasap-0.1.3 → luxorasap-0.1.4}/tests/test_utils_dataframe.py +0 -0
  37. {luxorasap-0.1.3 → luxorasap-0.1.4}/tests/test_utils_storage.py +0 -0
@@ -0,0 +1,128 @@
1
+ Metadata-Version: 2.4
2
+ Name: luxorasap
3
+ Version: 0.1.4
4
+ Summary: Toolbox da Luxor para ingestão, análise e automação de dados financeiros.
5
+ Author-email: Luxor Group <backoffice@luxor.com.br>
6
+ License: Proprietary – All rights reserved
7
+ Project-URL: Homepage, https://github.com/luxor-group/luxor-asap
8
+ Project-URL: Documentation, https://luxor-group.github.io/luxorasap-docs/
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: License :: Other/Proprietary License
11
+ Classifier: Operating System :: OS Independent
12
+ Requires-Python: >=3.9
13
+ Description-Content-Type: text/markdown
14
+ Requires-Dist: pandas>=2.2
15
+ Requires-Dist: numpy>=1.25
16
+ Requires-Dist: loguru>=0.7
17
+ Requires-Dist: python-dotenv>=1.0
18
+ Requires-Dist: azure-storage-blob>=12.19
19
+ Requires-Dist: pyarrow>=15.0
20
+ Requires-Dist: requests>=2.32
21
+ Requires-Dist: pydantic>=2.7
22
+ Requires-Dist: scipy>=1.13
23
+ Requires-Dist: openpyxl
24
+ Provides-Extra: storage
25
+ Requires-Dist: azure-storage-blob>=12.19; extra == "storage"
26
+ Requires-Dist: pyarrow>=15.0; extra == "storage"
27
+ Provides-Extra: dataframe
28
+ Requires-Dist: pandas>=2.2; extra == "dataframe"
29
+ Provides-Extra: datareader
30
+ Requires-Dist: luxorasap[dataframe,storage]; extra == "datareader"
31
+ Requires-Dist: numpy>=1.25; extra == "datareader"
32
+ Requires-Dist: scipy>=1.13; extra == "datareader"
33
+ Provides-Extra: ingest
34
+ Requires-Dist: luxorasap[dataframe,storage]; extra == "ingest"
35
+ Requires-Dist: pandas>=2.2; extra == "ingest"
36
+ Provides-Extra: btgapi
37
+ Requires-Dist: requests>=2.32; extra == "btgapi"
38
+ Requires-Dist: pydantic>=2.7; extra == "btgapi"
39
+ Provides-Extra: dev
40
+ Requires-Dist: pytest>=8.2; extra == "dev"
41
+ Requires-Dist: requests-mock>=1.11; extra == "dev"
42
+ Requires-Dist: black>=24.4.0; extra == "dev"
43
+ Requires-Dist: isort>=5.13; extra == "dev"
44
+ Requires-Dist: bumpver>=2024.3; extra == "dev"
45
+ Requires-Dist: pre-commit>=3.7; extra == "dev"
46
+ Requires-Dist: build>=1.2; extra == "dev"
47
+
48
+ # 🧠 LuxorASAP
49
+
50
+ **Luxor Automatic System for Assets and Portfolios** é o toolbox oficial da Luxor para automação de pipelines de dados, integração com APIs financeiras e gerenciamento eficiente de dados patrimoniais no Azure.
51
+
52
+ Projetado para ser rápido, reutilizável e seguro, este pacote unifica a ingestão, leitura e transformação de dados utilizados nas análises e marcações do time de investimentos.
53
+
54
+ ---
55
+
56
+ ## 🚀 Funcionalidades
57
+
58
+ - 📡 Integração com a API de relatórios e boletas do BTG Pactual
59
+ - 🗂️ Carregamento padronizado de arquivos (Excel, Parquet, Blob)
60
+ - 💾 Escrita incremental e segura no ADLS (Azure Blob Storage)
61
+ - 📊 Análises de preço, retorno e risco com API de consulta (`LuxorQuery`)
62
+ - 🔗 Modularidade entre `btgapi`, `datareader`, `ingest`, `utils`
63
+
64
+ ---
65
+
66
+ ## 🧩 Estrutura do Projeto
67
+
68
+ ```
69
+ luxor-asap/
70
+ ├── src/luxorasap/
71
+ │ ├── btgapi/ # Integração com BTG Pactual
72
+ │ ├── datareader/ # Interface de leitura e análise de dados
73
+ │ ├── ingest/ # Carga de dados no ADLS
74
+ │ └── utils/ # Funções auxiliares (parquet, dataframe)
75
+ └── tests/ # Testes automatizados com Pytest
76
+ ```
77
+
78
+ ---
79
+
80
+ ## 📚 Documentação
81
+
82
+ A documentação externa completa está disponível em:
83
+
84
+ [![Docs](https://img.shields.io/badge/docs-online-blue)](https://luxor-group.github.io/luxorasap-docs/)
85
+
86
+ ---
87
+
88
+ ## 🔧 Requisitos
89
+
90
+ - Python 3.9+
91
+ - Azure Blob Storage configurado
92
+ - Variáveis de ambiente via `.env` (ou passadas manualmente):
93
+
94
+ ```bash
95
+ AZURE_STORAGE_CONNECTION_STRING=...
96
+ BTG_CLIENT_ID=...
97
+ BTG_CLIENT_SECRET=...
98
+ ```
99
+
100
+ ---
101
+
102
+ ## 📦 Instalação
103
+
104
+ Para instalar localmente:
105
+
106
+ ```bash
107
+ pip install -e .
108
+ ```
109
+
110
+ Ou via PyPI (futuramente):
111
+
112
+ ```bash
113
+ pip install luxor-asap
114
+ ```
115
+
116
+ ---
117
+
118
+ ## 🧪 Testes
119
+
120
+ ```bash
121
+ pytest -v
122
+ ```
123
+
124
+ ---
125
+
126
+ ## 📄 Licença
127
+
128
+ Projeto de uso interno do Luxor Group. Todos os direitos reservados.
@@ -0,0 +1,81 @@
1
+ # 🧠 LuxorASAP
2
+
3
+ **Luxor Automatic System for Assets and Portfolios** é o toolbox oficial da Luxor para automação de pipelines de dados, integração com APIs financeiras e gerenciamento eficiente de dados patrimoniais no Azure.
4
+
5
+ Projetado para ser rápido, reutilizável e seguro, este pacote unifica a ingestão, leitura e transformação de dados utilizados nas análises e marcações do time de investimentos.
6
+
7
+ ---
8
+
9
+ ## 🚀 Funcionalidades
10
+
11
+ - 📡 Integração com a API de relatórios e boletas do BTG Pactual
12
+ - 🗂️ Carregamento padronizado de arquivos (Excel, Parquet, Blob)
13
+ - 💾 Escrita incremental e segura no ADLS (Azure Blob Storage)
14
+ - 📊 Análises de preço, retorno e risco com API de consulta (`LuxorQuery`)
15
+ - 🔗 Modularidade entre `btgapi`, `datareader`, `ingest`, `utils`
16
+
17
+ ---
18
+
19
+ ## 🧩 Estrutura do Projeto
20
+
21
+ ```
22
+ luxor-asap/
23
+ ├── src/luxorasap/
24
+ │ ├── btgapi/ # Integração com BTG Pactual
25
+ │ ├── datareader/ # Interface de leitura e análise de dados
26
+ │ ├── ingest/ # Carga de dados no ADLS
27
+ │ └── utils/ # Funções auxiliares (parquet, dataframe)
28
+ └── tests/ # Testes automatizados com Pytest
29
+ ```
30
+
31
+ ---
32
+
33
+ ## 📚 Documentação
34
+
35
+ A documentação externa completa está disponível em:
36
+
37
+ [![Docs](https://img.shields.io/badge/docs-online-blue)](https://luxor-group.github.io/luxorasap-docs/)
38
+
39
+ ---
40
+
41
+ ## 🔧 Requisitos
42
+
43
+ - Python 3.9+
44
+ - Azure Blob Storage configurado
45
+ - Variáveis de ambiente via `.env` (ou passadas manualmente):
46
+
47
+ ```bash
48
+ AZURE_STORAGE_CONNECTION_STRING=...
49
+ BTG_CLIENT_ID=...
50
+ BTG_CLIENT_SECRET=...
51
+ ```
52
+
53
+ ---
54
+
55
+ ## 📦 Instalação
56
+
57
+ Para instalar localmente:
58
+
59
+ ```bash
60
+ pip install -e .
61
+ ```
62
+
63
+ Ou via PyPI (futuramente):
64
+
65
+ ```bash
66
+ pip install luxor-asap
67
+ ```
68
+
69
+ ---
70
+
71
+ ## 🧪 Testes
72
+
73
+ ```bash
74
+ pytest -v
75
+ ```
76
+
77
+ ---
78
+
79
+ ## 📄 Licença
80
+
81
+ Projeto de uso interno do Luxor Group. Todos os direitos reservados.
@@ -10,8 +10,8 @@ build-backend = "setuptools.build_meta"
10
10
  #############################
11
11
  [project]
12
12
  name = "luxorasap"
13
- version = "0.1.3"
14
- description = "Luxor’s unified toolbox for data ingestion, querying and analytics."
13
+ version = "0.1.4"
14
+ description = "Toolbox da Luxor para ingestão, análise e automação de dados financeiros."
15
15
  readme = "README.md"
16
16
  requires-python = ">=3.9"
17
17
  authors = [{ name = "Luxor Group", email = "backoffice@luxor.com.br" }]
@@ -56,6 +56,10 @@ dev = [
56
56
  "build>=1.2"
57
57
  ]
58
58
 
59
+ [project.urls]
60
+ Homepage = "https://github.com/luxor-group/luxor-asap"
61
+ Documentation = "https://luxor-group.github.io/luxorasap-docs/"
62
+
59
63
  #############################
60
64
  # Console scripts (opcional)
61
65
  #############################
@@ -74,7 +78,7 @@ exclude = ["tests*"]
74
78
  # bumpver (sem-ver)
75
79
  #############################
76
80
  [tool.bumpver]
77
- current_version = "0.1.3"
81
+ current_version = "0.1.4"
78
82
  version_pattern = "MAJOR.MINOR.PATCH"
79
83
 
80
84
  # regex explícito – obrigatório no bumpver 2024+
@@ -13,7 +13,7 @@ from types import ModuleType
13
13
  try:
14
14
  __version__: str = metadata.version(__name__)
15
15
  except metadata.PackageNotFoundError: # editable install
16
- __version__ = "0.1.3"
16
+ __version__ = "0.1.4"
17
17
 
18
18
  # ─── Lazy loader ─────────────────────────────────────────────────
19
19
  def __getattr__(name: str) -> ModuleType:
@@ -0,0 +1,128 @@
1
+ Metadata-Version: 2.4
2
+ Name: luxorasap
3
+ Version: 0.1.4
4
+ Summary: Toolbox da Luxor para ingestão, análise e automação de dados financeiros.
5
+ Author-email: Luxor Group <backoffice@luxor.com.br>
6
+ License: Proprietary – All rights reserved
7
+ Project-URL: Homepage, https://github.com/luxor-group/luxor-asap
8
+ Project-URL: Documentation, https://luxor-group.github.io/luxorasap-docs/
9
+ Classifier: Programming Language :: Python :: 3
10
+ Classifier: License :: Other/Proprietary License
11
+ Classifier: Operating System :: OS Independent
12
+ Requires-Python: >=3.9
13
+ Description-Content-Type: text/markdown
14
+ Requires-Dist: pandas>=2.2
15
+ Requires-Dist: numpy>=1.25
16
+ Requires-Dist: loguru>=0.7
17
+ Requires-Dist: python-dotenv>=1.0
18
+ Requires-Dist: azure-storage-blob>=12.19
19
+ Requires-Dist: pyarrow>=15.0
20
+ Requires-Dist: requests>=2.32
21
+ Requires-Dist: pydantic>=2.7
22
+ Requires-Dist: scipy>=1.13
23
+ Requires-Dist: openpyxl
24
+ Provides-Extra: storage
25
+ Requires-Dist: azure-storage-blob>=12.19; extra == "storage"
26
+ Requires-Dist: pyarrow>=15.0; extra == "storage"
27
+ Provides-Extra: dataframe
28
+ Requires-Dist: pandas>=2.2; extra == "dataframe"
29
+ Provides-Extra: datareader
30
+ Requires-Dist: luxorasap[dataframe,storage]; extra == "datareader"
31
+ Requires-Dist: numpy>=1.25; extra == "datareader"
32
+ Requires-Dist: scipy>=1.13; extra == "datareader"
33
+ Provides-Extra: ingest
34
+ Requires-Dist: luxorasap[dataframe,storage]; extra == "ingest"
35
+ Requires-Dist: pandas>=2.2; extra == "ingest"
36
+ Provides-Extra: btgapi
37
+ Requires-Dist: requests>=2.32; extra == "btgapi"
38
+ Requires-Dist: pydantic>=2.7; extra == "btgapi"
39
+ Provides-Extra: dev
40
+ Requires-Dist: pytest>=8.2; extra == "dev"
41
+ Requires-Dist: requests-mock>=1.11; extra == "dev"
42
+ Requires-Dist: black>=24.4.0; extra == "dev"
43
+ Requires-Dist: isort>=5.13; extra == "dev"
44
+ Requires-Dist: bumpver>=2024.3; extra == "dev"
45
+ Requires-Dist: pre-commit>=3.7; extra == "dev"
46
+ Requires-Dist: build>=1.2; extra == "dev"
47
+
48
+ # 🧠 LuxorASAP
49
+
50
+ **Luxor Automatic System for Assets and Portfolios** é o toolbox oficial da Luxor para automação de pipelines de dados, integração com APIs financeiras e gerenciamento eficiente de dados patrimoniais no Azure.
51
+
52
+ Projetado para ser rápido, reutilizável e seguro, este pacote unifica a ingestão, leitura e transformação de dados utilizados nas análises e marcações do time de investimentos.
53
+
54
+ ---
55
+
56
+ ## 🚀 Funcionalidades
57
+
58
+ - 📡 Integração com a API de relatórios e boletas do BTG Pactual
59
+ - 🗂️ Carregamento padronizado de arquivos (Excel, Parquet, Blob)
60
+ - 💾 Escrita incremental e segura no ADLS (Azure Blob Storage)
61
+ - 📊 Análises de preço, retorno e risco com API de consulta (`LuxorQuery`)
62
+ - 🔗 Modularidade entre `btgapi`, `datareader`, `ingest`, `utils`
63
+
64
+ ---
65
+
66
+ ## 🧩 Estrutura do Projeto
67
+
68
+ ```
69
+ luxor-asap/
70
+ ├── src/luxorasap/
71
+ │ ├── btgapi/ # Integração com BTG Pactual
72
+ │ ├── datareader/ # Interface de leitura e análise de dados
73
+ │ ├── ingest/ # Carga de dados no ADLS
74
+ │ └── utils/ # Funções auxiliares (parquet, dataframe)
75
+ └── tests/ # Testes automatizados com Pytest
76
+ ```
77
+
78
+ ---
79
+
80
+ ## 📚 Documentação
81
+
82
+ A documentação externa completa está disponível em:
83
+
84
+ [![Docs](https://img.shields.io/badge/docs-online-blue)](https://luxor-group.github.io/luxorasap-docs/)
85
+
86
+ ---
87
+
88
+ ## 🔧 Requisitos
89
+
90
+ - Python 3.9+
91
+ - Azure Blob Storage configurado
92
+ - Variáveis de ambiente via `.env` (ou passadas manualmente):
93
+
94
+ ```bash
95
+ AZURE_STORAGE_CONNECTION_STRING=...
96
+ BTG_CLIENT_ID=...
97
+ BTG_CLIENT_SECRET=...
98
+ ```
99
+
100
+ ---
101
+
102
+ ## 📦 Instalação
103
+
104
+ Para instalar localmente:
105
+
106
+ ```bash
107
+ pip install -e .
108
+ ```
109
+
110
+ Ou via PyPI (futuramente):
111
+
112
+ ```bash
113
+ pip install luxor-asap
114
+ ```
115
+
116
+ ---
117
+
118
+ ## 🧪 Testes
119
+
120
+ ```bash
121
+ pytest -v
122
+ ```
123
+
124
+ ---
125
+
126
+ ## 📄 Licença
127
+
128
+ Projeto de uso interno do Luxor Group. Todos os direitos reservados.
luxorasap-0.1.3/PKG-INFO DELETED
@@ -1,241 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: luxorasap
3
- Version: 0.1.3
4
- Summary: Luxor’s unified toolbox for data ingestion, querying and analytics.
5
- Author-email: Luxor Group <backoffice@luxor.com.br>
6
- License: Proprietary – All rights reserved
7
- Classifier: Programming Language :: Python :: 3
8
- Classifier: License :: Other/Proprietary License
9
- Classifier: Operating System :: OS Independent
10
- Requires-Python: >=3.9
11
- Description-Content-Type: text/markdown
12
- Requires-Dist: pandas>=2.2
13
- Requires-Dist: numpy>=1.25
14
- Requires-Dist: loguru>=0.7
15
- Requires-Dist: python-dotenv>=1.0
16
- Requires-Dist: azure-storage-blob>=12.19
17
- Requires-Dist: pyarrow>=15.0
18
- Requires-Dist: requests>=2.32
19
- Requires-Dist: pydantic>=2.7
20
- Requires-Dist: scipy>=1.13
21
- Requires-Dist: openpyxl
22
- Provides-Extra: storage
23
- Requires-Dist: azure-storage-blob>=12.19; extra == "storage"
24
- Requires-Dist: pyarrow>=15.0; extra == "storage"
25
- Provides-Extra: dataframe
26
- Requires-Dist: pandas>=2.2; extra == "dataframe"
27
- Provides-Extra: datareader
28
- Requires-Dist: luxorasap[dataframe,storage]; extra == "datareader"
29
- Requires-Dist: numpy>=1.25; extra == "datareader"
30
- Requires-Dist: scipy>=1.13; extra == "datareader"
31
- Provides-Extra: ingest
32
- Requires-Dist: luxorasap[dataframe,storage]; extra == "ingest"
33
- Requires-Dist: pandas>=2.2; extra == "ingest"
34
- Provides-Extra: btgapi
35
- Requires-Dist: requests>=2.32; extra == "btgapi"
36
- Requires-Dist: pydantic>=2.7; extra == "btgapi"
37
- Provides-Extra: dev
38
- Requires-Dist: pytest>=8.2; extra == "dev"
39
- Requires-Dist: requests-mock>=1.11; extra == "dev"
40
- Requires-Dist: black>=24.4.0; extra == "dev"
41
- Requires-Dist: isort>=5.13; extra == "dev"
42
- Requires-Dist: bumpver>=2024.3; extra == "dev"
43
- Requires-Dist: pre-commit>=3.7; extra == "dev"
44
- Requires-Dist: build>=1.2; extra == "dev"
45
-
46
- # 📚 Documentação LuxorASAP
47
-
48
- > Guia do desenvolvedor para os subpacotes **datareader**, **ingest**, **btgapi** e **utils**.
49
- >
50
- > • Instalação rápida • Visão arquitetural • APIs detalhadas • Exemplos de uso • Extras opcional
51
-
52
- ---
53
-
54
- ## Índice
55
-
56
- 1. [Visão Geral](#visao-geral)
57
- 2. [Instalação](#instalacao)
58
- 3. [utils](#utils)
59
- 4. [datareader](#datareader)
60
- 5. [ingest](#ingest)
61
- 6. [btgapi](#btgapi)
62
- 7. [Roadmap & Contribuições](#roadmap)
63
-
64
- ---
65
-
66
- ## 1. Visão Geral
67
-
68
- LuxorASAP é o *toolbox* unificado da Luxor para ingestão, consulta e automação de dados financeiros.
69
-
70
- | Subpacote | Função‑chave | Extras PyPI |
71
- | -------------- | --------------------------------------------------------------------- | ---------------------- |
72
- | **utils** | Utilidades puras (I/O ADLS, transformação de DataFrame, decorators) | `storage`, `dataframe` |
73
- | **datareader** | Consulta de preços/tabelas no data lake via `LuxorQuery` | `datareader` |
74
- | **ingest** | Carga de dados nova (parquet/zip/excel) em ADLS + loader legado | `ingest` |
75
- | **btgapi** | Wrapper autenticado para as APIs do BTG Pactual (relatórios & trades) | `btgapi` |
76
-
77
- ---
78
-
79
- ## 2. Instalação
80
-
81
- ```bash
82
- # core + leitura de dados
83
- pip install luxorasap[datareader]
84
-
85
- # tudo incluído (leitura, ingest, btg)
86
- pip install luxorasap[datareader,ingest,btgapi]
87
-
88
- # desenvolvimento
89
- pip install -e ".[dev]"
90
- ```
91
-
92
- Extras podem ser combinados à vontade (`luxorasap[storage]`, etc.).
93
-
94
- Configuração obrigatória do **ADLS**:
95
-
96
- ```bash
97
- export AZURE_STORAGE_CONNECTION_STRING="DefaultEndpointsProtocol=..."
98
- ```
99
-
100
- ---
101
-
102
- ## 3. utils
103
-
104
- Camada de utilidades **sem dependências internas**.
105
-
106
- ### 3.1 storage.BlobParquetClient
107
-
108
- ```python
109
- from luxorasap.utils.storage import BlobParquetClient
110
- client = BlobParquetClient(container="luxorasap")
111
-
112
- # write
113
- client.write_df(df, "bronze/parquet/mytable.parquet")
114
-
115
- # read (tuple -> DataFrame, success_flag)
116
- df, ok = client.read_df("bronze/parquet/mytable.parquet")
117
- ```
118
-
119
- ### 3.2 dataframe
120
-
121
- ```python
122
- from luxorasap.utils.dataframe import prep_for_save, persist_column_formatting, read_bytes
123
-
124
- df2 = prep_for_save(df, index=True, index_name="ID", normalize=True)
125
- ```
126
-
127
- ### 3.3 decorators & misc
128
-
129
- `with_retry`, `chunkify`, `timer`… ficam em *utils.helpers* (caso precise).
130
-
131
- ---
132
-
133
- ## 4. datareader
134
-
135
- ### 4.1 Visão rápida
136
-
137
- ```python
138
- from luxorasap.datareader import LuxorQuery
139
- lq = LuxorQuery()
140
-
141
- # DataFrame completo
142
- df = lq.get_table("assets")
143
-
144
- # Série de preços diária
145
- aapl = lq.get_prices("aapl us equity", start="2025-01-01", end="2025-03-31")
146
-
147
- # Preço pontual
148
- price = lq.get_price("aapl us equity", on="2025-03-31")
149
- ```
150
-
151
- *Caching*: `@lru_cache(maxsize=32)` evita hits repetidos ao Blob.
152
-
153
- ### 4.2 Métodos-chave
154
-
155
- | Método | Descrição |
156
- | ----------------------------------------------- | ----------------------------- |
157
- | `table_exists(name)` | checa metadados no ADLS |
158
- | `get_table(name)` | DataFrame completo (cached) |
159
- | `get_prices(asset, start, end, column="Price")` | `pd.Series` |
160
- | `get_price(asset, on)` | preço pontual (float ou None) |
161
-
162
- ---
163
-
164
- ## 5. ingest
165
-
166
- ### 5.1 ingest.cloud (novo)
167
-
168
- ```python
169
- from luxorasap.ingest import save_table, incremental_load
170
- from luxorasap.datareader import LuxorQuery
171
-
172
- save_table("trades", df)
173
-
174
- lq = LuxorQuery()
175
- incremental_load(lq, "prices_daily", df_new, increment_column="Date")
176
- ```
177
-
178
- ### 5.2 ingest.legacy\_local
179
-
180
- ```python
181
- from luxorasap.ingest import DataLoader # Deprecado – ainda funcional
182
- ```
183
-
184
- *Decoration*: ao importar `DataLoader` você verá `DeprecationWarning`.
185
-
186
- ---
187
-
188
- ## 6. btgapi
189
-
190
- ### 6.1 Autenticação
191
-
192
- ```python
193
- from luxorasap.btgapi import get_access_token
194
- TOKEN = get_access_token(test_env=True)
195
- ```
196
-
197
- ### 6.2 Relatórios – Portfolio & Investor Transactions
198
-
199
- ```python
200
- from luxorasap.btgapi.reports import (
201
- request_portfolio, await_report_ticket_result, process_zip_to_dfs,
202
- request_investors_transactions_report,
203
- )
204
-
205
- ticket = request_portfolio(TOKEN, "LUXOR FUND - CLASS A",
206
- start=dt.date(2025,1,1), end=dt.date(2025,1,31))
207
- zip_bytes = await_report_ticket_result(TOKEN, ticket)
208
- carteiras = process_zip_to_dfs(zip_bytes)
209
- ```
210
-
211
- ### 6.3 Trades offshore
212
-
213
- ```python
214
- from luxorasap.btgapi.trades import (
215
- submit_offshore_equity_trades,
216
- await_transaction_ticket_result,
217
- )
218
-
219
- ticket = submit_offshore_equity_trades(TOKEN, trades=[{...}], test_env=True)
220
- status_df = await_transaction_ticket_result(TOKEN, ticket, test_env=True)
221
- ```
222
-
223
- ### 6.4 Extras
224
-
225
- * `BTGApiError` — exceção customizada para qualquer falha.
226
-
227
- ---
228
-
229
- ## 7. Roadmap & Contribuições
230
-
231
- * **Remover** `ingest.legacy_local` quando não houver mais dependências.
232
- * Suporte a partições Parquet (delta‑like) na gravação.
233
- * Adicionar `pydantic` para validar contratos BTG.
234
- * Pull requests bem‑vindos! Rode `make lint && pytest -q` antes de enviar.
235
-
236
- ---
237
-
238
- ### Contatos
239
-
240
- * Dados / Back‑Office – [backoffice@luxor.com.br](mailto:backoffice@luxor.com.br)
241
- * Mantenedor principal – Sergio
luxorasap-0.1.3/README.md DELETED
@@ -1,196 +0,0 @@
1
- # 📚 Documentação LuxorASAP
2
-
3
- > Guia do desenvolvedor para os subpacotes **datareader**, **ingest**, **btgapi** e **utils**.
4
- >
5
- > • Instalação rápida • Visão arquitetural • APIs detalhadas • Exemplos de uso • Extras opcional
6
-
7
- ---
8
-
9
- ## Índice
10
-
11
- 1. [Visão Geral](#visao-geral)
12
- 2. [Instalação](#instalacao)
13
- 3. [utils](#utils)
14
- 4. [datareader](#datareader)
15
- 5. [ingest](#ingest)
16
- 6. [btgapi](#btgapi)
17
- 7. [Roadmap & Contribuições](#roadmap)
18
-
19
- ---
20
-
21
- ## 1. Visão Geral
22
-
23
- LuxorASAP é o *toolbox* unificado da Luxor para ingestão, consulta e automação de dados financeiros.
24
-
25
- | Subpacote | Função‑chave | Extras PyPI |
26
- | -------------- | --------------------------------------------------------------------- | ---------------------- |
27
- | **utils** | Utilidades puras (I/O ADLS, transformação de DataFrame, decorators) | `storage`, `dataframe` |
28
- | **datareader** | Consulta de preços/tabelas no data lake via `LuxorQuery` | `datareader` |
29
- | **ingest** | Carga de dados nova (parquet/zip/excel) em ADLS + loader legado | `ingest` |
30
- | **btgapi** | Wrapper autenticado para as APIs do BTG Pactual (relatórios & trades) | `btgapi` |
31
-
32
- ---
33
-
34
- ## 2. Instalação
35
-
36
- ```bash
37
- # core + leitura de dados
38
- pip install luxorasap[datareader]
39
-
40
- # tudo incluído (leitura, ingest, btg)
41
- pip install luxorasap[datareader,ingest,btgapi]
42
-
43
- # desenvolvimento
44
- pip install -e ".[dev]"
45
- ```
46
-
47
- Extras podem ser combinados à vontade (`luxorasap[storage]`, etc.).
48
-
49
- Configuração obrigatória do **ADLS**:
50
-
51
- ```bash
52
- export AZURE_STORAGE_CONNECTION_STRING="DefaultEndpointsProtocol=..."
53
- ```
54
-
55
- ---
56
-
57
- ## 3. utils
58
-
59
- Camada de utilidades **sem dependências internas**.
60
-
61
- ### 3.1 storage.BlobParquetClient
62
-
63
- ```python
64
- from luxorasap.utils.storage import BlobParquetClient
65
- client = BlobParquetClient(container="luxorasap")
66
-
67
- # write
68
- client.write_df(df, "bronze/parquet/mytable.parquet")
69
-
70
- # read (tuple -> DataFrame, success_flag)
71
- df, ok = client.read_df("bronze/parquet/mytable.parquet")
72
- ```
73
-
74
- ### 3.2 dataframe
75
-
76
- ```python
77
- from luxorasap.utils.dataframe import prep_for_save, persist_column_formatting, read_bytes
78
-
79
- df2 = prep_for_save(df, index=True, index_name="ID", normalize=True)
80
- ```
81
-
82
- ### 3.3 decorators & misc
83
-
84
- `with_retry`, `chunkify`, `timer`… ficam em *utils.helpers* (caso precise).
85
-
86
- ---
87
-
88
- ## 4. datareader
89
-
90
- ### 4.1 Visão rápida
91
-
92
- ```python
93
- from luxorasap.datareader import LuxorQuery
94
- lq = LuxorQuery()
95
-
96
- # DataFrame completo
97
- df = lq.get_table("assets")
98
-
99
- # Série de preços diária
100
- aapl = lq.get_prices("aapl us equity", start="2025-01-01", end="2025-03-31")
101
-
102
- # Preço pontual
103
- price = lq.get_price("aapl us equity", on="2025-03-31")
104
- ```
105
-
106
- *Caching*: `@lru_cache(maxsize=32)` evita hits repetidos ao Blob.
107
-
108
- ### 4.2 Métodos-chave
109
-
110
- | Método | Descrição |
111
- | ----------------------------------------------- | ----------------------------- |
112
- | `table_exists(name)` | checa metadados no ADLS |
113
- | `get_table(name)` | DataFrame completo (cached) |
114
- | `get_prices(asset, start, end, column="Price")` | `pd.Series` |
115
- | `get_price(asset, on)` | preço pontual (float ou None) |
116
-
117
- ---
118
-
119
- ## 5. ingest
120
-
121
- ### 5.1 ingest.cloud (novo)
122
-
123
- ```python
124
- from luxorasap.ingest import save_table, incremental_load
125
- from luxorasap.datareader import LuxorQuery
126
-
127
- save_table("trades", df)
128
-
129
- lq = LuxorQuery()
130
- incremental_load(lq, "prices_daily", df_new, increment_column="Date")
131
- ```
132
-
133
- ### 5.2 ingest.legacy\_local
134
-
135
- ```python
136
- from luxorasap.ingest import DataLoader # Deprecado – ainda funcional
137
- ```
138
-
139
- *Decoration*: ao importar `DataLoader` você verá `DeprecationWarning`.
140
-
141
- ---
142
-
143
- ## 6. btgapi
144
-
145
- ### 6.1 Autenticação
146
-
147
- ```python
148
- from luxorasap.btgapi import get_access_token
149
- TOKEN = get_access_token(test_env=True)
150
- ```
151
-
152
- ### 6.2 Relatórios – Portfolio & Investor Transactions
153
-
154
- ```python
155
- from luxorasap.btgapi.reports import (
156
- request_portfolio, await_report_ticket_result, process_zip_to_dfs,
157
- request_investors_transactions_report,
158
- )
159
-
160
- ticket = request_portfolio(TOKEN, "LUXOR FUND - CLASS A",
161
- start=dt.date(2025,1,1), end=dt.date(2025,1,31))
162
- zip_bytes = await_report_ticket_result(TOKEN, ticket)
163
- carteiras = process_zip_to_dfs(zip_bytes)
164
- ```
165
-
166
- ### 6.3 Trades offshore
167
-
168
- ```python
169
- from luxorasap.btgapi.trades import (
170
- submit_offshore_equity_trades,
171
- await_transaction_ticket_result,
172
- )
173
-
174
- ticket = submit_offshore_equity_trades(TOKEN, trades=[{...}], test_env=True)
175
- status_df = await_transaction_ticket_result(TOKEN, ticket, test_env=True)
176
- ```
177
-
178
- ### 6.4 Extras
179
-
180
- * `BTGApiError` — exceção customizada para qualquer falha.
181
-
182
- ---
183
-
184
- ## 7. Roadmap & Contribuições
185
-
186
- * **Remover** `ingest.legacy_local` quando não houver mais dependências.
187
- * Suporte a partições Parquet (delta‑like) na gravação.
188
- * Adicionar `pydantic` para validar contratos BTG.
189
- * Pull requests bem‑vindos! Rode `make lint && pytest -q` antes de enviar.
190
-
191
- ---
192
-
193
- ### Contatos
194
-
195
- * Dados / Back‑Office – [backoffice@luxor.com.br](mailto:backoffice@luxor.com.br)
196
- * Mantenedor principal – Sergio
@@ -1,241 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: luxorasap
3
- Version: 0.1.3
4
- Summary: Luxor’s unified toolbox for data ingestion, querying and analytics.
5
- Author-email: Luxor Group <backoffice@luxor.com.br>
6
- License: Proprietary – All rights reserved
7
- Classifier: Programming Language :: Python :: 3
8
- Classifier: License :: Other/Proprietary License
9
- Classifier: Operating System :: OS Independent
10
- Requires-Python: >=3.9
11
- Description-Content-Type: text/markdown
12
- Requires-Dist: pandas>=2.2
13
- Requires-Dist: numpy>=1.25
14
- Requires-Dist: loguru>=0.7
15
- Requires-Dist: python-dotenv>=1.0
16
- Requires-Dist: azure-storage-blob>=12.19
17
- Requires-Dist: pyarrow>=15.0
18
- Requires-Dist: requests>=2.32
19
- Requires-Dist: pydantic>=2.7
20
- Requires-Dist: scipy>=1.13
21
- Requires-Dist: openpyxl
22
- Provides-Extra: storage
23
- Requires-Dist: azure-storage-blob>=12.19; extra == "storage"
24
- Requires-Dist: pyarrow>=15.0; extra == "storage"
25
- Provides-Extra: dataframe
26
- Requires-Dist: pandas>=2.2; extra == "dataframe"
27
- Provides-Extra: datareader
28
- Requires-Dist: luxorasap[dataframe,storage]; extra == "datareader"
29
- Requires-Dist: numpy>=1.25; extra == "datareader"
30
- Requires-Dist: scipy>=1.13; extra == "datareader"
31
- Provides-Extra: ingest
32
- Requires-Dist: luxorasap[dataframe,storage]; extra == "ingest"
33
- Requires-Dist: pandas>=2.2; extra == "ingest"
34
- Provides-Extra: btgapi
35
- Requires-Dist: requests>=2.32; extra == "btgapi"
36
- Requires-Dist: pydantic>=2.7; extra == "btgapi"
37
- Provides-Extra: dev
38
- Requires-Dist: pytest>=8.2; extra == "dev"
39
- Requires-Dist: requests-mock>=1.11; extra == "dev"
40
- Requires-Dist: black>=24.4.0; extra == "dev"
41
- Requires-Dist: isort>=5.13; extra == "dev"
42
- Requires-Dist: bumpver>=2024.3; extra == "dev"
43
- Requires-Dist: pre-commit>=3.7; extra == "dev"
44
- Requires-Dist: build>=1.2; extra == "dev"
45
-
46
- # 📚 Documentação LuxorASAP
47
-
48
- > Guia do desenvolvedor para os subpacotes **datareader**, **ingest**, **btgapi** e **utils**.
49
- >
50
- > • Instalação rápida • Visão arquitetural • APIs detalhadas • Exemplos de uso • Extras opcional
51
-
52
- ---
53
-
54
- ## Índice
55
-
56
- 1. [Visão Geral](#visao-geral)
57
- 2. [Instalação](#instalacao)
58
- 3. [utils](#utils)
59
- 4. [datareader](#datareader)
60
- 5. [ingest](#ingest)
61
- 6. [btgapi](#btgapi)
62
- 7. [Roadmap & Contribuições](#roadmap)
63
-
64
- ---
65
-
66
- ## 1. Visão Geral
67
-
68
- LuxorASAP é o *toolbox* unificado da Luxor para ingestão, consulta e automação de dados financeiros.
69
-
70
- | Subpacote | Função‑chave | Extras PyPI |
71
- | -------------- | --------------------------------------------------------------------- | ---------------------- |
72
- | **utils** | Utilidades puras (I/O ADLS, transformação de DataFrame, decorators) | `storage`, `dataframe` |
73
- | **datareader** | Consulta de preços/tabelas no data lake via `LuxorQuery` | `datareader` |
74
- | **ingest** | Carga de dados nova (parquet/zip/excel) em ADLS + loader legado | `ingest` |
75
- | **btgapi** | Wrapper autenticado para as APIs do BTG Pactual (relatórios & trades) | `btgapi` |
76
-
77
- ---
78
-
79
- ## 2. Instalação
80
-
81
- ```bash
82
- # core + leitura de dados
83
- pip install luxorasap[datareader]
84
-
85
- # tudo incluído (leitura, ingest, btg)
86
- pip install luxorasap[datareader,ingest,btgapi]
87
-
88
- # desenvolvimento
89
- pip install -e ".[dev]"
90
- ```
91
-
92
- Extras podem ser combinados à vontade (`luxorasap[storage]`, etc.).
93
-
94
- Configuração obrigatória do **ADLS**:
95
-
96
- ```bash
97
- export AZURE_STORAGE_CONNECTION_STRING="DefaultEndpointsProtocol=..."
98
- ```
99
-
100
- ---
101
-
102
- ## 3. utils
103
-
104
- Camada de utilidades **sem dependências internas**.
105
-
106
- ### 3.1 storage.BlobParquetClient
107
-
108
- ```python
109
- from luxorasap.utils.storage import BlobParquetClient
110
- client = BlobParquetClient(container="luxorasap")
111
-
112
- # write
113
- client.write_df(df, "bronze/parquet/mytable.parquet")
114
-
115
- # read (tuple -> DataFrame, success_flag)
116
- df, ok = client.read_df("bronze/parquet/mytable.parquet")
117
- ```
118
-
119
- ### 3.2 dataframe
120
-
121
- ```python
122
- from luxorasap.utils.dataframe import prep_for_save, persist_column_formatting, read_bytes
123
-
124
- df2 = prep_for_save(df, index=True, index_name="ID", normalize=True)
125
- ```
126
-
127
- ### 3.3 decorators & misc
128
-
129
- `with_retry`, `chunkify`, `timer`… ficam em *utils.helpers* (caso precise).
130
-
131
- ---
132
-
133
- ## 4. datareader
134
-
135
- ### 4.1 Visão rápida
136
-
137
- ```python
138
- from luxorasap.datareader import LuxorQuery
139
- lq = LuxorQuery()
140
-
141
- # DataFrame completo
142
- df = lq.get_table("assets")
143
-
144
- # Série de preços diária
145
- aapl = lq.get_prices("aapl us equity", start="2025-01-01", end="2025-03-31")
146
-
147
- # Preço pontual
148
- price = lq.get_price("aapl us equity", on="2025-03-31")
149
- ```
150
-
151
- *Caching*: `@lru_cache(maxsize=32)` evita hits repetidos ao Blob.
152
-
153
- ### 4.2 Métodos-chave
154
-
155
- | Método | Descrição |
156
- | ----------------------------------------------- | ----------------------------- |
157
- | `table_exists(name)` | checa metadados no ADLS |
158
- | `get_table(name)` | DataFrame completo (cached) |
159
- | `get_prices(asset, start, end, column="Price")` | `pd.Series` |
160
- | `get_price(asset, on)` | preço pontual (float ou None) |
161
-
162
- ---
163
-
164
- ## 5. ingest
165
-
166
- ### 5.1 ingest.cloud (novo)
167
-
168
- ```python
169
- from luxorasap.ingest import save_table, incremental_load
170
- from luxorasap.datareader import LuxorQuery
171
-
172
- save_table("trades", df)
173
-
174
- lq = LuxorQuery()
175
- incremental_load(lq, "prices_daily", df_new, increment_column="Date")
176
- ```
177
-
178
- ### 5.2 ingest.legacy\_local
179
-
180
- ```python
181
- from luxorasap.ingest import DataLoader # Deprecado – ainda funcional
182
- ```
183
-
184
- *Decoration*: ao importar `DataLoader` você verá `DeprecationWarning`.
185
-
186
- ---
187
-
188
- ## 6. btgapi
189
-
190
- ### 6.1 Autenticação
191
-
192
- ```python
193
- from luxorasap.btgapi import get_access_token
194
- TOKEN = get_access_token(test_env=True)
195
- ```
196
-
197
- ### 6.2 Relatórios – Portfolio & Investor Transactions
198
-
199
- ```python
200
- from luxorasap.btgapi.reports import (
201
- request_portfolio, await_report_ticket_result, process_zip_to_dfs,
202
- request_investors_transactions_report,
203
- )
204
-
205
- ticket = request_portfolio(TOKEN, "LUXOR FUND - CLASS A",
206
- start=dt.date(2025,1,1), end=dt.date(2025,1,31))
207
- zip_bytes = await_report_ticket_result(TOKEN, ticket)
208
- carteiras = process_zip_to_dfs(zip_bytes)
209
- ```
210
-
211
- ### 6.3 Trades offshore
212
-
213
- ```python
214
- from luxorasap.btgapi.trades import (
215
- submit_offshore_equity_trades,
216
- await_transaction_ticket_result,
217
- )
218
-
219
- ticket = submit_offshore_equity_trades(TOKEN, trades=[{...}], test_env=True)
220
- status_df = await_transaction_ticket_result(TOKEN, ticket, test_env=True)
221
- ```
222
-
223
- ### 6.4 Extras
224
-
225
- * `BTGApiError` — exceção customizada para qualquer falha.
226
-
227
- ---
228
-
229
- ## 7. Roadmap & Contribuições
230
-
231
- * **Remover** `ingest.legacy_local` quando não houver mais dependências.
232
- * Suporte a partições Parquet (delta‑like) na gravação.
233
- * Adicionar `pydantic` para validar contratos BTG.
234
- * Pull requests bem‑vindos! Rode `make lint && pytest -q` antes de enviar.
235
-
236
- ---
237
-
238
- ### Contatos
239
-
240
- * Dados / Back‑Office – [backoffice@luxor.com.br](mailto:backoffice@luxor.com.br)
241
- * Mantenedor principal – Sergio
File without changes