luxorasap 0.1.6__py3-none-any.whl → 0.1.7__py3-none-any.whl

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.
luxorasap/__init__.py CHANGED
@@ -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.6"
16
+ __version__ = "0.1.7"
17
17
 
18
18
  # ─── Lazy loader ─────────────────────────────────────────────────
19
19
  def __getattr__(name: str) -> ModuleType:
@@ -96,8 +96,9 @@ def check_report_ticket(token: str, ticket: str, *, page: Optional[int] = None)
96
96
 
97
97
  result = payload.get("result")
98
98
 
99
- if result == "Processando" or result == 'Aguardando processamento':
100
- raise BTGApiError("Processando")
99
+ if isinstance(result, str):
100
+ if (result.lower() in "processando") or ('process' in result.lower()):
101
+ raise BTGApiError("Processando")
101
102
 
102
103
  # 3. Quando pronto, result é JSON string com UrlDownload
103
104
  if isinstance(result, str):
@@ -117,7 +118,7 @@ def check_report_ticket(token: str, ticket: str, *, page: Optional[int] = None)
117
118
  except Exception as exc:
118
119
  raise BTGApiError(f"Falha ao converter resultado em DataFrame: {exc}") from exc
119
120
 
120
- raise BTGApiError("Formato de resposta desconhecido")
121
+ raise BTGApiError(f"Formato de resposta desconhecido. Resultado:\n{result}")
121
122
 
122
123
 
123
124
  def await_report_ticket_result(token: str, ticket: str, *, attempts: int = 10,
@@ -1,6 +1,7 @@
1
1
  """Camada moderna de ingestão: grava / incrementa tabelas em ADLS (Parquet)."""
2
2
 
3
3
  import pandas as pd
4
+ import datetime as dt
4
5
 
5
6
  from luxorasap.utils.storage import BlobParquetClient
6
7
  from luxorasap.utils.dataframe import prep_for_save
@@ -24,6 +25,9 @@ def save_table(
24
25
  ):
25
26
  """Salva DataFrame como Parquet em ADLS (sobrescrevendo)."""
26
27
 
28
+ if 'Last_Updated' not in df.columns:
29
+ df['Last_Updated'] = dt.datetime.now()
30
+
27
31
  if override == False:
28
32
  lq = LuxorQuery()
29
33
  if lq.table_exists(table_name):
@@ -43,8 +47,11 @@ def incremental_load(
43
47
  index_name: str = "index",
44
48
  normalize_columns: bool = True,
45
49
  directory: str = "enriched/parquet",
50
+ override = False
46
51
  ):
47
52
  """Concatena novos dados aos existentes, cortando duplicados pela data."""
53
+ df["Last_Updated"] = dt.datetime.now()
54
+
48
55
  if lq.table_exists(table_name):
49
56
  prev = lq.get_table(table_name)
50
57
  cutoff = df[increment_column].max()
@@ -58,4 +65,5 @@ def incremental_load(
58
65
  index_name=index_name,
59
66
  normalize_columns=normalize_columns,
60
67
  directory=directory,
68
+ override=override
61
69
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: luxorasap
3
- Version: 0.1.6
3
+ Version: 0.1.7
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
@@ -1,12 +1,12 @@
1
- luxorasap/__init__.py,sha256=ZP_jVndNXvoVOkOTxIGqzAh9zS0P9stvtH9m7k7yyII,1355
1
+ luxorasap/__init__.py,sha256=q3v1V_kriNW3mfIp3alKKJwxUVghyL_QlPOeFa_jM50,1355
2
2
  luxorasap/btgapi/__init__.py,sha256=QUlfb5oiBY6K1Q5x4-a-x2wECe1At5wc2962I5odOJk,620
3
3
  luxorasap/btgapi/auth.py,sha256=2TLKZdVlJgfSItOvB7GoPnH6gndkWWqSIyE4VDSYRgo,1873
4
- luxorasap/btgapi/reports.py,sha256=UEk5QAl4cS6vdxXyliyg-weT0C1mILE1bqilPRDuHPE,7975
4
+ luxorasap/btgapi/reports.py,sha256=_k-hV1odaoXUrKjR4DK_BNjHfarDHrsCeZ4aT4qqWT0,8041
5
5
  luxorasap/btgapi/trades.py,sha256=1Cn1RMjaHO073YHJFeN2XRxYElQH7A98GIfUVy0VmSg,5987
6
6
  luxorasap/datareader/__init__.py,sha256=41RAvbrQ4R6oj67S32CrKqolx0CJ2W8cbOF6g5Cqm2g,120
7
7
  luxorasap/datareader/core.py,sha256=LpXe5g4lZpfEqaz_gjjHizVA-vPEjBi5yJKg_7K0Nkw,153205
8
8
  luxorasap/ingest/__init__.py,sha256=XhxDTN2ar-u6UCPhnxNU_to-nWiit-SpQ6cA_N9eMSs,795
9
- luxorasap/ingest/cloud/__init__.py,sha256=lbb3GweA8m0mQuH64HCKwO5FLwih4orU7i9KNhWWAkk,1867
9
+ luxorasap/ingest/cloud/__init__.py,sha256=By5jGxYYPJzJSqsDIQuWfaGrX8q7ShlW6IPpzWkNp_0,2077
10
10
  luxorasap/ingest/legacy_local/dataloader.py,sha256=zKPhuiBSFwkuWN6d8g2s60KkbVk1R_1cGMCtQM9j-0c,11908
11
11
  luxorasap/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  luxorasap/utils/dataframe/__init__.py,sha256=dU_RwTTOi6F3mlhM-0MYWM_qexBN9BmmKc_yrDE1Lwc,207
@@ -14,8 +14,8 @@ luxorasap/utils/dataframe/reader.py,sha256=Vzjdw-AeS1lnWEHQ8RZNh0kK93NWTp0NWVi_B
14
14
  luxorasap/utils/dataframe/transforms.py,sha256=Bm_cv9L9923QIXH82Fa_M4pM94f2AJRPu62Vv_i7tto,1684
15
15
  luxorasap/utils/storage/__init__.py,sha256=U3XRq94yzRp3kgBSUcRzs2tQgJ4o8h8a1ZzwiscA5XM,67
16
16
  luxorasap/utils/storage/blob.py,sha256=pcEixGxwXM9y5iPPpkX__ySWq0milghJGketYZlRL-0,3171
17
- luxorasap-0.1.6.dist-info/METADATA,sha256=kGyb8jq60Y9rH6XN_5nqNt0DR6CF5Nwrd6Mzng9sV00,3803
18
- luxorasap-0.1.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
19
- luxorasap-0.1.6.dist-info/entry_points.txt,sha256=XFh-dOwUhlya9DmGvgookMI0ezyUJjcOvTIHDEYS44g,52
20
- luxorasap-0.1.6.dist-info/top_level.txt,sha256=9YOL6bUIpzY06XFBRkUW1e4rgB32Ds91fQPGwUEjxzU,10
21
- luxorasap-0.1.6.dist-info/RECORD,,
17
+ luxorasap-0.1.7.dist-info/METADATA,sha256=iITo50T4TqrOGUBfTnkA6QtKXkmpJjKB5cIvn_zFicc,3803
18
+ luxorasap-0.1.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
19
+ luxorasap-0.1.7.dist-info/entry_points.txt,sha256=XFh-dOwUhlya9DmGvgookMI0ezyUJjcOvTIHDEYS44g,52
20
+ luxorasap-0.1.7.dist-info/top_level.txt,sha256=9YOL6bUIpzY06XFBRkUW1e4rgB32Ds91fQPGwUEjxzU,10
21
+ luxorasap-0.1.7.dist-info/RECORD,,