sibi-dst 2025.9.2__py3-none-any.whl → 2025.9.4__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 +6 -4
- sibi_dst/df_helper/__init__.py +1 -0
- sibi_dst/df_helper/_parquet_artifact.py +533 -113
- sibi_dst/df_helper/backends/parquet/_parquet_options.py +1 -281
- sibi_dst/df_helper/backends/sqlalchemy/_io_dask.py +349 -142
- sibi_dst/df_helper/backends/sqlalchemy/_load_from_db.py +17 -0
- sibi_dst/utils/clickhouse_writer.py +0 -1
- sibi_dst/utils/data_wrapper.py +460 -61
- sibi_dst/utils/parquet_saver.py +403 -161
- sibi_dst/utils/update_planner.py +553 -319
- sibi_dst/utils/write_gatekeeper.py +18 -0
- {sibi_dst-2025.9.2.dist-info → sibi_dst-2025.9.4.dist-info}/METADATA +2 -2
- {sibi_dst-2025.9.2.dist-info → sibi_dst-2025.9.4.dist-info}/RECORD +14 -13
- {sibi_dst-2025.9.2.dist-info → sibi_dst-2025.9.4.dist-info}/WHEEL +0 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
# write_gatekeeper.py
|
2
|
+
from __future__ import annotations
|
3
|
+
import threading
|
4
|
+
|
5
|
+
_LOCK = threading.Lock()
|
6
|
+
_SEMS: dict[str, threading.Semaphore] = {}
|
7
|
+
|
8
|
+
def get_write_sem(key: str, max_concurrency: int) -> threading.Semaphore:
|
9
|
+
"""
|
10
|
+
Return a process-local semaphore that caps concurrent writers for a given key.
|
11
|
+
Key should be a stable path prefix, e.g., 's3://bucket/prefix'.
|
12
|
+
"""
|
13
|
+
with _LOCK:
|
14
|
+
sem = _SEMS.get(key)
|
15
|
+
if sem is None:
|
16
|
+
sem = threading.Semaphore(max(1, int(max_concurrency)))
|
17
|
+
_SEMS[key] = sem
|
18
|
+
return sem
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: sibi-dst
|
3
|
-
Version: 2025.9.
|
3
|
+
Version: 2025.9.4
|
4
4
|
Summary: Data Science Toolkit
|
5
5
|
Author: Luis Valverde
|
6
6
|
Author-email: lvalverdeb@gmail.com
|
@@ -11,7 +11,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.13
|
12
12
|
Requires-Dist: clickhouse-connect (>=0.8.18,<0.9.0)
|
13
13
|
Requires-Dist: clickhouse-driver (>=0.2.9,<0.3.0)
|
14
|
-
Requires-Dist: dask[complete] (>=2025.
|
14
|
+
Requires-Dist: dask[complete] (>=2025.9.0,<2026.0.0)
|
15
15
|
Requires-Dist: mysqlclient (>=2.2.7,<3.0.0)
|
16
16
|
Requires-Dist: opentelemetry-exporter-otlp (>=1.35.0,<2.0.0)
|
17
17
|
Requires-Dist: opentelemetry-sdk (>=1.35.0,<2.0.0)
|
@@ -1,20 +1,20 @@
|
|
1
|
-
sibi_dst/__init__.py,sha256=
|
2
|
-
sibi_dst/df_helper/__init__.py,sha256=
|
1
|
+
sibi_dst/__init__.py,sha256=D4TMsAMGRl54J5PNYMDf_z0NcCnS_lZK1YHze2eJvpc,464
|
2
|
+
sibi_dst/df_helper/__init__.py,sha256=aOQFmWpLeSq-7O8IYEKaxR1nvuIe9F7SJsOsgwj1ECg,579
|
3
3
|
sibi_dst/df_helper/_artifact_updater_async.py,sha256=0lUwel-IkmKewRnmMv9GtuT-P6SivkIKtgOHvKchHlc,8462
|
4
4
|
sibi_dst/df_helper/_artifact_updater_threaded.py,sha256=M5GNZismOqMmBrcyfolP1DPv87VILQf_P18is_epn50,7238
|
5
5
|
sibi_dst/df_helper/_df_helper.py,sha256=rgVP4ggiCW6tTHmUz2UqUvLznwOtY5IyoVS3WSlg73U,17005
|
6
|
-
sibi_dst/df_helper/_parquet_artifact.py,sha256=
|
6
|
+
sibi_dst/df_helper/_parquet_artifact.py,sha256=0rTGR8v4GGHmhFG59cp6ikDUmLqfrtwbwPOKeQlkE84,32553
|
7
7
|
sibi_dst/df_helper/_parquet_reader.py,sha256=SKLpCeZdBEO86IRGNEp5IegE6lZtmNoXzjpGBoO-AZo,3215
|
8
8
|
sibi_dst/df_helper/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
9
9
|
sibi_dst/df_helper/backends/http/__init__.py,sha256=d1pfgYxbiYg7E0Iw8RbJ7xfqIfJShqqTBQQGU_S6OOo,105
|
10
10
|
sibi_dst/df_helper/backends/http/_http_config.py,sha256=eGPFdqZ5M3Tscqx2P93B6XoBEEzlmdt7yNg7PXUQnNQ,4726
|
11
11
|
sibi_dst/df_helper/backends/parquet/__init__.py,sha256=0A6BGHZLwiLBmuBBaUvEHfeWTcInvy2NbymlrI_nuXE,104
|
12
|
-
sibi_dst/df_helper/backends/parquet/_parquet_options.py,sha256=
|
12
|
+
sibi_dst/df_helper/backends/parquet/_parquet_options.py,sha256=ag_ss92BBHCvFPCh0BDRgeQj30xRzG7X9Z9XeUGm9Yg,10703
|
13
13
|
sibi_dst/df_helper/backends/sqlalchemy/__init__.py,sha256=LjWm9B7CweTvlvFOgB90XjSe0lVLILAIYMWKPkFXFm8,265
|
14
14
|
sibi_dst/df_helper/backends/sqlalchemy/_db_connection.py,sha256=6705rABdh0RY0JisxD7sE62m6890hMCAv_cpyHOMSvM,8729
|
15
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
|
17
|
-
sibi_dst/df_helper/backends/sqlalchemy/_load_from_db.py,sha256=
|
16
|
+
sibi_dst/df_helper/backends/sqlalchemy/_io_dask.py,sha256=-H1JgS6caJoTyt1py2ub_q4j2Ka7Hk4TvfyXurd0Rqc,16678
|
17
|
+
sibi_dst/df_helper/backends/sqlalchemy/_load_from_db.py,sha256=gjS8Pq8OqQdqONk9F7lB5XcsM5qfp5SR_mj9jBxmM2I,3013
|
18
18
|
sibi_dst/df_helper/backends/sqlalchemy/_model_registry.py,sha256=MHk64f5WDOKHQ_L4mM8L-I-Uep_y1dczAodxA9fDJHs,6667
|
19
19
|
sibi_dst/df_helper/backends/sqlalchemy/_sql_model_builder.py,sha256=yc5ij1oLOZvMN_mFWFUwuOoLnOOCxSerYpbmrHlWxzE,1480
|
20
20
|
sibi_dst/df_helper/core/__init__.py,sha256=LfmTqFh6GUZup-g95bcXgAxX7J5Hkve7ftLE_CJg_AE,409
|
@@ -45,12 +45,12 @@ sibi_dst/utils/boilerplate/base_data_cube.py,sha256=ErKTM2kT8LsSXADcyYvT436O_Mp0
|
|
45
45
|
sibi_dst/utils/boilerplate/base_parquet_artifact.py,sha256=oqPbjHFfChA9j1WL-eDAh7XLA3zmf-Rq7s_kzITVniA,3753
|
46
46
|
sibi_dst/utils/boilerplate/base_parquet_reader.py,sha256=3kN9_bbxyX-WuJLMBWejeApW2V_BDArSljhSUOAOhVU,692
|
47
47
|
sibi_dst/utils/business_days.py,sha256=dP0Xj4FhTBIvZZrZYLOHZl5zOpDAgWkD4p_1a7BOT7I,8461
|
48
|
-
sibi_dst/utils/clickhouse_writer.py,sha256=
|
48
|
+
sibi_dst/utils/clickhouse_writer.py,sha256=JCjLfPfsDDAvoMJeh0uVqVL5Je6mPcZn-G_EL9Pk6ms,10364
|
49
49
|
sibi_dst/utils/credentials.py,sha256=cHJPPsmVyijqbUQIq7WWPe-lIallA-mI5RAy3YUuRME,1724
|
50
50
|
sibi_dst/utils/dask_utils.py,sha256=FURwrNqij6ptxFhI4v7yaGkyOIIyW9lSPpMfE9-kxHY,1970
|
51
51
|
sibi_dst/utils/data_from_http_source.py,sha256=AcpKNsqTgN2ClNwuhgUpuNCx62r5_DdsAiKY8vcHEBA,1867
|
52
52
|
sibi_dst/utils/data_utils.py,sha256=7bLidEjppieNoozDFb6OuRY0W995cxg4tiGAlkGfePI,7768
|
53
|
-
sibi_dst/utils/data_wrapper.py,sha256=
|
53
|
+
sibi_dst/utils/data_wrapper.py,sha256=axHOmCG9cBJgjf5m8jpzsCCZzXJgynGs44rGe6FUrzk,29906
|
54
54
|
sibi_dst/utils/date_utils.py,sha256=hBVWu9_cqiZ-XsLR7QY9Iek09DQKLwrY1ZlYxWlXj7g,31101
|
55
55
|
sibi_dst/utils/df_utils.py,sha256=bQGromLOEdRTvbVVcuHq0vQ0fIgqhwOoD_eIp5v7VEY,10899
|
56
56
|
sibi_dst/utils/file_age_checker.py,sha256=44B3lwH_PLwzMfiKkgvJKjKx-qSgITIXxKfNbdf_VeA,11552
|
@@ -59,7 +59,7 @@ sibi_dst/utils/filepath_generator.py,sha256=Ke_OwBjLJkNMeOP0QjbLIZpSMkzhAIxKyf4h
|
|
59
59
|
sibi_dst/utils/iceberg_saver.py,sha256=l1UWJWrLqe2OxCdP1mRyXlG9It1-F3MN_ZvHPmxqRJ4,5253
|
60
60
|
sibi_dst/utils/log_utils.py,sha256=1xXTDfwMwWIdj37hjyXSpHx3ft2GMiXsAfxq9AArMTY,11588
|
61
61
|
sibi_dst/utils/manifest_manager.py,sha256=9y4cV-Ig8O-ekhApp_UObTY-cTsl-bGnvKIThItEzg4,7394
|
62
|
-
sibi_dst/utils/parquet_saver.py,sha256=
|
62
|
+
sibi_dst/utils/parquet_saver.py,sha256=zArbKYzh-SsT8EhWLRWJQH4loPzOtnPtBaSfRjHf3M0,19750
|
63
63
|
sibi_dst/utils/periods.py,sha256=8eTGi-bToa6_a8Vwyg4fkBPryyzft9Nzy-3ToxjqC8c,1434
|
64
64
|
sibi_dst/utils/phone_formatter.py,sha256=oeM22nLjhObENrpItCNeVpkYS4pXRm5hSxdk0M4nvwU,4580
|
65
65
|
sibi_dst/utils/progress/__init__.py,sha256=VELVxzo2cePN_-LL0veel8-F3po6tokY5MOOpu6pz1A,92
|
@@ -68,8 +68,9 @@ sibi_dst/utils/progress/sse_runner.py,sha256=PySHBXcpxd_eqLqZRBU1t8Ys7Df3SM-iz5R
|
|
68
68
|
sibi_dst/utils/storage_config.py,sha256=DLtP5jKVM0mdFdgRw6LQfRqyavMjJcCVU7GhsUCRH78,4427
|
69
69
|
sibi_dst/utils/storage_hive.py,sha256=eZ3nq2YWLUUG-06iJubSC15cwSHEbKKdKIwoVhD_I_E,8568
|
70
70
|
sibi_dst/utils/storage_manager.py,sha256=La1NY79bhRAmHWXp7QcXJZtbHoRboJMgoXOSXbIl1SA,6643
|
71
|
-
sibi_dst/utils/update_planner.py,sha256=
|
71
|
+
sibi_dst/utils/update_planner.py,sha256=49WoBq1AyKSYzQeOCSBNBAw3VWuE7NVh__31sTB5Eas,46594
|
72
72
|
sibi_dst/utils/webdav_client.py,sha256=D9J5d1f1qQwHGm5FE5AMVpOPwcU5oD7K8JZoKGP8NpM,5811
|
73
|
+
sibi_dst/utils/write_gatekeeper.py,sha256=V8sY9YMO-JuN8Ps7prqwVSjP4f1HGH9KiVV-aTPCC_k,569
|
73
74
|
sibi_dst/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
74
75
|
sibi_dst/v2/df_helper/__init__.py,sha256=XuH6jKYAPg2DdRbsxxBSxp9X3x-ARyaT0xe27uILrVo,99
|
75
76
|
sibi_dst/v2/df_helper/_df_helper.py,sha256=9pED3bjQ2Z81zqzJrZ9e7SguoO4-hBmNTJK4WOKrr4M,9297
|
@@ -90,6 +91,6 @@ sibi_dst/v2/df_helper/core/_params_config.py,sha256=DYx2drDz3uF-lSPzizPkchhy-kxR
|
|
90
91
|
sibi_dst/v2/df_helper/core/_query_config.py,sha256=Y8LVSyaKuVkrPluRDkQoOwuXHQxner1pFWG3HPfnDHM,441
|
91
92
|
sibi_dst/v2/utils/__init__.py,sha256=6H4cvhqTiFufnFPETBF0f8beVVMpfJfvUs6Ne0TQZNY,58
|
92
93
|
sibi_dst/v2/utils/log_utils.py,sha256=rfk5VsLAt-FKpv6aPTC1FToIPiyrnHAFFBAkHme24po,4123
|
93
|
-
sibi_dst-2025.9.
|
94
|
-
sibi_dst-2025.9.
|
95
|
-
sibi_dst-2025.9.
|
94
|
+
sibi_dst-2025.9.4.dist-info/METADATA,sha256=LKtGXXgxpOR9pL7rgBuGpySdppqMGi674oH_18tVKec,2710
|
95
|
+
sibi_dst-2025.9.4.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
96
|
+
sibi_dst-2025.9.4.dist-info/RECORD,,
|
File without changes
|