luxorasap 0.1.30__tar.gz → 0.1.32__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 (36) hide show
  1. {luxorasap-0.1.30 → luxorasap-0.1.32}/PKG-INFO +1 -1
  2. {luxorasap-0.1.30 → luxorasap-0.1.32}/pyproject.toml +2 -2
  3. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap/__init__.py +1 -1
  4. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap/ingest/legacy_local/dataloader.py +13 -5
  5. luxorasap-0.1.32/src/luxorasap/utils/tools/__init__.py +2 -0
  6. luxorasap-0.1.32/src/luxorasap/utils/tools/excel.py +38 -0
  7. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap.egg-info/PKG-INFO +1 -1
  8. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap.egg-info/SOURCES.txt +2 -0
  9. {luxorasap-0.1.30 → luxorasap-0.1.32}/README.md +0 -0
  10. {luxorasap-0.1.30 → luxorasap-0.1.32}/setup.cfg +0 -0
  11. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap/btgapi/__init__.py +0 -0
  12. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap/btgapi/auth.py +0 -0
  13. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap/btgapi/reports.py +0 -0
  14. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap/btgapi/trades.py +0 -0
  15. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap/datareader/__init__.py +0 -0
  16. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap/datareader/core.py +0 -0
  17. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap/ingest/__init__.py +0 -0
  18. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap/ingest/cloud/__init__.py +0 -0
  19. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap/utils/__init__.py +0 -0
  20. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap/utils/dataframe/__init__.py +0 -0
  21. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap/utils/dataframe/reader.py +0 -0
  22. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap/utils/dataframe/transforms.py +0 -0
  23. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap/utils/storage/__init__.py +0 -0
  24. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap/utils/storage/blob.py +0 -0
  25. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap.egg-info/dependency_links.txt +0 -0
  26. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap.egg-info/entry_points.txt +0 -0
  27. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap.egg-info/requires.txt +0 -0
  28. {luxorasap-0.1.30 → luxorasap-0.1.32}/src/luxorasap.egg-info/top_level.txt +0 -0
  29. {luxorasap-0.1.30 → luxorasap-0.1.32}/tests/test_btgapi_auth.py +0 -0
  30. {luxorasap-0.1.30 → luxorasap-0.1.32}/tests/test_btgapi_reports.py +0 -0
  31. {luxorasap-0.1.30 → luxorasap-0.1.32}/tests/test_btgapi_trades.py +0 -0
  32. {luxorasap-0.1.30 → luxorasap-0.1.32}/tests/test_datareader.py +0 -0
  33. {luxorasap-0.1.30 → luxorasap-0.1.32}/tests/test_ingest_cloud.py +0 -0
  34. {luxorasap-0.1.30 → luxorasap-0.1.32}/tests/test_ingest_legacy_local.py +0 -0
  35. {luxorasap-0.1.30 → luxorasap-0.1.32}/tests/test_utils_dataframe.py +0 -0
  36. {luxorasap-0.1.30 → luxorasap-0.1.32}/tests/test_utils_storage.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: luxorasap
3
- Version: 0.1.30
3
+ Version: 0.1.32
4
4
  Summary: Toolbox da Luxor para ingestão, análise e automação de dados financeiros.
5
5
  Author-email: Luxor Group <backoffice@luxor.com.br>
6
6
  License: Proprietary – All rights reserved
@@ -10,7 +10,7 @@ build-backend = "setuptools.build_meta"
10
10
  #############################
11
11
  [project]
12
12
  name = "luxorasap"
13
- version = "0.1.30"
13
+ version = "0.1.32"
14
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"
@@ -78,7 +78,7 @@ exclude = ["tests*"]
78
78
  # bumpver (sem-ver)
79
79
  #############################
80
80
  [tool.bumpver]
81
- current_version = "0.1.30"
81
+ current_version = "0.1.32"
82
82
  version_pattern = "MAJOR.MINOR.PATCH"
83
83
 
84
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.30"
16
+ __version__ = "0.1.32"
17
17
 
18
18
  # ─── Lazy loader ─────────────────────────────────────────────────
19
19
  def __getattr__(name: str) -> ModuleType:
@@ -15,6 +15,8 @@ load_dotenv()
15
15
 
16
16
  from luxorasap.datareader import LuxorQuery
17
17
  from luxorasap.utils.dataframe import transforms
18
+ from luxorasap.ingest import save_table
19
+ from luxorasap.utils.tools.excel import close_excel_worksheet
18
20
 
19
21
  import warnings
20
22
  warnings.warn(
@@ -47,7 +49,7 @@ class DataLoader:
47
49
 
48
50
 
49
51
  def add_file_tracker(self, tracked_file_path, filetype="excel", sheet_names={},
50
- excel_size_limit = None,index=False, index_name="index",normalize_columns=False):
52
+ excel_size_limit = None,index=False, index_name="index", normalize_columns=False):
51
53
  """ Adiciona arquivo na lista para checar por alteracao
52
54
  Args:
53
55
  tracked_file_path (pathlib.Path): caminho completo ate o arquivo,
@@ -133,8 +135,11 @@ class DataLoader:
133
135
  except PermissionError:
134
136
 
135
137
  logger.error(f"Erro ao tentar ler arquivo '{tracked_file_path}.\nTentativa {t_counter} de {trials};'.\nSe estiver aberto feche.")
136
- time.sleep(10)
138
+
137
139
  t_counter += 1
140
+ if trials - t_counter == 1:
141
+ close_excel_worksheet(tracked_file_path.name, save=True)
142
+ time.sleep(10)
138
143
 
139
144
  for sheet_name, table_data in tables.items():
140
145
 
@@ -143,9 +148,12 @@ class DataLoader:
143
148
  if table_name == "trades":
144
149
  table_data["ID"] = table_data.index
145
150
 
146
- self.__export_table(table_name, table_data, index=file_data["index"], index_name=file_data["index_name"],
147
- normalize_columns=file_data["normalize_columns"], export_to_blob=export_to_blob,
148
- blob_directory=blob_directory)
151
+ #self.__export_table(table_name, table_data, index=file_data["index"], index_name=file_data["index_name"],
152
+ # normalize_columns=file_data["normalize_columns"], export_to_blob=export_to_blob,
153
+ # blob_directory=blob_directory)
154
+ save_table(table_name, table_data, index=file_data["index"], index_name=file_data["index_name"],
155
+ normalize_columns=file_data["normalize_columns"], directory=blob_directory)
156
+
149
157
  self.tracked_files[tracked_file_path]["last_mtime"] = file_last_update
150
158
 
151
159
 
@@ -0,0 +1,2 @@
1
+ from .excel import close_excel_worksheet
2
+ __all__ = ["close_excel_worksheet"]
@@ -0,0 +1,38 @@
1
+
2
+ import platform
3
+
4
+ try:
5
+ if platform.system() == "Windows":
6
+ import win32com.client as win32 # type: ignore
7
+ else:
8
+ win32 = None # type: ignore
9
+ except Exception:
10
+ win32 = None # type: ignore
11
+
12
+
13
+ def close_excel_worksheet(filename, save=True):
14
+ """
15
+ Fecha um arquivo específico do Excel no Windows.
16
+ :param arquivo: Nome do arquivo aberto no Excel (ex: 'Planilha1.xlsx')
17
+ :param salvar: Se True, salva as alterações antes de fechar
18
+ """
19
+
20
+ if platform.system() != "Windows" or win32 is None:
21
+ # Em Linux/WSL/macOS não faz nada e não quebra
22
+ print("close_excel_worksheet: ignorado (requer Windows/pywin32).")
23
+ return False
24
+
25
+ try:
26
+ excel = win32com.client.Dispatch("Excel.Application")
27
+ for wb in excel.Workbooks:
28
+ if wb.Name.lower() == filename.lower(): # compara ignorando maiúsc/minúsc
29
+ if save:
30
+ wb.Close(SaveChanges=1) # 1 = salvar alterações
31
+ print(f"O arquivo {filename} foi salvo e fechado com sucesso no Windows.")
32
+ else:
33
+ wb.Close(SaveChanges=0) # 0 = fechar sem salvar
34
+ print(f"O arquivo {filename} foi fechado sem salvar no Windows.")
35
+ return
36
+ print(f"O arquivo {filename} não estava aberto no Excel.")
37
+ except Exception as e:
38
+ print(f"Erro ao tentar fechar {filename} no Windows: {e}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: luxorasap
3
- Version: 0.1.30
3
+ Version: 0.1.32
4
4
  Summary: Toolbox da Luxor para ingestão, análise e automação de dados financeiros.
5
5
  Author-email: Luxor Group <backoffice@luxor.com.br>
6
6
  License: Proprietary – All rights reserved
@@ -22,6 +22,8 @@ src/luxorasap/utils/dataframe/reader.py
22
22
  src/luxorasap/utils/dataframe/transforms.py
23
23
  src/luxorasap/utils/storage/__init__.py
24
24
  src/luxorasap/utils/storage/blob.py
25
+ src/luxorasap/utils/tools/__init__.py
26
+ src/luxorasap/utils/tools/excel.py
25
27
  tests/test_btgapi_auth.py
26
28
  tests/test_btgapi_reports.py
27
29
  tests/test_btgapi_trades.py
File without changes
File without changes