luxorasap 0.1.37__py3-none-any.whl → 0.1.38__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/utils/storage/__init__.py +2 -2
- luxorasap/utils/storage/blob.py +29 -1
- {luxorasap-0.1.37.dist-info → luxorasap-0.1.38.dist-info}/METADATA +1 -1
- {luxorasap-0.1.37.dist-info → luxorasap-0.1.38.dist-info}/RECORD +8 -8
- {luxorasap-0.1.37.dist-info → luxorasap-0.1.38.dist-info}/WHEEL +0 -0
- {luxorasap-0.1.37.dist-info → luxorasap-0.1.38.dist-info}/entry_points.txt +0 -0
- {luxorasap-0.1.37.dist-info → luxorasap-0.1.38.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.1.
|
|
16
|
+
__version__ = "0.1.38"
|
|
17
17
|
|
|
18
18
|
# ─── Lazy loader ─────────────────────────────────────────────────
|
|
19
19
|
def __getattr__(name: str) -> ModuleType:
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
from .blob import BlobParquetClient
|
|
2
|
-
__all__ = ["BlobParquetClient"]
|
|
1
|
+
from .blob import BlobParquetClient, BlobPickleClient
|
|
2
|
+
__all__ = ["BlobParquetClient", "BlobPickleClient"]
|
luxorasap/utils/storage/blob.py
CHANGED
|
@@ -4,7 +4,7 @@ from datetime import timezone
|
|
|
4
4
|
import pandas as pd
|
|
5
5
|
import pyarrow as pa, pyarrow.parquet as pq
|
|
6
6
|
from azure.storage.blob import BlobServiceClient
|
|
7
|
-
import
|
|
7
|
+
import pickle
|
|
8
8
|
|
|
9
9
|
from ..dataframe import read_bytes
|
|
10
10
|
|
|
@@ -93,4 +93,32 @@ class BlobParquetClient:
|
|
|
93
93
|
def _blob(self, path: str):
|
|
94
94
|
path = str(PurePosixPath(path))
|
|
95
95
|
return self._svc.get_blob_client(self._container, path)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
class BlobPickleClient:
|
|
99
|
+
def __init__(self, *, adls_connection_string: str = None, container: str = "luxorasap"):
|
|
100
|
+
if adls_connection_string is None:
|
|
101
|
+
adls_connection_string = os.getenv("AZURE_STORAGE_CONNECTION_STRING")
|
|
102
|
+
|
|
103
|
+
if adls_connection_string is None:
|
|
104
|
+
raise RuntimeError("AZURE_STORAGE_CONNECTION_STRING not set")
|
|
105
|
+
|
|
106
|
+
self.blob_service_client = BlobServiceClient.from_connection_string(adls_connection_string)
|
|
107
|
+
self.container_client = self.blob_service_client.get_container_client(container)
|
|
108
|
+
|
|
109
|
+
def write_pickle(self, obj, blob_name: str):
|
|
110
|
+
"""Salva objeto Python (ex: DataFrame) como pickle no blob"""
|
|
111
|
+
buf = io.BytesIO()
|
|
112
|
+
pickle.dump(obj, buf)
|
|
113
|
+
buf.seek(0)
|
|
114
|
+
self.container_client.upload_blob(name=blob_name, data=buf, overwrite=True)
|
|
115
|
+
|
|
116
|
+
def read_pickle(self, blob_name: str):
|
|
117
|
+
"""Lê pickle do blob e retorna objeto Python"""
|
|
118
|
+
downloader = self.container_client.download_blob(blob_name)
|
|
119
|
+
buf = io.BytesIO(downloader.readall())
|
|
120
|
+
return pickle.load(buf)
|
|
121
|
+
|
|
122
|
+
def exists(self, blob_name: str) -> bool:
|
|
123
|
+
return self.container_client.get_blob_client(blob_name).exists()
|
|
96
124
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
luxorasap/__init__.py,sha256=
|
|
1
|
+
luxorasap/__init__.py,sha256=9J8487iln_1ebmUvAHnSt7P0PInY2nZhwzmH_MqL1NU,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
|
|
@@ -12,12 +12,12 @@ luxorasap/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
12
12
|
luxorasap/utils/dataframe/__init__.py,sha256=heKpmq58FmX35syzzwrHqlOWKYBkH2Z1jyqaQ_Vg-00,265
|
|
13
13
|
luxorasap/utils/dataframe/reader.py,sha256=Vzjdw-AeS1lnWEHQ8RZNh0kK93NWTp0NWVi_B6mN5N0,616
|
|
14
14
|
luxorasap/utils/dataframe/transforms.py,sha256=OIvlTTcjFX6bUhuQp_syEp7ssm4sLzwvgsag6n2Wl3k,2438
|
|
15
|
-
luxorasap/utils/storage/__init__.py,sha256=
|
|
16
|
-
luxorasap/utils/storage/blob.py,sha256=
|
|
15
|
+
luxorasap/utils/storage/__init__.py,sha256=a-c_Pb7cv2RN10rcg8s19SRMHJbuJnW5M8qw1G-ic9w,105
|
|
16
|
+
luxorasap/utils/storage/blob.py,sha256=96uHWqTMqC9kfdGn0hATUmKpcUePzNsvXD5NsApcjWU,4413
|
|
17
17
|
luxorasap/utils/tools/__init__.py,sha256=dvK7Z4xnNQAuEiObVN7qjeLWAvP49JeFn2Oq9GdgmXs,76
|
|
18
18
|
luxorasap/utils/tools/excel.py,sha256=SfeTcbJWsWq3uKruwKSjJ4aWgMovITzlNXjP2bhdMjI,1246
|
|
19
|
-
luxorasap-0.1.
|
|
20
|
-
luxorasap-0.1.
|
|
21
|
-
luxorasap-0.1.
|
|
22
|
-
luxorasap-0.1.
|
|
23
|
-
luxorasap-0.1.
|
|
19
|
+
luxorasap-0.1.38.dist-info/METADATA,sha256=yrcIMIEjE3vRrCAz2wgDlQ8ZOGGd9WvaAltYJ0jvA0A,3804
|
|
20
|
+
luxorasap-0.1.38.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
21
|
+
luxorasap-0.1.38.dist-info/entry_points.txt,sha256=XFh-dOwUhlya9DmGvgookMI0ezyUJjcOvTIHDEYS44g,52
|
|
22
|
+
luxorasap-0.1.38.dist-info/top_level.txt,sha256=9YOL6bUIpzY06XFBRkUW1e4rgB32Ds91fQPGwUEjxzU,10
|
|
23
|
+
luxorasap-0.1.38.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|