sibi-dst 2025.9.3__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.
@@ -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
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.5.1,<2026.0.0)
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=D01Z2Ds4zES8uz5Zp7qOWD0EcfCllWgew7AWt2X1SQg,445
2
- sibi_dst/df_helper/__init__.py,sha256=CyDXtFhRnMrycktxNO8jGGkP0938QiScl56kMZS1Sf8,578
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=Lse0wlgHMEnyOfQTGD2OeT8U1ZK9aP93_42JkDk46r4,12636
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=L0GBvPXRAL_2PpaqyGabva6B99uNYrSVPiwEYfZWsvk,25308
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=Ur1V7J89nULdtvtFTr2nkKuCcIS-6tVBt5NWO87WyCc,7662
17
- sibi_dst/df_helper/backends/sqlalchemy/_load_from_db.py,sha256=urMT7f1WWieVdCYKjfzyhiEoNIgAlXcMx0rVnv2vMAk,2259
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
@@ -50,7 +50,7 @@ sibi_dst/utils/credentials.py,sha256=cHJPPsmVyijqbUQIq7WWPe-lIallA-mI5RAy3YUuRME
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=090s2odlgS77mSw150V6m8-pEpD4sJ7OvjeMKNjbXxg,11604
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=XUDLpMRqkKvBTdUhckhRzQyyLSaI9q5iCqcmeyHc-0Q,9609
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=CiXnIt_vojpfOkyARAHNzYFzChpon4MztcKKj96La6o,34374
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.3.dist-info/METADATA,sha256=9-JmuelSFfrcEonyZwEwkYNZrlR29zK7BbuODNdbvn4,2710
94
- sibi_dst-2025.9.3.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
95
- sibi_dst-2025.9.3.dist-info/RECORD,,
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,,