sibi-dst 0.3.49__py3-none-any.whl → 0.3.52__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.
- sibi_dst/utils/__init__.py +3 -1
- sibi_dst/utils/clickhouse_writer.py +1 -1
- sibi_dst/utils/date_utils.py +5 -0
- sibi_dst/utils/storage_config.py +25 -4
- sibi_dst/utils/storage_manager.py +64 -4
- sibi_dst/utils/webdav_client.py +220 -0
- {sibi_dst-0.3.49.dist-info → sibi_dst-0.3.52.dist-info}/METADATA +17 -13
- {sibi_dst-0.3.49.dist-info → sibi_dst-0.3.52.dist-info}/RECORD +9 -8
- {sibi_dst-0.3.49.dist-info → sibi_dst-0.3.52.dist-info}/WHEEL +0 -0
sibi_dst/utils/__init__.py
CHANGED
@@ -15,6 +15,7 @@ from .credentials import *
|
|
15
15
|
from .data_wrapper import DataWrapper
|
16
16
|
from .storage_config import StorageConfig
|
17
17
|
from .data_from_http_source import DataFromHttpSource
|
18
|
+
from .webdav_client import WebDAVClient
|
18
19
|
|
19
20
|
__all__ = [
|
20
21
|
"Logger",
|
@@ -34,5 +35,6 @@ __all__ = [
|
|
34
35
|
"ClickHouseWriter",
|
35
36
|
"AirflowDAGManager",
|
36
37
|
"StorageConfig",
|
37
|
-
"DataFromHttpSource"
|
38
|
+
"DataFromHttpSource",
|
39
|
+
"WebDAVClient"
|
38
40
|
]
|
sibi_dst/utils/date_utils.py
CHANGED
@@ -51,6 +51,9 @@ class DateUtils:
|
|
51
51
|
continue
|
52
52
|
raise ValueError(f"Unsupported date format: {value}")
|
53
53
|
|
54
|
+
# Public alias to access _ensure_date from other classes
|
55
|
+
ensure_date = _ensure_date
|
56
|
+
|
54
57
|
@classmethod
|
55
58
|
def calc_week_range(cls, reference_date: Union[str, datetime.date, datetime.datetime, pd.Timestamp]) -> Tuple[
|
56
59
|
datetime.date, datetime.date]:
|
@@ -367,6 +370,8 @@ class BusinessDays:
|
|
367
370
|
def calculate_business_days(row, holidays, weekmask):
|
368
371
|
begin_date = pd.to_datetime(row[begin_date_col])
|
369
372
|
end_date = pd.to_datetime(row[end_date_col])
|
373
|
+
if pd.isna(begin_date) or pd.isna(end_date):
|
374
|
+
return np.nan
|
370
375
|
busdaycal = np.busdaycalendar(holidays=holidays, weekmask=weekmask)
|
371
376
|
return np.busday_count(
|
372
377
|
begin_date.strftime("%Y-%m-%d"),
|
sibi_dst/utils/storage_config.py
CHANGED
@@ -2,19 +2,23 @@ from .storage_manager import StorageManager
|
|
2
2
|
from .credentials import ConfigManager
|
3
3
|
|
4
4
|
class StorageConfig:
|
5
|
-
def __init__(self, config:ConfigManager, depots:dict):
|
5
|
+
def __init__(self, config:ConfigManager, depots:dict=None):
|
6
6
|
self.conf = config
|
7
7
|
self.depots = depots
|
8
8
|
self._initialize_storage()
|
9
9
|
self.storage_manager = StorageManager(self.base_storage, self.filesystem_type, self.filesystem_options)
|
10
|
-
|
10
|
+
if self.depots is not None:
|
11
|
+
self.depot_paths, self.depot_names = self.storage_manager.rebuild_depot_paths(depots)
|
12
|
+
else:
|
13
|
+
self.depot_paths = None
|
14
|
+
self.depot_names = None
|
11
15
|
|
12
16
|
def _initialize_storage(self):
|
13
17
|
self.filesystem_type = self.conf.get('fs_type','file')
|
14
18
|
self.base_storage = self.conf.get('fs_path', "local_storage/")
|
15
19
|
if self.filesystem_type == "file":
|
16
20
|
self.filesystem_options ={}
|
17
|
-
|
21
|
+
elif self.filesystem_type == "s3":
|
18
22
|
self.filesystem_options = {
|
19
23
|
"key": self.conf.get('fs_key',''),
|
20
24
|
"secret": self.conf.get('fs_secret'),
|
@@ -25,4 +29,21 @@ class StorageConfig:
|
|
25
29
|
"endpoint_url": self.conf.get('fs_endpoint')
|
26
30
|
}
|
27
31
|
}
|
28
|
-
|
32
|
+
elif self.filesystem_type == "webdav":
|
33
|
+
verify_ssl = self.conf.get('fs_verify_ssl', True)
|
34
|
+
# Convert string 'false' to boolean False
|
35
|
+
if isinstance(verify_ssl, str) and verify_ssl.lower() == 'false':
|
36
|
+
verify_ssl = False
|
37
|
+
self.filesystem_options = {
|
38
|
+
"base_url": self.conf.get('fs_endpoint', ''),
|
39
|
+
"username": self.conf.get('fs_key', ''),
|
40
|
+
"password": self.conf.get('fs_secret', ''),
|
41
|
+
"token": self.conf.get('fs_token', ''),
|
42
|
+
"verify": verify_ssl
|
43
|
+
}
|
44
|
+
else:
|
45
|
+
# unsupported filesystem type
|
46
|
+
# defaulting to local filesystem
|
47
|
+
self.filesystem_type = 'file'
|
48
|
+
self.filesystem_options = {}
|
49
|
+
self.filesystem_options = {k: v for k, v in self.filesystem_options.items() if v}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
from types import SimpleNamespace
|
2
2
|
|
3
3
|
import fsspec
|
4
|
-
|
4
|
+
from .webdav_client import WebDAVClient
|
5
5
|
|
6
6
|
class StorageManager:
|
7
7
|
def __init__(self, storage_path, fs_type="file", fs_options=None, debug=False):
|
@@ -16,11 +16,37 @@ class StorageManager:
|
|
16
16
|
self.storage_path = storage_path.rstrip("/")
|
17
17
|
self.fs_type = fs_type
|
18
18
|
self.fs_options = fs_options or {}
|
19
|
-
|
20
|
-
|
19
|
+
if fs_type == "webdav":
|
20
|
+
self._initialize_webdav()
|
21
|
+
else:
|
22
|
+
self.fs = fsspec.filesystem(fs_type, **self.fs_options)
|
21
23
|
self.depot_paths = {}
|
22
24
|
self.depot_name = None
|
23
25
|
|
26
|
+
def _initialize_webdav(self):
|
27
|
+
"""
|
28
|
+
Initialize WebDAV filesystem using the WebDAVClient.
|
29
|
+
"""
|
30
|
+
base_url = self.fs_options.get("base_url", "")
|
31
|
+
username = self.fs_options.get("username", "")
|
32
|
+
password = self.fs_options.get("password", "")
|
33
|
+
token = self.fs_options.get("token", "")
|
34
|
+
# Convert string 'false' to boolean False
|
35
|
+
verify = self.fs_options.get("verify", True)
|
36
|
+
if isinstance(verify, str) and verify.lower() == 'false':
|
37
|
+
verify = False
|
38
|
+
|
39
|
+
# Create WebDAV client
|
40
|
+
self.webdav_client = WebDAVClient(
|
41
|
+
base_url=base_url,
|
42
|
+
username=username,
|
43
|
+
password=password,
|
44
|
+
token=token,
|
45
|
+
verify=verify
|
46
|
+
)
|
47
|
+
|
48
|
+
# Use the fsspec-compatible filesystem
|
49
|
+
self.fs = self.webdav_client.get_fs()
|
24
50
|
@staticmethod
|
25
51
|
def join_paths(*parts):
|
26
52
|
"""
|
@@ -101,4 +127,38 @@ class StorageManager:
|
|
101
127
|
print("Rebuild complete.")
|
102
128
|
|
103
129
|
def get_fs_instance(self):
|
104
|
-
|
130
|
+
"""
|
131
|
+
Returns the filesystem instance.
|
132
|
+
"""
|
133
|
+
if self.fs_type == "webdav":
|
134
|
+
return self.fs
|
135
|
+
else:
|
136
|
+
return fsspec.filesystem(self.fs_type, **self.fs_options)
|
137
|
+
|
138
|
+
def upload_file(self, local_path, remote_path):
|
139
|
+
"""
|
140
|
+
Upload a file to the storage.
|
141
|
+
|
142
|
+
:param local_path: Local file path
|
143
|
+
:param remote_path: Remote file path
|
144
|
+
"""
|
145
|
+
if self.fs_type == "webdav":
|
146
|
+
# Use the WebDAV client's upload method for WebDAV
|
147
|
+
self.webdav_client.upload_file(local_path, remote_path)
|
148
|
+
else:
|
149
|
+
# Use fsspec's put method for other filesystems
|
150
|
+
self.fs.put(local_path, remote_path)
|
151
|
+
|
152
|
+
def download_file(self, remote_path, local_path):
|
153
|
+
"""
|
154
|
+
Download a file from the storage.
|
155
|
+
|
156
|
+
:param remote_path: Remote file path
|
157
|
+
:param local_path: Local file path
|
158
|
+
"""
|
159
|
+
if self.fs_type == "webdav":
|
160
|
+
# Use the WebDAV client's download method for WebDAV
|
161
|
+
self.webdav_client.download_file(remote_path, local_path)
|
162
|
+
else:
|
163
|
+
# Use fsspec's get method for other filesystems
|
164
|
+
self.fs.get(remote_path, local_path)
|
@@ -0,0 +1,220 @@
|
|
1
|
+
"""
|
2
|
+
WebDAV client implementation for storage manager.
|
3
|
+
"""
|
4
|
+
from webdav4.client import Client, ResourceNotFound
|
5
|
+
from webdav4.fsspec import WebdavFileSystem
|
6
|
+
|
7
|
+
|
8
|
+
class WebDAVClient:
|
9
|
+
"""
|
10
|
+
WebDAV client wrapper for interacting with WebDAV servers like NextCloud.
|
11
|
+
"""
|
12
|
+
|
13
|
+
def __init__(self, base_url, username=None, password=None, token=None, verify=True):
|
14
|
+
"""
|
15
|
+
Initialize the WebDAV client.
|
16
|
+
|
17
|
+
:param base_url: Base URL of the WebDAV server (e.g., "https://nextcloud.example.com/remote.php/dav/files/username/")
|
18
|
+
:param username: Username for authentication
|
19
|
+
:param password: Password for authentication
|
20
|
+
:param token: Authentication token (alternative to username/password)
|
21
|
+
:param verify: Whether to verify SSL certificates
|
22
|
+
"""
|
23
|
+
self.base_url = base_url
|
24
|
+
self.username = username
|
25
|
+
self.password = password
|
26
|
+
self.token = token
|
27
|
+
# Set up verification
|
28
|
+
if isinstance(verify, str) and verify.lower() == 'false':
|
29
|
+
self.verify = False
|
30
|
+
else:
|
31
|
+
self.verify = verify
|
32
|
+
|
33
|
+
# Set up authentication
|
34
|
+
if token:
|
35
|
+
self.auth = token
|
36
|
+
elif username and password:
|
37
|
+
self.auth = (username, password)
|
38
|
+
else:
|
39
|
+
self.auth = None
|
40
|
+
|
41
|
+
# Initialize the client
|
42
|
+
self.client = Client(
|
43
|
+
base_url,
|
44
|
+
auth=self.auth,
|
45
|
+
verify=self.verify
|
46
|
+
)
|
47
|
+
|
48
|
+
# Initialize the fsspec filesystem
|
49
|
+
self.fs = WebdavFileSystem(
|
50
|
+
base_url,
|
51
|
+
auth=self.auth,
|
52
|
+
verify=self.verify
|
53
|
+
)
|
54
|
+
|
55
|
+
def exists(self, path):
|
56
|
+
"""
|
57
|
+
Check if a path exists on the WebDAV server.
|
58
|
+
|
59
|
+
:param path: Path to check
|
60
|
+
:return: True if exists, False otherwise
|
61
|
+
"""
|
62
|
+
try:
|
63
|
+
return self.client.exists(path)
|
64
|
+
except Exception:
|
65
|
+
return False
|
66
|
+
|
67
|
+
def list_directory(self, path="", detail=False):
|
68
|
+
"""
|
69
|
+
List contents of a directory.
|
70
|
+
|
71
|
+
:param path: Directory path to list
|
72
|
+
:param detail: Whether to return detailed information
|
73
|
+
:return: List of files/directories or detailed information
|
74
|
+
"""
|
75
|
+
try:
|
76
|
+
return self.client.ls(path, detail=detail)
|
77
|
+
except ResourceNotFound:
|
78
|
+
# Return empty list if directory doesn't exist
|
79
|
+
return [] if not detail else {}
|
80
|
+
|
81
|
+
def ensure_directory_exists(self, path):
|
82
|
+
"""
|
83
|
+
Ensure a directory exists, creating parent directories if needed.
|
84
|
+
|
85
|
+
:param path: Directory path to ensure exists
|
86
|
+
"""
|
87
|
+
if not path or path == "/" or path == ".":
|
88
|
+
return
|
89
|
+
|
90
|
+
# Check if the directory already exists
|
91
|
+
if self.exists(path):
|
92
|
+
return
|
93
|
+
|
94
|
+
# Split the path into components
|
95
|
+
parts = path.strip('/').split('/')
|
96
|
+
current_path = ""
|
97
|
+
|
98
|
+
# Create each directory in the path if it doesn't exist
|
99
|
+
for part in parts:
|
100
|
+
if not part:
|
101
|
+
continue
|
102
|
+
|
103
|
+
current_path = f"{current_path}/{part}" if current_path else part
|
104
|
+
|
105
|
+
if not self.exists(current_path):
|
106
|
+
try:
|
107
|
+
self.client.mkdir(current_path)
|
108
|
+
except ResourceNotFound:
|
109
|
+
# If parent directory doesn't exist, create it first
|
110
|
+
parent_path = '/'.join(current_path.split('/')[:-1])
|
111
|
+
self.ensure_directory_exists(parent_path)
|
112
|
+
# Then try to create the directory again
|
113
|
+
self.client.mkdir(current_path)
|
114
|
+
except Exception as e:
|
115
|
+
# If directory already exists or other error, log and continue
|
116
|
+
if self.exists(current_path):
|
117
|
+
pass # Directory exists, which is fine
|
118
|
+
else:
|
119
|
+
raise e # Re-raise if it's a different error
|
120
|
+
|
121
|
+
def create_directory(self, path):
|
122
|
+
"""
|
123
|
+
Create a directory on the WebDAV server.
|
124
|
+
|
125
|
+
:param path: Directory path to create
|
126
|
+
"""
|
127
|
+
self.ensure_directory_exists(path)
|
128
|
+
|
129
|
+
def upload_file(self, local_path, remote_path):
|
130
|
+
"""
|
131
|
+
Upload a file to the WebDAV server.
|
132
|
+
|
133
|
+
:param local_path: Local file path
|
134
|
+
:param remote_path: Remote file path
|
135
|
+
"""
|
136
|
+
# Ensure parent directory exists
|
137
|
+
parent_dir = '/'.join(remote_path.split('/')[:-1])
|
138
|
+
if parent_dir:
|
139
|
+
self.ensure_directory_exists(parent_dir)
|
140
|
+
|
141
|
+
# Upload the file
|
142
|
+
self.client.upload_file(local_path, remote_path)
|
143
|
+
|
144
|
+
def download_file(self, remote_path, local_path):
|
145
|
+
"""
|
146
|
+
Download a file from the WebDAV server.
|
147
|
+
|
148
|
+
:param remote_path: Remote file path
|
149
|
+
:param local_path: Local file path
|
150
|
+
"""
|
151
|
+
self.client.download_file(remote_path, local_path)
|
152
|
+
|
153
|
+
def delete(self, path, recursive=False):
|
154
|
+
"""
|
155
|
+
Delete a file or directory on the WebDAV server.
|
156
|
+
|
157
|
+
:param path: Path to delete
|
158
|
+
:param recursive: Whether to delete recursively (for directories)
|
159
|
+
"""
|
160
|
+
try:
|
161
|
+
self.client.remove(path, recursive=recursive)
|
162
|
+
except ResourceNotFound:
|
163
|
+
# If the resource doesn't exist, that's fine - it's already gone
|
164
|
+
pass
|
165
|
+
except Exception as e:
|
166
|
+
# Re-raise other exceptions
|
167
|
+
raise e
|
168
|
+
|
169
|
+
def get_fs(self):
|
170
|
+
"""
|
171
|
+
Get the fsspec filesystem instance.
|
172
|
+
|
173
|
+
:return: WebdavFileSystem instance
|
174
|
+
"""
|
175
|
+
return self.fs
|
176
|
+
|
177
|
+
# Add fsspec-compatible method aliases
|
178
|
+
def mkdir(self, path, create_parents=True):
|
179
|
+
"""
|
180
|
+
Create a directory (fsspec-compatible method).
|
181
|
+
|
182
|
+
:param path: Directory path to create
|
183
|
+
:param create_parents: Whether to create parent directories
|
184
|
+
"""
|
185
|
+
if create_parents:
|
186
|
+
self.ensure_directory_exists(path)
|
187
|
+
else:
|
188
|
+
try:
|
189
|
+
self.client.mkdir(path)
|
190
|
+
except ResourceNotFound:
|
191
|
+
# If parent directory doesn't exist and create_parents is False, raise error
|
192
|
+
raise
|
193
|
+
|
194
|
+
def ls(self, path="", detail=False):
|
195
|
+
"""
|
196
|
+
List contents of a directory (fsspec-compatible method).
|
197
|
+
|
198
|
+
:param path: Directory path to list
|
199
|
+
:param detail: Whether to return detailed information
|
200
|
+
:return: List of files/directories or detailed information
|
201
|
+
"""
|
202
|
+
return self.list_directory(path, detail=detail)
|
203
|
+
|
204
|
+
def rm(self, path, recursive=False):
|
205
|
+
"""
|
206
|
+
Delete a file or directory (fsspec-compatible method).
|
207
|
+
|
208
|
+
:param path: Path to delete
|
209
|
+
:param recursive: Whether to delete recursively (for directories)
|
210
|
+
"""
|
211
|
+
self.delete(path, recursive=recursive)
|
212
|
+
|
213
|
+
def makedirs(self, path, exist_ok=True):
|
214
|
+
"""
|
215
|
+
Create a directory and all parent directories (fsspec-compatible method).
|
216
|
+
|
217
|
+
:param path: Directory path to create
|
218
|
+
:param exist_ok: Whether it's okay if the directory already exists
|
219
|
+
"""
|
220
|
+
self.ensure_directory_exists(path)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: sibi-dst
|
3
|
-
Version: 0.3.
|
3
|
+
Version: 0.3.52
|
4
4
|
Summary: Data Science Toolkit
|
5
5
|
Author: Luis Valverde
|
6
6
|
Author-email: lvalverdeb@gmail.com
|
@@ -10,42 +10,46 @@ Classifier: Programming Language :: Python :: 3.11
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.12
|
11
11
|
Classifier: Programming Language :: Python :: 3.13
|
12
12
|
Provides-Extra: complete
|
13
|
+
Provides-Extra: df-helper
|
14
|
+
Provides-Extra: geopy-helper
|
15
|
+
Provides-Extra: osmnx-helper
|
13
16
|
Requires-Dist: apache-airflow-client (>=2.10.0,<3.0.0)
|
14
17
|
Requires-Dist: chardet (>=5.2.0,<6.0.0)
|
15
18
|
Requires-Dist: charset-normalizer (>=3.4.0,<4.0.0)
|
16
19
|
Requires-Dist: clickhouse-connect (>=0.8.7,<0.9.0)
|
17
20
|
Requires-Dist: clickhouse-driver (>=0.2.9,<0.3.0)
|
18
|
-
Requires-Dist: dask[complete] (>=
|
19
|
-
Requires-Dist: django (>=5.1.4,<6.0.0) ; extra == "complete"
|
20
|
-
Requires-Dist: djangorestframework (>=3.15.2,<4.0.0) ; extra == "complete"
|
21
|
-
Requires-Dist: folium (>=0.19.4,<0.20.0)
|
22
|
-
Requires-Dist: geopandas (>=1.0.1,<2.0.0)
|
23
|
-
Requires-Dist: geopy (>=2.4.1,<3.0.0)
|
21
|
+
Requires-Dist: dask[complete] (>=2025.3.0,<2026.0.0)
|
22
|
+
Requires-Dist: django (>=5.1.4,<6.0.0) ; extra == "df-helper" or extra == "complete"
|
23
|
+
Requires-Dist: djangorestframework (>=3.15.2,<4.0.0) ; extra == "df-helper" or extra == "complete"
|
24
|
+
Requires-Dist: folium (>=0.19.4,<0.20.0) ; extra == "osmnx-helper" or extra == "complete"
|
25
|
+
Requires-Dist: geopandas (>=1.0.1,<2.0.0) ; extra == "osmnx-helper" or extra == "complete"
|
26
|
+
Requires-Dist: geopy (>=2.4.1,<3.0.0) ; extra == "geopy-helper" or extra == "complete"
|
24
27
|
Requires-Dist: gunicorn (>=23.0.0,<24.0.0)
|
25
28
|
Requires-Dist: httpx (>=0.27.2,<0.28.0)
|
26
29
|
Requires-Dist: ipython (>=8.29.0,<9.0.0)
|
27
30
|
Requires-Dist: jinja2 (>=3.1.4,<4.0.0)
|
28
|
-
Requires-Dist: mysqlclient (>=2.2.6,<3.0.0)
|
31
|
+
Requires-Dist: mysqlclient (>=2.2.6,<3.0.0) ; extra == "df-helper" or extra == "complete"
|
29
32
|
Requires-Dist: nltk (>=3.9.1,<4.0.0)
|
30
33
|
Requires-Dist: openpyxl (>=3.1.5,<4.0.0)
|
31
|
-
Requires-Dist: osmnx (>=2.0.1,<3.0.0)
|
34
|
+
Requires-Dist: osmnx (>=2.0.1,<3.0.0) ; extra == "osmnx-helper" or extra == "complete"
|
32
35
|
Requires-Dist: pandas (>=2.2.3,<3.0.0)
|
33
36
|
Requires-Dist: paramiko (>=3.5.0,<4.0.0)
|
34
37
|
Requires-Dist: psutil (>=6.1.0,<7.0.0)
|
35
|
-
Requires-Dist: psycopg2 (>=2.9.10,<3.0.0)
|
38
|
+
Requires-Dist: psycopg2 (>=2.9.10,<3.0.0) ; extra == "df-helper" or extra == "complete"
|
36
39
|
Requires-Dist: pyarrow (>=18.0.0,<19.0.0)
|
37
40
|
Requires-Dist: pydantic (>=2.9.2,<3.0.0)
|
38
|
-
Requires-Dist: pymysql (>=1.1.1,<2.0.0)
|
41
|
+
Requires-Dist: pymysql (>=1.1.1,<2.0.0) ; extra == "df-helper" or extra == "complete"
|
39
42
|
Requires-Dist: pytest (>=8.3.3,<9.0.0)
|
40
43
|
Requires-Dist: pytest-mock (>=3.14.0,<4.0.0)
|
41
44
|
Requires-Dist: python-dotenv (>=1.0.1,<2.0.0)
|
42
45
|
Requires-Dist: s3fs (>=2024.12.0,<2025.0.0)
|
43
|
-
Requires-Dist: sqlalchemy (>=2.0.36,<3.0.0)
|
44
|
-
Requires-Dist: sqlmodel (>=0.0.22,<0.0.23)
|
46
|
+
Requires-Dist: sqlalchemy (>=2.0.36,<3.0.0) ; extra == "df-helper" or extra == "complete"
|
47
|
+
Requires-Dist: sqlmodel (>=0.0.22,<0.0.23) ; extra == "df-helper" or extra == "complete"
|
45
48
|
Requires-Dist: tornado (>=6.4.1,<7.0.0)
|
46
49
|
Requires-Dist: tqdm (>=4.67.0,<5.0.0)
|
47
50
|
Requires-Dist: uvicorn (>=0.34.0,<0.35.0)
|
48
51
|
Requires-Dist: uvicorn-worker (>=0.3.0,<0.4.0)
|
52
|
+
Requires-Dist: webdav4[fsspec] (>=0.10.0,<0.11.0)
|
49
53
|
Description-Content-Type: text/markdown
|
50
54
|
|
51
55
|
# sibi-dst
|
@@ -38,22 +38,23 @@ sibi_dst/osmnx_helper/basemaps/router_plotter.py,sha256=UAiijn-J-jjX4YnL0_P9SFqT
|
|
38
38
|
sibi_dst/osmnx_helper/utils.py,sha256=BzuY8CtYnBAAO8UAr_M7EOk6CP1zcifNLs8pkdFZEFg,20577
|
39
39
|
sibi_dst/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
40
40
|
sibi_dst/tests/test_data_wrapper_class.py,sha256=6uFmZR2DxnxQz49L5jT2ehlKvlLnpUHMLFB_PqqUq7k,3336
|
41
|
-
sibi_dst/utils/__init__.py,sha256=
|
41
|
+
sibi_dst/utils/__init__.py,sha256=_4kuTzjCfbRF9927ywXqi-JKoHNec8wf05LYh4DMbPI,1077
|
42
42
|
sibi_dst/utils/airflow_manager.py,sha256=-d44EKUZNYJyp4wuNwRvilRQktunArPOB5fZuWdQv10,7526
|
43
|
-
sibi_dst/utils/clickhouse_writer.py,sha256=
|
43
|
+
sibi_dst/utils/clickhouse_writer.py,sha256=iAUe4_Kn2WR1xZjpLW2FOWCWfOTw6fCGMTUcWxIQJ60,9877
|
44
44
|
sibi_dst/utils/credentials.py,sha256=cHJPPsmVyijqbUQIq7WWPe-lIallA-mI5RAy3YUuRME,1724
|
45
45
|
sibi_dst/utils/data_from_http_source.py,sha256=AcpKNsqTgN2ClNwuhgUpuNCx62r5_DdsAiKY8vcHEBA,1867
|
46
46
|
sibi_dst/utils/data_utils.py,sha256=MqbwXk33BuANWeKKmsabHouhb8GZswSmbM-VetWWE-M,10357
|
47
47
|
sibi_dst/utils/data_wrapper.py,sha256=pIIQxeHknUeQd0YbISkAhL-xYBK4OdijoATBY-oBznw,12114
|
48
|
-
sibi_dst/utils/date_utils.py,sha256=
|
48
|
+
sibi_dst/utils/date_utils.py,sha256=OCJqkWl5e8fE7z11Ufz4206DUeuLMd_Gf_JGZu914Pg,18539
|
49
49
|
sibi_dst/utils/df_utils.py,sha256=TzIAUCLbgOn3bvCFvzkc1S9YU-OlZTImdCj-88dtg8g,11401
|
50
50
|
sibi_dst/utils/file_utils.py,sha256=Z99CZ_4nPDIaZqbCfzzUDfAYJjSudWDj-mwEO8grhbc,1253
|
51
51
|
sibi_dst/utils/filepath_generator.py,sha256=-HHO0U-PR8fysDDFwnWdHRlgqksh_RkmgBZLWv9hM7s,6669
|
52
52
|
sibi_dst/utils/log_utils.py,sha256=eSAbi_jmMpJ8RpycakzT4S4zNkqVZDj3FY8WwnxpdXc,4623
|
53
53
|
sibi_dst/utils/parquet_saver.py,sha256=Tucxv9jRX66VuLQZn0dPQBN7JOttBou6SF8FxqufeGE,8169
|
54
54
|
sibi_dst/utils/phone_formatter.py,sha256=tsVTDamuthFYgy4-5UwmQkPQ-FGTGH7MjZyH8utAkIY,4945
|
55
|
-
sibi_dst/utils/storage_config.py,sha256=
|
56
|
-
sibi_dst/utils/storage_manager.py,sha256=
|
55
|
+
sibi_dst/utils/storage_config.py,sha256=Cg8EOGLZ_5v9sunaQHZLYHdp5FDkgPrCVVNHF-ys5sQ,2181
|
56
|
+
sibi_dst/utils/storage_manager.py,sha256=btecX7ggNb7rfu5EK9Xuu2q_FZA7r_rB_tfhQ8V96qc,6567
|
57
|
+
sibi_dst/utils/webdav_client.py,sha256=pYF1UsGOuxYeGLq7aBfwZFvkvD4meOcbbaiZ4d6GW9I,7107
|
57
58
|
sibi_dst/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
58
59
|
sibi_dst/v2/df_helper/__init__.py,sha256=XuH6jKYAPg2DdRbsxxBSxp9X3x-ARyaT0xe27uILrVo,99
|
59
60
|
sibi_dst/v2/df_helper/_df_helper.py,sha256=9pED3bjQ2Z81zqzJrZ9e7SguoO4-hBmNTJK4WOKrr4M,9297
|
@@ -74,6 +75,6 @@ sibi_dst/v2/df_helper/core/_params_config.py,sha256=DYx2drDz3uF-lSPzizPkchhy-kxR
|
|
74
75
|
sibi_dst/v2/df_helper/core/_query_config.py,sha256=Y8LVSyaKuVkrPluRDkQoOwuXHQxner1pFWG3HPfnDHM,441
|
75
76
|
sibi_dst/v2/utils/__init__.py,sha256=6H4cvhqTiFufnFPETBF0f8beVVMpfJfvUs6Ne0TQZNY,58
|
76
77
|
sibi_dst/v2/utils/log_utils.py,sha256=rfk5VsLAt-FKpv6aPTC1FToIPiyrnHAFFBAkHme24po,4123
|
77
|
-
sibi_dst-0.3.
|
78
|
-
sibi_dst-0.3.
|
79
|
-
sibi_dst-0.3.
|
78
|
+
sibi_dst-0.3.52.dist-info/METADATA,sha256=VIiTzkdO-FsYBkie1cfuwFKEwFFSE5TL5Ory-VzPa0g,7221
|
79
|
+
sibi_dst-0.3.52.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
80
|
+
sibi_dst-0.3.52.dist-info/RECORD,,
|
File without changes
|