luxorasap 0.2.14__py3-none-any.whl → 0.2.16__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 +1 -1
- luxorasap/ingest/cloud/__init__.py +29 -22
- {luxorasap-0.2.14.dist-info → luxorasap-0.2.16.dist-info}/METADATA +1 -1
- {luxorasap-0.2.14.dist-info → luxorasap-0.2.16.dist-info}/RECORD +7 -7
- {luxorasap-0.2.14.dist-info → luxorasap-0.2.16.dist-info}/WHEEL +0 -0
- {luxorasap-0.2.14.dist-info → luxorasap-0.2.16.dist-info}/entry_points.txt +0 -0
- {luxorasap-0.2.14.dist-info → luxorasap-0.2.16.dist-info}/top_level.txt +0 -0
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.2.
|
|
16
|
+
__version__ = "0.2.16"
|
|
17
17
|
|
|
18
18
|
# ─── Lazy loader ─────────────────────────────────────────────────
|
|
19
19
|
def __getattr__(name: str) -> ModuleType:
|
|
@@ -14,8 +14,6 @@ from luxorasap.utils.storage import BlobChangeWatcher
|
|
|
14
14
|
__all__ = ["save_table", "incremental_load"]
|
|
15
15
|
|
|
16
16
|
_client = BlobParquetClient() # instância única para o módulo
|
|
17
|
-
_client_excel = None
|
|
18
|
-
_client_pickle = None
|
|
19
17
|
|
|
20
18
|
|
|
21
19
|
# ────────────────────────────────────────────────────────────────
|
|
@@ -30,23 +28,35 @@ def save_table(
|
|
|
30
28
|
override=False,
|
|
31
29
|
format='parquet'
|
|
32
30
|
):
|
|
33
|
-
"""Salva DataFrame como Parquet
|
|
31
|
+
"""Salva DataFrame como arquivo Parquet no ADLS.
|
|
32
|
+
Args:
|
|
33
|
+
table_name (str): Nome da tabela (será o nome do arquivo).
|
|
34
|
+
df (pd.DataFrame): DataFrame a ser salvo.
|
|
35
|
+
index (bool, optional): Se True, salva o índice do DataFrame. Defaults to False.
|
|
36
|
+
index_name (str, optional): Nome da coluna de índice, se `index` for True. Defaults to "index".
|
|
37
|
+
normalize_columns (bool, optional): Se True, normaliza nomes de colunas. Defaults to True.
|
|
38
|
+
directory (str, optional): Subdiretório no container 'luxorasap'. Defaults to "enriched/parquet".
|
|
39
|
+
override (bool, optional): Se True, sobrescreve a tabela existente. Defaults to False.
|
|
40
|
+
format (str): Formato de saída ('parquet', 'excel', 'excel_multiple_sheets', 'pickle'). Defaults to 'parquet'.
|
|
41
|
+
"""
|
|
34
42
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
+
# Se df for um pandas dataframe
|
|
44
|
+
if isinstance(df, pd.DataFrame):
|
|
45
|
+
if 'Last_Updated' not in df.columns:
|
|
46
|
+
df['Last_Updated'] = dt.datetime.now()
|
|
47
|
+
else:
|
|
48
|
+
# usando numpy, vamos substituir NaN ou 'nan' pela data e hora de agora
|
|
49
|
+
df["Last_Updated"] = np.where(((df["Last_Updated"].isna()) | (df["Last_Updated"] == 'nan')),
|
|
50
|
+
dt.datetime.now(),
|
|
51
|
+
df["Last_Updated"]
|
|
52
|
+
)
|
|
43
53
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
54
|
+
if override == False:
|
|
55
|
+
lq = LuxorQuery()
|
|
56
|
+
if lq.table_exists(table_name):
|
|
57
|
+
return
|
|
48
58
|
|
|
49
|
-
|
|
59
|
+
df = prep_for_save(df, index=index, index_name=index_name, normalize=normalize_columns)
|
|
50
60
|
|
|
51
61
|
if format == 'parquet':
|
|
52
62
|
#_client.write_df(df.astype(str), f"{directory}/{table_name}.parquet")
|
|
@@ -54,17 +64,14 @@ def save_table(
|
|
|
54
64
|
_client.write_df(df, f"{directory}/{table_name}.parquet")
|
|
55
65
|
|
|
56
66
|
elif format == 'excel':
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
_client_excel = BlobExcelClient()
|
|
67
|
+
|
|
68
|
+
_client_excel = BlobExcelClient()
|
|
60
69
|
if index:
|
|
61
70
|
df = df.reset_index().rename(columns={"index": index_name})
|
|
62
71
|
_client_excel.write_excel(df, f"{directory}/{table_name}.xlsx")
|
|
63
72
|
|
|
64
73
|
elif format == 'excel_multiple_sheets':
|
|
65
|
-
|
|
66
|
-
if _client_excel is None:
|
|
67
|
-
_client_excel = BlobExcelClient()
|
|
74
|
+
_client_excel = BlobExcelClient()
|
|
68
75
|
# df neste caso é um dicionário de DataFrames
|
|
69
76
|
_client_excel.write_excel_multiple_sheets(df, f"{directory}/{table_name}.xlsx")
|
|
70
77
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
luxorasap/__init__.py,sha256=
|
|
1
|
+
luxorasap/__init__.py,sha256=viygQ8G5ls_PD8ys7fvrl5X9cqClbXquBqtegeDJLdA,1356
|
|
2
2
|
luxorasap/btgapi/__init__.py,sha256=QUlfb5oiBY6K1Q5x4-a-x2wECe1At5wc2962I5odOJk,620
|
|
3
3
|
luxorasap/btgapi/auth.py,sha256=PvyCtbEyBO2B1CIeAlNXWugKW1OgiKfPcVzS6K5FBnQ,1872
|
|
4
4
|
luxorasap/btgapi/reports.py,sha256=ZVEMLoJPXc0r3XjPJPMsKQN0zZd1Npd7umNpAj1bncs,8040
|
|
@@ -6,7 +6,7 @@ luxorasap/btgapi/trades.py,sha256=956HZ9BvN9C_VQvKTyBLN0x6ZygwVqBZN11F7OnNbDI,59
|
|
|
6
6
|
luxorasap/datareader/__init__.py,sha256=41RAvbrQ4R6oj67S32CrKqolx0CJ2W8cbOF6g5Cqm2g,120
|
|
7
7
|
luxorasap/datareader/core.py,sha256=D7nNdKiu5VAii4xWnoqO1PR0qaYi3YEfKyxhkVGZ1j8,158784
|
|
8
8
|
luxorasap/ingest/__init__.py,sha256=gHkw8FU8TuRL5tfHkACxwsLHwLYX8SgX9xHkB8uTjww,831
|
|
9
|
-
luxorasap/ingest/cloud/__init__.py,sha256=
|
|
9
|
+
luxorasap/ingest/cloud/__init__.py,sha256=Yt0vExKo_pb0FZsKrVB0h_4UKx5reL_sNu-Zrlqv12I,8240
|
|
10
10
|
luxorasap/ingest/legacy_local/dataloader.py,sha256=DF3CvojDAi0itVDZPsQbmpl5pqMTNwOOpxTz4Ju8mho,12419
|
|
11
11
|
luxorasap/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
12
|
luxorasap/utils/dataframe/__init__.py,sha256=heKpmq58FmX35syzzwrHqlOWKYBkH2Z1jyqaQ_Vg-00,265
|
|
@@ -17,8 +17,8 @@ luxorasap/utils/storage/blob.py,sha256=28bsUbEUjg_LapDZ4P3kWkxHDQGNXv_Jik49RfXbw
|
|
|
17
17
|
luxorasap/utils/storage/change_tracker.py,sha256=HkeKc62UyD2BtP2gqafnJHZSBvYreH_7SQI1CYhn3Us,11709
|
|
18
18
|
luxorasap/utils/tools/__init__.py,sha256=dvK7Z4xnNQAuEiObVN7qjeLWAvP49JeFn2Oq9GdgmXs,76
|
|
19
19
|
luxorasap/utils/tools/excel.py,sha256=SfeTcbJWsWq3uKruwKSjJ4aWgMovITzlNXjP2bhdMjI,1246
|
|
20
|
-
luxorasap-0.2.
|
|
21
|
-
luxorasap-0.2.
|
|
22
|
-
luxorasap-0.2.
|
|
23
|
-
luxorasap-0.2.
|
|
24
|
-
luxorasap-0.2.
|
|
20
|
+
luxorasap-0.2.16.dist-info/METADATA,sha256=n7GVG4oUz2eHL7nQDbHFN_J6fW723gKtdZtJMkv1yeg,3804
|
|
21
|
+
luxorasap-0.2.16.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
22
|
+
luxorasap-0.2.16.dist-info/entry_points.txt,sha256=XFh-dOwUhlya9DmGvgookMI0ezyUJjcOvTIHDEYS44g,52
|
|
23
|
+
luxorasap-0.2.16.dist-info/top_level.txt,sha256=9YOL6bUIpzY06XFBRkUW1e4rgB32Ds91fQPGwUEjxzU,10
|
|
24
|
+
luxorasap-0.2.16.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|