sibi-dst 2025.1.13__py3-none-any.whl → 2025.8.1__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/__init__.py +7 -1
- sibi_dst/df_helper/_artifact_updater_multi_wrapper.py +235 -342
- sibi_dst/df_helper/_df_helper.py +417 -117
- sibi_dst/df_helper/_parquet_artifact.py +255 -283
- sibi_dst/df_helper/backends/parquet/_parquet_options.py +8 -4
- sibi_dst/df_helper/backends/sqlalchemy/_db_connection.py +68 -107
- sibi_dst/df_helper/backends/sqlalchemy/_db_gatekeeper.py +15 -0
- sibi_dst/df_helper/backends/sqlalchemy/_io_dask.py +105 -255
- sibi_dst/df_helper/backends/sqlalchemy/_load_from_db.py +90 -42
- sibi_dst/df_helper/backends/sqlalchemy/_model_registry.py +192 -0
- sibi_dst/df_helper/backends/sqlalchemy/_sql_model_builder.py +122 -72
- sibi_dst/osmnx_helper/route_path_builder.py +45 -46
- sibi_dst/utils/base.py +302 -96
- sibi_dst/utils/clickhouse_writer.py +472 -206
- sibi_dst/utils/data_utils.py +139 -186
- sibi_dst/utils/data_wrapper.py +317 -73
- sibi_dst/utils/date_utils.py +1 -0
- sibi_dst/utils/df_utils.py +193 -213
- sibi_dst/utils/file_utils.py +3 -2
- sibi_dst/utils/filepath_generator.py +314 -152
- sibi_dst/utils/log_utils.py +581 -242
- sibi_dst/utils/manifest_manager.py +60 -76
- sibi_dst/utils/parquet_saver.py +33 -27
- sibi_dst/utils/phone_formatter.py +88 -95
- sibi_dst/utils/update_planner.py +180 -178
- sibi_dst/utils/webdav_client.py +116 -166
- {sibi_dst-2025.1.13.dist-info → sibi_dst-2025.8.1.dist-info}/METADATA +1 -1
- {sibi_dst-2025.1.13.dist-info → sibi_dst-2025.8.1.dist-info}/RECORD +29 -27
- {sibi_dst-2025.1.13.dist-info → sibi_dst-2025.8.1.dist-info}/WHEEL +0 -0
sibi_dst/utils/webdav_client.py
CHANGED
@@ -1,220 +1,170 @@
|
|
1
1
|
"""
|
2
2
|
WebDAV client implementation for storage manager.
|
3
3
|
"""
|
4
|
+
from __future__ import annotations
|
5
|
+
|
6
|
+
from pathlib import PurePosixPath
|
7
|
+
from typing import Optional, Tuple, Union, Iterable
|
8
|
+
|
4
9
|
from webdav4.client import Client, ResourceNotFound
|
5
10
|
from webdav4.fsspec import WebdavFileSystem
|
6
11
|
|
7
12
|
|
13
|
+
def _normalize_base_url(url: str) -> str:
|
14
|
+
# webdav4 accepts trailing slash; normalize to one
|
15
|
+
url = url.strip()
|
16
|
+
return url if url.endswith("/") else url + "/"
|
17
|
+
|
18
|
+
|
19
|
+
def _normpath(path: str) -> str:
|
20
|
+
# Ensure POSIX path semantics (WebDAV paths are POSIX-like)
|
21
|
+
# Remove duplicate slashes but keep leading slash if present
|
22
|
+
p = str(PurePosixPath("/" + path.strip("/")))
|
23
|
+
return p[1:] if not path.startswith("/") else p
|
24
|
+
|
25
|
+
|
8
26
|
class WebDAVClient:
|
9
27
|
"""
|
10
|
-
WebDAV client wrapper for interacting with WebDAV servers
|
11
|
-
"""
|
12
|
-
|
13
|
-
def __init__(self, base_url, username=None, password=None, token=None, verify=True):
|
14
|
-
"""
|
15
|
-
Initialize the WebDAV client.
|
28
|
+
WebDAV client wrapper for interacting with WebDAV servers (e.g., Nextcloud).
|
16
29
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
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
|
30
|
+
- Uses webdav4.Client for high-level ops and WebdavFileSystem (fsspec) for path utilities.
|
31
|
+
- Provides fsspec-compatible aliases: ls, rm, mkdir, makedirs.
|
32
|
+
- Prefer fs methods for filesystem ops (exists, makedirs, copy, open).
|
33
|
+
"""
|
32
34
|
|
33
|
-
|
35
|
+
def __init__(
|
36
|
+
self,
|
37
|
+
base_url: str,
|
38
|
+
*,
|
39
|
+
username: Optional[str] = None,
|
40
|
+
password: Optional[str] = None,
|
41
|
+
token: Optional[str] = None,
|
42
|
+
verify: Union[bool, str] = True,
|
43
|
+
timeout: Optional[float] = None,
|
44
|
+
) -> None:
|
45
|
+
"""
|
46
|
+
:param base_url: e.g. "https://host/remote.php/dav/files/user/"
|
47
|
+
:param username: Basic auth username (ignored if token is provided)
|
48
|
+
:param password: Basic auth password
|
49
|
+
:param token: Bearer/token auth (passed as `auth=token`)
|
50
|
+
:param verify: bool or path to CA bundle; "false" (str) treated as False
|
51
|
+
:param timeout: Optional default timeout (seconds) for client requests
|
52
|
+
"""
|
53
|
+
self.base_url = _normalize_base_url(base_url)
|
54
|
+
|
55
|
+
# verify may arrive as 'false' string
|
56
|
+
if isinstance(verify, str) and verify.lower() == "false":
|
57
|
+
verify = False
|
58
|
+
self.verify = verify
|
59
|
+
|
60
|
+
# auth precedence: token -> (username, password) -> None
|
34
61
|
if token:
|
35
|
-
self.auth = token
|
62
|
+
self.auth: Union[str, Tuple[str, str], None] = token
|
36
63
|
elif username and password:
|
37
64
|
self.auth = (username, password)
|
38
65
|
else:
|
39
66
|
self.auth = None
|
40
67
|
|
41
|
-
#
|
42
|
-
self.client = Client(
|
43
|
-
|
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.
|
68
|
+
# Core clients
|
69
|
+
self.client = Client(self.base_url, auth=self.auth, verify=self.verify, timeout=timeout)
|
70
|
+
self.fs = WebdavFileSystem(self.base_url, auth=self.auth, verify=self.verify, timeout=timeout)
|
58
71
|
|
59
|
-
|
60
|
-
|
61
|
-
|
72
|
+
# ---------- convenience ----------
|
73
|
+
|
74
|
+
def _p(self, path: str) -> str:
|
75
|
+
"""Normalize a relative/absolute path to WebDAV format."""
|
76
|
+
return _normpath(path)
|
77
|
+
|
78
|
+
# ---------- existence / listing ----------
|
79
|
+
|
80
|
+
def exists(self, path: str) -> bool:
|
81
|
+
"""Return True if the resource exists."""
|
62
82
|
try:
|
63
|
-
return self.
|
83
|
+
return bool(self.fs.exists(self._p(path)))
|
64
84
|
except Exception:
|
65
85
|
return False
|
66
86
|
|
67
|
-
def list_directory(self, path="", detail=False):
|
87
|
+
def list_directory(self, path: str = "", detail: bool = False):
|
68
88
|
"""
|
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
|
89
|
+
List contents of a directory. Returns [] (or {}) if not found.
|
74
90
|
"""
|
91
|
+
p = self._p(path)
|
75
92
|
try:
|
76
|
-
return self.
|
93
|
+
return self.fs.ls(p, detail=detail)
|
94
|
+
except FileNotFoundError:
|
95
|
+
return [] if not detail else {}
|
77
96
|
except ResourceNotFound:
|
78
|
-
# Return empty list if directory doesn't exist
|
79
97
|
return [] if not detail else {}
|
80
98
|
|
81
|
-
|
82
|
-
"""
|
83
|
-
Ensure a directory exists, creating parent directories if needed.
|
99
|
+
# ---------- directory creation ----------
|
84
100
|
|
85
|
-
|
101
|
+
def ensure_directory_exists(self, path: str) -> None:
|
86
102
|
"""
|
87
|
-
|
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):
|
103
|
+
Create a directory and parents if needed (idempotent).
|
122
104
|
"""
|
123
|
-
|
105
|
+
p = self._p(path)
|
106
|
+
# WebdavFileSystem implements makedirs(exist_ok=True)
|
107
|
+
self.fs.makedirs(p, exist_ok=True)
|
124
108
|
|
125
|
-
|
126
|
-
"""
|
109
|
+
def create_directory(self, path: str) -> None:
|
127
110
|
self.ensure_directory_exists(path)
|
128
111
|
|
129
|
-
|
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)
|
112
|
+
# ---------- file transfer ----------
|
143
113
|
|
144
|
-
def
|
145
|
-
|
146
|
-
|
114
|
+
def upload_file(self, local_path: str, remote_path: str) -> None:
|
115
|
+
parent = PurePosixPath(self._p(remote_path)).parent.as_posix()
|
116
|
+
if parent and parent not in (".", "/"):
|
117
|
+
self.ensure_directory_exists(parent)
|
118
|
+
# client supports upload_file(local, remote)
|
119
|
+
self.client.upload_file(local_path, self._p(remote_path))
|
147
120
|
|
148
|
-
|
149
|
-
|
150
|
-
"""
|
151
|
-
self.client.download_file(remote_path, local_path)
|
121
|
+
def download_file(self, remote_path: str, local_path: str) -> None:
|
122
|
+
self.client.download_file(self._p(remote_path), local_path)
|
152
123
|
|
153
|
-
|
154
|
-
"""
|
155
|
-
Delete a file or directory on the WebDAV server.
|
124
|
+
# ---------- deletion ----------
|
156
125
|
|
157
|
-
|
158
|
-
|
159
|
-
"""
|
126
|
+
def delete(self, path: str, recursive: bool = False) -> None:
|
127
|
+
p = self._p(path)
|
160
128
|
try:
|
161
|
-
|
129
|
+
# fs.rm handles both files and directories
|
130
|
+
self.fs.rm(p, recursive=recursive)
|
131
|
+
except FileNotFoundError:
|
132
|
+
pass
|
162
133
|
except ResourceNotFound:
|
163
|
-
# If the resource doesn't exist, that's fine - it's already gone
|
164
134
|
pass
|
165
|
-
except Exception as e:
|
166
|
-
# Re-raise other exceptions
|
167
|
-
raise e
|
168
135
|
|
169
|
-
|
170
|
-
"""
|
171
|
-
Get the fsspec filesystem instance.
|
136
|
+
# ---------- fsspec-like aliases ----------
|
172
137
|
|
173
|
-
|
174
|
-
"""
|
138
|
+
def get_fs(self) -> WebdavFileSystem:
|
175
139
|
return self.fs
|
176
140
|
|
177
|
-
|
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
|
-
"""
|
141
|
+
def mkdir(self, path: str, create_parents: bool = True) -> None:
|
185
142
|
if create_parents:
|
186
143
|
self.ensure_directory_exists(path)
|
187
144
|
else:
|
188
|
-
|
189
|
-
|
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).
|
145
|
+
# fsspec's mkdir usually creates a single level
|
146
|
+
self.fs.mkdir(self._p(path))
|
197
147
|
|
198
|
-
|
199
|
-
:param detail: Whether to return detailed information
|
200
|
-
:return: List of files/directories or detailed information
|
201
|
-
"""
|
148
|
+
def ls(self, path: str = "", detail: bool = False):
|
202
149
|
return self.list_directory(path, detail=detail)
|
203
150
|
|
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
|
-
"""
|
151
|
+
def rm(self, path: str, recursive: bool = False) -> None:
|
211
152
|
self.delete(path, recursive=recursive)
|
212
153
|
|
213
|
-
def makedirs(self, path, exist_ok=True):
|
214
|
-
|
215
|
-
|
154
|
+
def makedirs(self, path: str, exist_ok: bool = True) -> None:
|
155
|
+
p = self._p(path)
|
156
|
+
self.fs.makedirs(p, exist_ok=exist_ok)
|
216
157
|
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
self
|
158
|
+
# ---------- context manager ----------
|
159
|
+
|
160
|
+
def __enter__(self) -> "WebDAVClient":
|
161
|
+
return self
|
162
|
+
|
163
|
+
def __exit__(self, exc_type, exc, tb) -> None:
|
164
|
+
# webdav4 clients don’t require explicit close, but fsspec may hold pools
|
165
|
+
try:
|
166
|
+
close = getattr(self.fs, "close", None)
|
167
|
+
if callable(close):
|
168
|
+
close()
|
169
|
+
except Exception:
|
170
|
+
pass
|
@@ -1,20 +1,22 @@
|
|
1
|
-
sibi_dst/__init__.py,sha256=
|
1
|
+
sibi_dst/__init__.py,sha256=D01Z2Ds4zES8uz5Zp7qOWD0EcfCllWgew7AWt2X1SQg,445
|
2
2
|
sibi_dst/df_helper/__init__.py,sha256=Jur_MO8RGPkVw0CS3XH5YIWv-d922DC_FwRDTvHHV6Y,432
|
3
|
-
sibi_dst/df_helper/_artifact_updater_multi_wrapper.py,sha256=
|
4
|
-
sibi_dst/df_helper/_df_helper.py,sha256=
|
5
|
-
sibi_dst/df_helper/_parquet_artifact.py,sha256=
|
3
|
+
sibi_dst/df_helper/_artifact_updater_multi_wrapper.py,sha256=1e_qKEGTA94wnGp1wZp9ldSU39LXL2N34IETIcRxX6s,11790
|
4
|
+
sibi_dst/df_helper/_df_helper.py,sha256=oBfC5syyHpTsUgjpJ2yjir6KHIqpJVbt4t54_Pum8mo,26868
|
5
|
+
sibi_dst/df_helper/_parquet_artifact.py,sha256=DAo6_Eu_vrbGfQ1IyN6X_wxCF63G4O1UpR6p2bDo8cE,11394
|
6
6
|
sibi_dst/df_helper/_parquet_reader.py,sha256=m98C0TZRroOXvVc2LpEuElrJnquGlR81E1gjI7v1hi4,3102
|
7
7
|
sibi_dst/df_helper/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
8
|
sibi_dst/df_helper/backends/http/__init__.py,sha256=d1pfgYxbiYg7E0Iw8RbJ7xfqIfJShqqTBQQGU_S6OOo,105
|
9
9
|
sibi_dst/df_helper/backends/http/_http_config.py,sha256=eGPFdqZ5M3Tscqx2P93B6XoBEEzlmdt7yNg7PXUQnNQ,4726
|
10
10
|
sibi_dst/df_helper/backends/parquet/__init__.py,sha256=esWJ9aSuYC26d-T01z9dPrJ1uqJzvdaPNTYRb5qXTlQ,182
|
11
11
|
sibi_dst/df_helper/backends/parquet/_filter_handler.py,sha256=TvDf0RXta7mwJv11GNQttYJsXgFf2XDj4oLIjt4xTzA,5219
|
12
|
-
sibi_dst/df_helper/backends/parquet/_parquet_options.py,sha256=
|
12
|
+
sibi_dst/df_helper/backends/parquet/_parquet_options.py,sha256=FusVcLVysitLoc8Ui_zU4JMhdHW1MMn4i0vnMbl2K84,12017
|
13
13
|
sibi_dst/df_helper/backends/sqlalchemy/__init__.py,sha256=LjWm9B7CweTvlvFOgB90XjSe0lVLILAIYMWKPkFXFm8,265
|
14
|
-
sibi_dst/df_helper/backends/sqlalchemy/_db_connection.py,sha256=
|
15
|
-
sibi_dst/df_helper/backends/sqlalchemy/
|
16
|
-
sibi_dst/df_helper/backends/sqlalchemy/
|
17
|
-
sibi_dst/df_helper/backends/sqlalchemy/
|
14
|
+
sibi_dst/df_helper/backends/sqlalchemy/_db_connection.py,sha256=R3_WY_lsQrfQwD6yAzH66MqvsgZdMd0HKcVChDQcbpM,8401
|
15
|
+
sibi_dst/df_helper/backends/sqlalchemy/_db_gatekeeper.py,sha256=GQwDy2JwPUx37vpwxPM5hg4ZydilPIP824y5C_clsl0,383
|
16
|
+
sibi_dst/df_helper/backends/sqlalchemy/_io_dask.py,sha256=Gsj1pa5PV4ZznnANfKwv6907d8bG3v_9FW8ACi-1_0Q,7372
|
17
|
+
sibi_dst/df_helper/backends/sqlalchemy/_load_from_db.py,sha256=Mzj0GcsXP_NcXpEt4iNCDDB-QmcEe0GKw20NThYL9vk,5542
|
18
|
+
sibi_dst/df_helper/backends/sqlalchemy/_model_registry.py,sha256=MHk64f5WDOKHQ_L4mM8L-I-Uep_y1dczAodxA9fDJHs,6667
|
19
|
+
sibi_dst/df_helper/backends/sqlalchemy/_sql_model_builder.py,sha256=RiCaVPME5wzgZ9xUGY0JOs_c2C0KcDIbTeMGpPupIa0,5242
|
18
20
|
sibi_dst/df_helper/core/__init__.py,sha256=LfmTqFh6GUZup-g95bcXgAxX7J5Hkve7ftLE_CJg_AE,409
|
19
21
|
sibi_dst/df_helper/core/_defaults.py,sha256=9UMEMu2wXznO5UzEhnQ82f_ZazZ20JRyRXIi3HP3gDw,4043
|
20
22
|
sibi_dst/df_helper/core/_filter_handler.py,sha256=Pmbzygry2mpkNPVS7DBMulHpAb1yYZNFqUU0bJTWJF0,11214
|
@@ -30,29 +32,29 @@ sibi_dst/osmnx_helper/basemaps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
|
|
30
32
|
sibi_dst/osmnx_helper/basemaps/calendar_html.py,sha256=UArt6FDgoCgoRte45Xo3IHqd-RNzW0YgitgZYfOFasY,4031
|
31
33
|
sibi_dst/osmnx_helper/basemaps/route_map_plotter.py,sha256=rsJidieojcqIoe0kBanZbrxcelrS6nWoAyWoQXWdPiQ,11849
|
32
34
|
sibi_dst/osmnx_helper/basemaps/router_plotter.py,sha256=UAiijn-J-jjX4YnL0_P9SFqTadrxMx-YK4djYhqPqfQ,10941
|
33
|
-
sibi_dst/osmnx_helper/route_path_builder.py,sha256=
|
35
|
+
sibi_dst/osmnx_helper/route_path_builder.py,sha256=XJJyu4YXegAkCRjE-knyQncwXaxDVXZhalYacLcb7e0,3557
|
34
36
|
sibi_dst/osmnx_helper/utils.py,sha256=HfxrmXVPq3akf68SiwncbAp7XI1ER-zp8YN_doh7YaY,20679
|
35
37
|
sibi_dst/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
36
38
|
sibi_dst/tests/test_data_wrapper_class.py,sha256=6uFmZR2DxnxQz49L5jT2ehlKvlLnpUHMLFB_PqqUq7k,3336
|
37
39
|
sibi_dst/utils/__init__.py,sha256=PQsG188_lnqgSFljkCc15Nyv933HnvmQ7XYs02m77Vc,1217
|
38
|
-
sibi_dst/utils/base.py,sha256=
|
39
|
-
sibi_dst/utils/clickhouse_writer.py,sha256=
|
40
|
+
sibi_dst/utils/base.py,sha256=Ar-2cCC6INdVvtEXUTf6vSFRtWjW--ohnk7Pg3VNfCk,11709
|
41
|
+
sibi_dst/utils/clickhouse_writer.py,sha256=pE-igxddDdxekJywsaWQqKlGXIvLjPMpoFBUJ24t9Tw,20255
|
40
42
|
sibi_dst/utils/credentials.py,sha256=cHJPPsmVyijqbUQIq7WWPe-lIallA-mI5RAy3YUuRME,1724
|
41
43
|
sibi_dst/utils/data_from_http_source.py,sha256=AcpKNsqTgN2ClNwuhgUpuNCx62r5_DdsAiKY8vcHEBA,1867
|
42
|
-
sibi_dst/utils/data_utils.py,sha256=
|
43
|
-
sibi_dst/utils/data_wrapper.py,sha256=
|
44
|
-
sibi_dst/utils/date_utils.py,sha256=
|
45
|
-
sibi_dst/utils/df_utils.py,sha256=
|
46
|
-
sibi_dst/utils/file_utils.py,sha256=
|
47
|
-
sibi_dst/utils/filepath_generator.py,sha256
|
48
|
-
sibi_dst/utils/log_utils.py,sha256=
|
49
|
-
sibi_dst/utils/manifest_manager.py,sha256=
|
50
|
-
sibi_dst/utils/parquet_saver.py,sha256=
|
51
|
-
sibi_dst/utils/phone_formatter.py,sha256=
|
44
|
+
sibi_dst/utils/data_utils.py,sha256=7bLidEjppieNoozDFb6OuRY0W995cxg4tiGAlkGfePI,7768
|
45
|
+
sibi_dst/utils/data_wrapper.py,sha256=mLQJmoXY5ywT0rtEw2Gf1pd0EomZYFiXuZhBY0LRvWg,19561
|
46
|
+
sibi_dst/utils/date_utils.py,sha256=txRVVf_7MVVc7DVaECwABe0gueRzbL47quOvKKARhi0,18071
|
47
|
+
sibi_dst/utils/df_utils.py,sha256=bQGromLOEdRTvbVVcuHq0vQ0fIgqhwOoD_eIp5v7VEY,10899
|
48
|
+
sibi_dst/utils/file_utils.py,sha256=cm__02IKCfEOzAKAZwdNIjnRL8H4XtPa6hKcj510pto,1310
|
49
|
+
sibi_dst/utils/filepath_generator.py,sha256=Ke_OwBjLJkNMeOP0QjbLIZpSMkzhAIxKyf4hZ5P5re0,12916
|
50
|
+
sibi_dst/utils/log_utils.py,sha256=daKptJtZW10UTezT6XAjcOabi94ukNVzfeeLDQ0O9hQ,27897
|
51
|
+
sibi_dst/utils/manifest_manager.py,sha256=9y4cV-Ig8O-ekhApp_UObTY-cTsl-bGnvKIThItEzg4,7394
|
52
|
+
sibi_dst/utils/parquet_saver.py,sha256=aYBlijqPAn-yuJXhmaRIteAN_IAQZvPh8I8Os2TLGgI,4861
|
53
|
+
sibi_dst/utils/phone_formatter.py,sha256=oeM22nLjhObENrpItCNeVpkYS4pXRm5hSxdk0M4nvwU,4580
|
52
54
|
sibi_dst/utils/storage_config.py,sha256=uaCBF8rgCeYkk-lxVSCjsic8O8HJKAu455MR-OBliCo,4325
|
53
55
|
sibi_dst/utils/storage_manager.py,sha256=yyZqT8XjTf4MKFrfznCmxXxOYz_TiWgtQhzqPoXR9So,6569
|
54
|
-
sibi_dst/utils/update_planner.py,sha256=
|
55
|
-
sibi_dst/utils/webdav_client.py,sha256=
|
56
|
+
sibi_dst/utils/update_planner.py,sha256=aeCpCK_uhkOeddP-wmV56Ib-4uhMgJlEjDUHI6R8y14,11346
|
57
|
+
sibi_dst/utils/webdav_client.py,sha256=D9J5d1f1qQwHGm5FE5AMVpOPwcU5oD7K8JZoKGP8NpM,5811
|
56
58
|
sibi_dst/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
57
59
|
sibi_dst/v2/df_helper/__init__.py,sha256=XuH6jKYAPg2DdRbsxxBSxp9X3x-ARyaT0xe27uILrVo,99
|
58
60
|
sibi_dst/v2/df_helper/_df_helper.py,sha256=9pED3bjQ2Z81zqzJrZ9e7SguoO4-hBmNTJK4WOKrr4M,9297
|
@@ -73,6 +75,6 @@ sibi_dst/v2/df_helper/core/_params_config.py,sha256=DYx2drDz3uF-lSPzizPkchhy-kxR
|
|
73
75
|
sibi_dst/v2/df_helper/core/_query_config.py,sha256=Y8LVSyaKuVkrPluRDkQoOwuXHQxner1pFWG3HPfnDHM,441
|
74
76
|
sibi_dst/v2/utils/__init__.py,sha256=6H4cvhqTiFufnFPETBF0f8beVVMpfJfvUs6Ne0TQZNY,58
|
75
77
|
sibi_dst/v2/utils/log_utils.py,sha256=rfk5VsLAt-FKpv6aPTC1FToIPiyrnHAFFBAkHme24po,4123
|
76
|
-
sibi_dst-2025.1.
|
77
|
-
sibi_dst-2025.1.
|
78
|
-
sibi_dst-2025.1.
|
78
|
+
sibi_dst-2025.8.1.dist-info/METADATA,sha256=1Pakz10A8gfHDQmnGcolkUqHgjE8W_DvyBDdxoZjyFU,2610
|
79
|
+
sibi_dst-2025.8.1.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
80
|
+
sibi_dst-2025.8.1.dist-info/RECORD,,
|
File without changes
|