From f4a7307fd8ec2c2539f0ddd1c36ecb29fe0944be Mon Sep 17 00:00:00 2001 From: Aykut Bozkurt Date: Sat, 4 Apr 2026 08:01:55 +0300 Subject: [PATCH 1/3] Bump duckdb to v1.5.1 Signed-off-by: Aykut Bozkurt --- .gitignore | 1 + Pipfile | 2 +- Pipfile.lock | 1726 +++++++++-------- duckdb_pglake/Makefile | 2 +- duckdb_pglake/duckdb | 2 +- duckdb_pglake/duckdb-postgres | 2 +- duckdb_pglake/extension_config.cmake | 6 +- .../composite-type-resolution.patch | 53 +- .../patches/duckdb-postgres/numeric-nan.patch | 14 +- .../patches/duckdb-postgres/snapshot.patch | 29 +- duckdb_pglake/patches/duckdb/.gitkeep | 0 .../duckdb/parquet-virtual-column-stats.patch | 27 + .../patches/duckdb/return_stats.patch | 53 - duckdb_pglake/src/duckdb_pglake_extension.cpp | 41 + duckdb_pglake/src/fs/caching_file_system.cpp | 39 +- duckdb_pglake/src/fs/pg_lake_s3fs.cpp | 76 +- duckdb_pglake/src/fs/region_aware_s3fs.cpp | 8 +- .../include/pg_lake/fs/file_cache_manager.hpp | 4 + .../src/include/pg_lake/fs/pg_lake_s3fs.hpp | 27 +- .../include/pg_lake/fs/region_aware_s3fs.hpp | 4 + .../tests/pytests/test_create_table.py | 4 +- pg_lake_copy/tests/pytests/test_gcs_copy.py | 2 +- pg_lake_copy/tests/pytests/test_s3_copy.py | 2 +- pg_lake_engine/src/pgduck/read_data.c | 107 +- pg_lake_engine/src/pgduck/write_data.c | 16 +- pg_lake_spatial/tests/pytests/test_gdal.py | 3 +- pg_lake_table/tests/pytests/test_caching.py | 2 +- .../tests/pytests/test_column_inference.py | 2 +- .../test_create_iceberg_table_load_from.py | 4 +- .../tests/pytests/test_drop_table.py | 4 +- pg_lake_table/tests/pytests/test_explain.py | 6 +- .../tests/pytests/test_vacuum_failure.py | 2 +- pgduck_server/include/duckdb/duckdb_pglake.h | 2 + pgduck_server/src/duckdb/duckdb.c | 36 +- pgduck_server/src/duckdb/type_conversion.c | 156 +- pgduck_server/tests/pytests/test_caching.py | 12 +- pgduck_server/tests/pytests/test_pgbench.py | 22 +- pgduck_server/tests/pytests/test_s3.py | 2 +- test_common/helpers/iceberg.py | 2 +- 39 files changed, 1478 insertions(+), 1024 deletions(-) delete mode 100644 duckdb_pglake/patches/duckdb/.gitkeep create mode 100644 duckdb_pglake/patches/duckdb/parquet-virtual-column-stats.patch delete mode 100644 duckdb_pglake/patches/duckdb/return_stats.patch diff --git a/.gitignore b/.gitignore index 5a2073f3..6baca14a 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,4 @@ pg_lake_iceberg/logs/* pg_lake_table/logs/ .volume/ Dockerfile.alpine +duckdb_pglake/.cache/ diff --git a/Pipfile b/Pipfile index 66919de4..51599ae1 100644 --- a/Pipfile +++ b/Pipfile @@ -19,7 +19,7 @@ pyspark = {extras = ["sql"], version = "==3.5.3"} pytest-postgresql = "~=7.0" psycopg-binary = "~=3.2" sqlalchemy = "~=2.0" -duckdb = "==1.4.3" +duckdb = "==1.5.1" [dev-packages] black = "==25.9.0" diff --git a/Pipfile.lock b/Pipfile.lock index 67bf73b0..62421cd4 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "8ae640db0292b690d8da2e5df381908a0ab8fa6b0232562f25875feb5a74c045" + "sha256": "09899caf6a56d11aa288d8d2f58e8dd2ac32f989ebcf7ddf2ce15a4cd78a08fe" }, "pipfile-spec": 6, "requires": { @@ -33,36 +33,36 @@ }, "attrs": { "hashes": [ - "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11", - "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373" + "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", + "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32" ], "markers": "python_version >= '3.9'", - "version": "==25.4.0" + "version": "==26.1.0" }, "azure-core": { "hashes": [ - "sha256:7064f2c11e4b97f340e8e8c6d923b822978be3016e46b7bc4aa4b337cfb48aee", - "sha256:b3abe2c59e7d6bb18b38c275a5029ff80f98990e7c90a5e646249a56630fcc19" + "sha256:4ac7b70fab5438c3f68770649a78daf97833caa83827f91df9c14e0e0ea7d34f", + "sha256:8a90a562998dd44ce84597590fff6249701b98c0e8797c95fcdd695b54c35d74" ], "markers": "python_version >= '3.9'", - "version": "==1.37.0" + "version": "==1.39.0" }, "azure-storage-blob": { "hashes": [ - "sha256:65d1e25a4628b7b6acd20ff7902d8da5b4fde8e46e19c8f6d213a3abc3ece272", - "sha256:a1596cc4daf5dac9be115fcb5db67245eae894cf40e4248243754261f7b674a6" + "sha256:00fb1db28bf6a7b7ecaa48e3b1d5c83bfadacc5a678b77826081304bd87d6461", + "sha256:e7d98ea108258d29aa0efbfd591b2e2075fa1722a2fae8699f0b3c9de11eff41" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==12.27.1" + "version": "==12.28.0" }, "babel": { "hashes": [ - "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", - "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2" + "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", + "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35" ], "markers": "python_version >= '3.8'", - "version": "==2.17.0" + "version": "==2.18.0" }, "blinker": { "hashes": [ @@ -74,36 +74,36 @@ }, "boto3": { "hashes": [ - "sha256:37a43d42aebd06a8f93ee801ea1b7b5181ac42a30869ef403c9dadc160a748e5", - "sha256:811391611db88c8a061f6e6fabbd7ca784ad9de04490a879f091cbaa9de7de74" + "sha256:544846fdb10585bb7837e409868e8e04c6b372fa04479ba1597ce82cf1242076", + "sha256:cc5621e603982cb3145b7f6c9970e02e297a1a0eb94637cc7f7b69d3017640ee" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==1.42.16" + "version": "==1.42.83" }, "botocore": { "hashes": [ - "sha256:29ee8555cd5d5023350405387cedcf3fe1c7f02fcb8060bf9e01602487482c25", - "sha256:b1f584a0f8645c12e07bf6ec9c18e05221a789f2a9b2d3c6291deb42f8c1c542" + "sha256:34bc8cb64b17ac17f8901f073fe4fc9572a5cac9393a37b2b3ea372a83b87f4a", + "sha256:ec0c3ecb3772936ed22a3bdda09883b34858933f71004686d460d829bab39d8e" ], "markers": "python_version >= '3.9'", - "version": "==1.42.16" + "version": "==1.42.83" }, "cachetools": { "hashes": [ - "sha256:69a7a52634fed8b8bf6e24a050fb60bff1c9bd8f6d24572b99c32d4e71e62a51", - "sha256:82c5c05585e70b6ba2d3ae09ea60b79548872185d2f24ae1f2709d37299fd607" + "sha256:16c33e1f276b9a9c0b49ab5782d901e3ad3de0dd6da9bf9bcd29ac5672f2f9e6", + "sha256:8c9717235b3c651603fff0076db52d6acbfd1b338b8ed50256092f7ce9c85bda" ], "markers": "python_version >= '3.9'", - "version": "==6.2.4" + "version": "==6.2.6" }, "certifi": { "hashes": [ - "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b", - "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316" + "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", + "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7" ], "markers": "python_version >= '3.7'", - "version": "==2025.11.12" + "version": "==2026.2.25" }, "cffi": { "hashes": [ @@ -197,130 +197,146 @@ }, "charset-normalizer": { "hashes": [ - "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad", - "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93", - "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394", - "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89", - "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc", - "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86", - "sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63", - "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d", - "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f", - "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8", - "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0", - "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505", - "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161", - "sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af", - "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152", - "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318", - "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72", - "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4", - "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e", - "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3", - "sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576", - "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c", - "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1", - "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8", - "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1", - "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2", - "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44", - "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26", - "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88", - "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016", - "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede", - "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf", - "sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a", - "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc", - "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0", - "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84", - "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db", - "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1", - "sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7", - "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed", - "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8", - "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133", - "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e", - "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef", - "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14", - "sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2", - "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0", - "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d", - "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828", - "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", - "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf", - "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6", - "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328", - "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090", - "sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa", - "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381", - "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", - "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb", - "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc", - "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", - "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec", - "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc", - "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac", - "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e", - "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313", - "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569", - "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3", - "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d", - "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525", - "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894", - "sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3", - "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9", - "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a", - "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9", - "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14", - "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25", - "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50", - "sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf", - "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1", - "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3", - "sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac", - "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e", - "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815", - "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c", - "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6", - "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6", - "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e", - "sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4", - "sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84", - "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69", - "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15", - "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191", - "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0", - "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897", - "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd", - "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", - "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794", - "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d", - "sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074", - "sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3", - "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224", - "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838", - "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a", - "sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d", - "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d", - "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f", - "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8", - "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490", - "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966", - "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", - "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3", - "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e", - "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608" + "sha256:007d05ec7321d12a40227aae9e2bc6dca73f3cb21058999a1df9e193555a9dcc", + "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", + "sha256:07d9e39b01743c3717745f4c530a6349eadbfa043c7577eef86c502c15df2c67", + "sha256:08e721811161356f97b4059a9ba7bafb23ea5ee2255402c42881c214e173c6b4", + "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", + "sha256:0ea948db76d31190bf08bd371623927ee1339d5f2a0b4b1b4a4439a65298703c", + "sha256:0f7eb884681e3938906ed0434f20c63046eacd0111c4ba96f27b76084cd679f5", + "sha256:12a6fff75f6bc66711b73a2f0addfc4c8c15a20e805146a02d147a318962c444", + "sha256:12d8baf840cc7889b37c7c770f478adea7adce3dcb3944d02ec87508e2dcf153", + "sha256:14265bfe1f09498b9d8ec91e9ec9fa52775edf90fcbde092b25f4a33d444fea9", + "sha256:16d971e29578a5e97d7117866d15889a4a07befe0e87e703ed63cd90cb348c01", + "sha256:177a0ba5f0211d488e295aaf82707237e331c24788d8d76c96c5a41594723217", + "sha256:1a87ca9d5df6fe460483d9a5bbf2b18f620cbed41b432e2bddb686228282d10b", + "sha256:1c2a768fdd44ee4a9339a9b0b130049139b8ce3c01d2ce09f67f5a68048d477c", + "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", + "sha256:1dc8b0ea451d6e69735094606991f32867807881400f808a106ee1d963c46a83", + "sha256:1efde3cae86c8c273f1eb3b287be7d8499420cf2fe7585c41d370d3e790054a5", + "sha256:202389074300232baeb53ae2569a60901f7efadd4245cf3a3bf0617d60b439d7", + "sha256:203104ed3e428044fd943bc4bf45fa73c0730391f9621e37fe39ecf477b128cb", + "sha256:2257141f39fe65a3fdf38aeccae4b953e5f3b3324f4ff0daf9f15b8518666a2c", + "sha256:298930cec56029e05497a76988377cbd7457ba864beeea92ad7e844fe74cd1f1", + "sha256:2cd4a60d0e2fb04537162c62bbbb4182f53541fe0ede35cdf270a1c1e723cc42", + "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", + "sha256:2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df", + "sha256:30b8d1d8c52a48c2c5690e152c169b673487a2a58de1ec7393196753063fcd5e", + "sha256:320ade88cfb846b8cd6b4ddf5ee9e80ee0c1f52401f2456b84ae1ae6a1a5f207", + "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", + "sha256:36836d6ff945a00b88ba1e4572d721e60b5b8c98c155d465f56ad19d68f23734", + "sha256:38c0109396c4cfc574d502df99742a45c72c08eff0a36158b6f04000043dbf38", + "sha256:3946fa46a0cf3e4c8cb1cc52f56bb536310d34f25f01ca9b6c16afa767dab110", + "sha256:3bec022aec2c514d9cf199522a802bd007cd588ab17ab2525f20f9c34d067c18", + "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", + "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", + "sha256:3dedcc22d73ec993f42055eff4fcfed9318d1eeb9a6606c55892a26964964e48", + "sha256:4042d5c8f957e15221d423ba781e85d553722fc4113f523f2feb7b188cc34c5e", + "sha256:481551899c856c704d58119b5025793fa6730adda3571971af568f66d2424bb5", + "sha256:4dc1e73c36828f982bfe79fadf5919923f8a6f4df2860804db9a98c48824ce8d", + "sha256:4e5163c14bffd570ef2affbfdd77bba66383890797df43dc8b4cc7d6f500bf53", + "sha256:511ef87c8aec0783e08ac18565a16d435372bc1ac25a91e6ac7f5ef2b0bff790", + "sha256:532bc9bf33a68613fd7d65e4b1c71a6a38d7d42604ecf239c77392e9b4e8998c", + "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", + "sha256:5649fd1c7bade02f320a462fdefd0b4bd3ce036065836d4f42e0de958038e116", + "sha256:56be790f86bfb2c98fb742ce566dfb4816e5a83384616ab59c49e0604d49c51d", + "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", + "sha256:5ed6ab538499c8644b8a3e18debabcd7ce684f3fa91cf867521a7a0279cab2d6", + "sha256:6178f72c5508bfc5fd446a5905e698c6212932f25bcdd4b47a757a50605a90e2", + "sha256:6370e8686f662e6a3941ee48ed4742317cafbe5707e36406e9df792cdb535776", + "sha256:64f02c6841d7d83f832cd97ccf8eb8a906d06eb95d5276069175c696b024b60a", + "sha256:65bcd23054beab4d166035cabbc868a09c1a49d1efe458fe8e4361215df40265", + "sha256:66671f93accb62ed07da56613636f3641f1a12c13046ce91ffc923721f23c008", + "sha256:6696b7688f54f5af4462118f0bfa7c1621eeb87154f77fa04b9295ce7a8f2943", + "sha256:6785f414ae0f3c733c437e0f3929197934f526d19dfaa75e18fdb4f94c6fb374", + "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", + "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", + "sha256:6e0d51f618228538a3e8f46bd246f87a6cd030565e015803691603f55e12afb5", + "sha256:6ed74185b2db44f41ef35fd1617c5888e59792da9bbc9190d6c7300617182616", + "sha256:708838739abf24b2ceb208d0e22403dd018faeef86ddac04319a62ae884c4f15", + "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", + "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", + "sha256:750e02e074872a3fad7f233b47734166440af3cdea0add3e95163110816d6752", + "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", + "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", + "sha256:7641bb8895e77f921102f72833904dcd9901df5d6d72a2ab8f31d04b7e51e4e7", + "sha256:7804338df6fcc08105c7745f1502ba68d900f45fd770d5bdd5288ddccb8a42d8", + "sha256:80d04837f55fc81da168b98de4f4b797ef007fc8a79ab71c6ec9bc4dd662b15b", + "sha256:813c0e0132266c08eb87469a642cb30aaff57c5f426255419572aaeceeaa7bf4", + "sha256:82b271f5137d07749f7bf32f70b17ab6eaabedd297e75dce75081a24f76eb545", + "sha256:84c018e49c3bf790f9c2771c45e9313a08c2c2a6342b162cd650258b57817706", + "sha256:8751d2787c9131302398b11e6c8068053dcb55d5a8964e114b6e196cf16cb366", + "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", + "sha256:87fad7d9ba98c86bcb41b2dc8dbb326619be2562af1f8ff50776a39e55721c5a", + "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", + "sha256:8e385e4267ab76874ae30db04c627faaaf0b509e1ccc11a95b3fc3e83f855c00", + "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", + "sha256:94e1885b270625a9a828c9793b4d52a64445299baa1fea5a173bf1d3dd9a1a5a", + "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", + "sha256:a277ab8928b9f299723bc1a2dabb1265911b1a76341f90a510368ca44ad9ab66", + "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", + "sha256:a6c5863edfbe888d9eff9c8b8087354e27618d9da76425c119293f11712a6319", + "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", + "sha256:adb2597b428735679446b46c8badf467b4ca5f5056aae4d51a19f9570301b1ad", + "sha256:ae196f021b5e7c78e918242d217db021ed2a6ace2bc6ae94c0fc596221c7f58d", + "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", + "sha256:aed52fea0513bac0ccde438c188c8a471c4e0f457c2dd20cdbf6ea7a450046c7", + "sha256:aef65cd602a6d0e0ff6f9930fcb1c8fec60dd2cfcb6facaf4bdb0e5873042db0", + "sha256:af21eb4409a119e365397b2adbaca4c9ccab56543a65d5dbd9f920d6ac29f686", + "sha256:b14b2d9dac08e28bb8046a1a0434b1750eb221c8f5b87a68f4fa11a6f97b5e34", + "sha256:bb6d88045545b26da47aa879dd4a89a71d1dce0f0e549b1abcb31dfe4a8eac49", + "sha256:bb8cc7534f51d9a017b93e3e85b260924f909601c3df002bcdb58ddb4dc41a5c", + "sha256:bc17a677b21b3502a21f66a8cc64f5bfad4df8a0b8434d661666f8ce90ac3af1", + "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", + "sha256:bd9b23791fe793e4968dba0c447e12f78e425c59fc0e3b97f6450f4781f3ee60", + "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", + "sha256:c0f081d69a6e58272819b70288d3221a6ee64b98df852631c80f293514d3b274", + "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", + "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", + "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", + "sha256:c593052c465475e64bbfe5dbd81680f64a67fdc752c56d7a0ae205dc8aeefe0f", + "sha256:cdd68a1fb318e290a2077696b7eb7a21a49163c455979c639bf5a5dcdc46617d", + "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", + "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", + "sha256:cf29836da5119f3c8a8a70667b0ef5fdca3bb12f80fd06487cfa575b3909b393", + "sha256:d4a48e5b3c2a489fae013b7589308a40146ee081f6f509e047e0e096084ceca1", + "sha256:d560742f3c0d62afaccf9f41fe485ed69bd7661a241f86a3ef0f0fb8b1a397af", + "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", + "sha256:d61f00a0869d77422d9b2aba989e2d24afa6ffd552af442e0e58de4f35ea6d00", + "sha256:d635aab80466bc95771bb78d5370e74d36d1fe31467b6b29b8b57b2a3cd7d22c", + "sha256:dca4bbc466a95ba9c0234ef56d7dd9509f63da22274589ebd4ed7f1f4d4c54e3", + "sha256:dd915403e231e6b1809fe9b6d9fc55cf8fb5e02765ac625d9cd623342a7905d7", + "sha256:e044c39e41b92c845bc815e5ae4230804e8e7bc29e399b0437d64222d92809dd", + "sha256:e060d01aec0a910bdccb8be71faf34e7799ce36950f8294c8bf612cba65a2c9e", + "sha256:e1421b502d83040e6d7fb2fb18dff63957f720da3d77b2fbd3187ceb63755d7b", + "sha256:e17b8d5d6a8c47c85e68ca8379def1303fd360c3e22093a807cd34a71cd082b8", + "sha256:e5f4d355f0a2b1a31bc3edec6795b46324349c9cb25eed068049e4f472fb4259", + "sha256:e712b419df8ba5e42b226c510472b37bd57b38e897d3eca5e8cfd410a29fa859", + "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", + "sha256:e80c8378d8f3d83cd3164da1ad2df9e37a666cdde7b1cb2298ed0b558064be30", + "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", + "sha256:eca9705049ad3c7345d574e3510665cb2cf844c2f2dcfe675332677f081cbd46", + "sha256:ed065083d0898c9d5b4bbec7b026fd755ff7454e6e8b73a67f8c744b13986e24", + "sha256:edac0f1ab77644605be2cbba52e6b7f630731fc42b34cb0f634be1a6eface56a", + "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", + "sha256:f22dec1690b584cea26fade98b2435c132c1b5f68e39f5a0b7627cd7ae31f1dc", + "sha256:f495a1652cf3fbab2eb0639776dad966c2fb874d79d87ca07f9d5f059b8bd215", + "sha256:f496c9c3cc02230093d8330875c4c3cdfc3b73612a5fd921c65d39cbcef08063", + "sha256:f59099f9b66f0d7145115e6f80dd8b1d847176df89b234a5a6b3f00437aa0832", + "sha256:f59ad4c0e8f6bba240a9bb85504faa1ab438237199d4cce5f622761507b8f6a6", + "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", + "sha256:fea24543955a6a729c45a73fe90e08c743f0b3334bbf3201e6c4bc1b0c7fa464" ], "markers": "python_version >= '3.7'", - "version": "==3.4.4" + "version": "==3.4.7" }, "click": { "hashes": [ - "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a", - "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6" + "sha256:14162b8b3b3550a7d479eafa77dfd3c38d9dc8951f6f69c78913a8f9a7540fd5", + "sha256:1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d" ], "markers": "python_version >= '3.10'", - "version": "==8.3.1" + "version": "==8.3.2" }, "colorama": { "hashes": [ @@ -332,63 +348,58 @@ }, "cryptography": { "hashes": [ - "sha256:00a5e7e87938e5ff9ff5447ab086a5706a957137e6e433841e9d24f38a065217", - "sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d", - "sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc", - "sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71", - "sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971", - "sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a", - "sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926", - "sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc", - "sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d", - "sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b", - "sha256:22d7e97932f511d6b0b04f2bfd818d73dcd5928db509460aaf48384778eb6d20", - "sha256:23b1a8f26e43f47ceb6d6a43115f33a5a37d57df4ea0ca295b780ae8546e8044", - "sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3", - "sha256:39b6755623145ad5eff1dab323f4eae2a32a77a7abef2c5089a04a3d04366715", - "sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4", - "sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506", - "sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f", - "sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0", - "sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683", - "sha256:50fc3343ac490c6b08c0cf0d704e881d0d660be923fd3076db3e932007e726e3", - "sha256:516ea134e703e9fe26bcd1277a4b59ad30586ea90c365a87781d7887a646fe21", - "sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91", - "sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c", - "sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8", - "sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df", - "sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c", - "sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb", - "sha256:6f61efb26e76c45c4a227835ddeae96d83624fb0d29eb5df5b96e14ed1a0afb7", - "sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04", - "sha256:760f83faa07f8b64e9c33fc963d790a2edb24efb479e3520c14a45741cd9b2db", - "sha256:78a97cf6a8839a48c49271cdcbd5cf37ca2c1d6b7fdd86cc864f302b5e9bf459", - "sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea", - "sha256:8a6e050cb6164d3f830453754094c086ff2d0b2f3a897a1d9820f6139a1f0914", - "sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717", - "sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9", - "sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac", - "sha256:a23582810fedb8c0bc47524558fb6c56aac3fc252cb306072fd2815da2a47c32", - "sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec", - "sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1", - "sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb", - "sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac", - "sha256:b419ae593c86b87014b9be7396b385491ad7f320bde96826d0dd174459e54665", - "sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e", - "sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb", - "sha256:c8daeb2d2174beb4575b77482320303f3d39b8e81153da4f0fb08eb5fe86a6c5", - "sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936", - "sha256:d55f3dffadd674514ad19451161118fd010988540cee43d8bc20675e775925de", - "sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372", - "sha256:db391fa7c66df6762ee3f00c95a89e6d428f4d60e7abc8328f4fe155b5ac6e54", - "sha256:dfb781ff7eaa91a6f7fd41776ec37c5853c795d3b358d4896fdbb5df168af422", - "sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849", - "sha256:e7aec276d68421f9574040c26e2a7c3771060bc0cff408bae1dcb19d3ab1e63c", - "sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963", - "sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018" + "sha256:02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70", + "sha256:063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d", + "sha256:12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a", + "sha256:12f0fa16cc247b13c43d56d7b35287ff1569b5b1f4c5e87e92cc4fcc00cd10c0", + "sha256:22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97", + "sha256:26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30", + "sha256:27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759", + "sha256:2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c", + "sha256:2ea0f37e9a9cf0df2952893ad145fd9627d326a59daec9b0802480fa3bcd2ead", + "sha256:2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275", + "sha256:341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58", + "sha256:380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f", + "sha256:3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361", + "sha256:3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507", + "sha256:456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa", + "sha256:4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b", + "sha256:50575a76e2951fe7dbd1f56d181f8c5ceeeb075e9ff88e7ad997d2f42af06e7b", + "sha256:639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8", + "sha256:64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8", + "sha256:6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72", + "sha256:67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175", + "sha256:6728c49e3b2c180ef26f8e9f0a883a2c585638db64cf265b49c9ba10652d430e", + "sha256:6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124", + "sha256:69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a", + "sha256:760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c", + "sha256:79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f", + "sha256:7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d", + "sha256:7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4", + "sha256:7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c", + "sha256:8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290", + "sha256:8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca", + "sha256:8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d", + "sha256:90e5f0a7b3be5f40c3a0a0eafb32c681d8d2c181fc2a1bdabe9b3f611d9f6b1a", + "sha256:97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed", + "sha256:9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a", + "sha256:9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb", + "sha256:a3e84d5ec9ba01f8fd03802b2147ba77f0c8f2617b2aff254cedd551844209c8", + "sha256:aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707", + "sha256:b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410", + "sha256:b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736", + "sha256:bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2", + "sha256:c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4", + "sha256:c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013", + "sha256:cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19", + "sha256:d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b", + "sha256:d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738", + "sha256:d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463", + "sha256:ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77", + "sha256:ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4" ], "markers": "python_version >= '3.8' and python_full_version not in '3.9.0, 3.9.1'", - "version": "==46.0.3" + "version": "==46.0.6" }, "daff": { "hashes": [ @@ -399,28 +410,28 @@ }, "dbt-adapters": { "hashes": [ - "sha256:05bb99c30bd7ca0153976595d46c59354302ab076051f004e92a841f117e71be", - "sha256:87767bdf33689c468bab2dc063930236c7d2cf2c69e07152d8e9df382cd75e1a" + "sha256:28fca9f9c2f310706ce02c8f7b0f297edca14d6bd97ad7928aac55af4ce2972f", + "sha256:9217a2f8dd35425cafc9093dae70ea12b4b8fc414e3abce8a44d44d5c2fff563" ], "markers": "python_full_version >= '3.10.0'", - "version": "==1.22.2" + "version": "==1.22.10" }, "dbt-common": { "hashes": [ - "sha256:883a0b4af3e9a03e15b0d4862b654c5316d9525303683a8ead4dcc406eaa8a9a", - "sha256:f83f2b4c1ed234ef38edc6817e0c2bd19f27c653bc1eb8b8411285fe670c2d3c" + "sha256:e11b81903107d9f254d0ec7ac14b2bcf6d531e46456cbc7881fdbfeb9bbd8eec", + "sha256:f99304cf93f549c09d302eb61d9b280748bbe24e2245e214189ea08b41196ec3" ], "markers": "python_version >= '3.10'", - "version": "==1.37.2" + "version": "==1.37.3" }, "dbt-core": { "hashes": [ - "sha256:3306fee149b9f4e648071f2c9a46c0551100e1c829f13ad7ce026eb7226ad454", - "sha256:ac332fd61a4494494f48e1bbdc0696e309e79036b94eb0a929233bb71f4b3898" + "sha256:047b4ac6bd4541dd33a6642dedd7fcd8b998e3f5ec6e7083436b369558a995d6", + "sha256:3bacae28f4c687280d91671a1694f52a1654e472bebc8313b37870ac3d61e42b" ], "index": "pypi", "markers": "python_version >= '3.10'", - "version": "==1.11.2" + "version": "==1.11.7" }, "dbt-extractor": { "hashes": [ @@ -455,11 +466,11 @@ }, "dbt-protos": { "hashes": [ - "sha256:661dbc5fedd13bd48ef9cd7dd1c451fa2288dcae6202772f6e3a65f4e0dde427", - "sha256:f04910d664506f0dd9052b58a25419da86cc1c5cb671ab0150b653959174757a" + "sha256:6cc4b2146ccdf77d597534a0525c97e37d68b0ca34334661f37650d81e09632b", + "sha256:f8c4bef794ee3c442248b4c8f7cba3d0af46ad389d4960c0a73a3b307f9434fa" ], "markers": "python_version >= '3.6'", - "version": "==1.0.410" + "version": "==1.0.443" }, "dbt-semantic-interfaces": { "hashes": [ @@ -471,69 +482,63 @@ }, "deepdiff": { "hashes": [ - "sha256:ec56d7a769ca80891b5200ec7bd41eec300ced91ebcc7797b41eb2b3f3ff643a", - "sha256:ee8708a7f7d37fb273a541fa24ad010ed484192cd0c4ffc0fa0ed5e2d4b9e78b" + "sha256:186dcbd181e4d76cef11ab05f802d0056c5d6083c5a6748c1473e9d7481e183e", + "sha256:4d22034a866c3928303a9332c279362f714192d9305bac17c498720d095fd1b4" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==8.6.1" + "version": "==8.6.2" }, "duckdb": { "hashes": [ - "sha256:006aca6a6d6736c441b02ff5c7600b099bb8b7f4de094b8b062137efddce42df", - "sha256:130c6760f6c573f9c9fe9aba56adba0fab48811a4871b7b8fd667318b4a3e8da", - "sha256:16952ac05bd7e7b39946695452bf450db1ebbe387e1e7178e10f593f2ea7b9a8", - "sha256:1b35491db98ccd11d151165497c084a9d29d3dc42fc80abea2715a6c861ca43d", - "sha256:1b9b445970fd18274d5ac07a0b24c032e228f967332fb5ebab3d7db27738c0e4", - "sha256:1bb8bd5a3dd205983726185b280a211eacc9f5bc0c4d4505bec8c87ac33a8ccb", - "sha256:1e5457dda91b67258aae30fb1a0df84183a9f6cd27abac1d5536c0d876c6dfa1", - "sha256:20c88effaa557a11267706b01419c542fe42f893dee66e5a6daa5974ea2d4a46", - "sha256:23a3a077821bed1768a84ac9cbf6b6487ead33e28e62cb118bda5fb8f9e53dea", - "sha256:23b12854032c1a58d0452e2b212afa908d4ce64171862f3792ba9a596ba7c765", - "sha256:274d4a31aba63115f23e7e7b401e3e3a937f3626dc9dea820a9c7d3073f450d2", - "sha256:2b195270ff1a661f22cbd547a215baff265b7d4469a76a215c8992b5994107c3", - "sha256:2b30245375ea94ab528c87c61fc3ab3e36331180b16af92ee3a37b810a745d24", - "sha256:316711a9e852bcfe1ed6241a5f654983f67e909e290495f3562cccdf43be8180", - "sha256:366bf607088053dce845c9d24c202c04d78022436cc5d8e4c9f0492de04afbe7", - "sha256:4f868a7e6d9b37274a1aa34849ea92aa964e9bd59a5237d6c17e8540533a1e4f", - "sha256:4fef6a053a1c485292000bf0c338bba60f89d334f6a06fc76ba4085a5a322b76", - "sha256:5634e40e1e2d972e4f75bced1fbdd9e9e90faa26445c1052b27de97ee546944a", - "sha256:6302452e57aef29aae3977063810ed7b2927967b97912947b9cca45c1c21955f", - "sha256:6db124f53a3edcb32b0a896ad3519e37477f7e67bf4811cb41ab60c1ef74e4c8", - "sha256:702dabbc22b27dc5b73e7599c60deef3d8c59968527c36b391773efddd8f4cf1", - "sha256:813f189039b46877b5517f1909c7b94a8fe01b4bde2640ab217537ea0fe9b59b", - "sha256:854b79375fa618f6ffa8d84fb45cbc9db887f6c4834076ea10d20bc106f1fd90", - "sha256:8afba22c370f06b7314aa46bfed052509269e482bcfb3f7b1ea0fa17ae49ce42", - "sha256:8d080e8d1bf2d226423ec781f539c8f6b6ef3fd42a9a58a7160de0a00877a21f", - "sha256:8d53b217698a76c4957e2c807dd9295d409146f9d3d7932f372883201ba9d25a", - "sha256:90f241f25cffe7241bf9f376754a5845c74775e00e1c5731119dc88cd71e0cb2", - "sha256:9dc049ba7e906cb49ca2b6d4fbf7b6615ec3883193e8abb93f0bef2652e42dda", - "sha256:9e625b2b4d52bafa1fd0ebdb0990c3961dac8bb00e30d327185de95b68202131", - "sha256:a2813f4635f4d6681cc3304020374c46aca82758c6740d7edbc237fe3aae2744", - "sha256:a7c864df027da1ee95f0c32def67e15d02cd4a906c9c1cbae82c09c5112f526b", - "sha256:a8b0a8764e1b5dd043d168c8f749314f7a1252b5a260fa415adaa26fa3b958fd", - "sha256:aa26a7406205bc1426cee28bdfdf084f669a5686977dafa4c3ec65873989593c", - "sha256:caa2164c91f7e91befb1ffb081b3cd97a137117533aef7abe1538b03ad72e3a9", - "sha256:d0ff08388ef8b1d1a4c95c321d6c5fa11201b241036b1ee740f9d841df3d6ba2", - "sha256:de984cd24a6cbefdd6d4a349f7b9a46e583ca3e58ce10d8def0b20a6e5fcbe78", - "sha256:deab351ac43b6282a3270e3d40e3d57b3b50f472d9fd8c30975d88a31be41231", - "sha256:ef7ef15347ce97201b1b5182a5697682679b04c3374d5a01ac10ba31cf791b95", - "sha256:efa7f1191c59e34b688fcd4e588c1b903a4e4e1f4804945902cf0b20e08a9001", - "sha256:fbc63ffdd03835f660155b37a1b6db2005bcd46e5ad398b8cac141eb305d2a3d", - "sha256:fea43e03604c713e25a25211ada87d30cd2a044d8f27afab5deba26ac49e5268" + "sha256:054ad424b051b334052afac58cb216f3b1ebb8579fc8c641e60f0182e8725ea9", + "sha256:05fc91767d0cfc4cf2fa68966ab5b479ac07561752e42dd0ae30327bd160f64a", + "sha256:0a6acc2040bec1f05de62a2f3f68f4c12f3ec7d6012b4317d0ab1a195af26225", + "sha256:26e56b5f0c96189e3288d83cf7b476e23615987902f801e5788dee15ee9f24a9", + "sha256:36e8e32621a9e2a9abe75dc15a4b54a3997f2d8b1e53ad754bae48a083c91130", + "sha256:40c5220ec93790b18ec6278da9c6ac2608d997ee6d6f7cd44c5c3992764e8e71", + "sha256:446d500a2977c6ae2077f340c510a25956da5c77597175c316edfa87248ceda3", + "sha256:46f92ada9023e59f27edc048167b31ac9a03911978b1296c845a34462a27f096", + "sha256:482f8a13f2600f527e427f73c42b5aa75536f9892868068f0aaf573055a0135f", + "sha256:553c273a6a8f140adaa6da6a6135c7f95bdc8c2e5f95252fcdf9832d758e2141", + "sha256:5ae7c0d744d64e2753149634787cc4ab60f05ef1e542b060eeab719f3cdb7723", + "sha256:5d4147422d91ccdc2d2abf6ed24196025e020259d1d267970ae20c13c2ce84b1", + "sha256:6af347debc8b721aa72e48671166282da979d5e5ae52dbc660ab417282b48e23", + "sha256:6ba302115f63f6482c000ccfd62efdb6c41d9d182a5bcd4a90e7ab8cd13856eb", + "sha256:6f7361d66cc801d9eb4df734b139cd7b0e3c257a16f3573ebd550ddb255549e6", + "sha256:715f05ea198d20d7f8b407b9b84e0023d17f2b9096c194cea702b7840e74f1f7", + "sha256:71dddcebbc5a70e946a06c30b59b5dd7999c9833d307168f90fb4e4b672ab63e", + "sha256:8150c569b2aa4573b51ba8475e814aa41fd53a3d510c1ffb96f1139f46faf611", + "sha256:8843bd9594e1387f1e601439e19ad73abdf57356104fd1e53a708255bb95a13d", + "sha256:8c0088765747ae5d6c9f89987bb36f9fb83564f07090d721344ce8e1abedffea", + "sha256:972d0dbf283508f9bc446ee09c3838cb7c7f114b5bdceee41753288c97fe2f7c", + "sha256:a28531cee2a5a42d89f9ba4da53bfeb15681f12acc0263476c8705380dadce07", + "sha256:a3be2072315982e232bfe49c9d3db0a59ba67b2240a537ef42656cc772a887c7", + "sha256:ac2804043bd1bc10b5da18f8f4c706877197263a510c41be9b4c0062f5783dcc", + "sha256:afab8b4b1f4469c3879bb049dd039f8fce402712050324e9524a43d7324c5e87", + "sha256:b370d1620a34a4538ef66524fcee9de8171fa263c701036a92bc0b4c1f2f9c6d", + "sha256:b8b0808dba0c63b7633bdaefb34e08fe0612622224f9feb0e7518904b1615101", + "sha256:bc7ca6a1a40e7e4c933017e6c09ef18032add793df4e42624c6c0c87e0bebdad", + "sha256:caa65e1f5bf007430bf657c37cab7ab81a4ddf8d337e3062bcc5085d17ef038b", + "sha256:d68c5a01a283cb13b79eafe016fe5869aa11bff8c46e7141c70aa0aac808010f", + "sha256:da137802688190835b4c863cafa77fd7e29dff662ee6d905a9ffc14f00299c91", + "sha256:e56a20ab6cdb90a95b0c99652e28de3504ce77129087319c03c9098266183ae5", + "sha256:e878ccb7d20872065e1597935fdb5e65efa43220c8edd0d9c4a1a7ff1f3eb277", + "sha256:eba81e0b3011c1f23df7ea47ef4ffaa8239817959ae291515b6efd068bde2161", + "sha256:ed6d23a3f806898e69c77430ebd8da0c79c219f97b9acbc9a29a653e09740c59" ], "index": "pypi", - "markers": "python_full_version >= '3.9.0'", - "version": "==1.4.3" + "markers": "python_full_version >= '3.10.0'", + "version": "==1.5.1" }, "flask": { "hashes": [ - "sha256:bf656c15c80190ed628ad08cdfd3aaa35beb087855e2f494910aa3774cc4fd87", - "sha256:ca1d8112ec8a6158cc29ea4858963350011b5c846a414cdb7a954aa9e967d03c" + "sha256:0ef0e52b8a9cd932855379197dd8f94047b359ca0a78695144304cb45f87c9eb", + "sha256:f4bcbefc124291925f1a26446da31a5178f9483862233b23c0c96a20701f670c" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==3.1.2" + "version": "==3.1.3" }, "flask-cors": { "hashes": [ @@ -546,11 +551,11 @@ }, "fsspec": { "hashes": [ - "sha256:8bf1fe301b7d8acfa6e8571e3b1c3d158f909666642431cc78a1b7b4dbc5ec5b", - "sha256:c505de011584597b1060ff778bb664c1bc022e87921b0e4f10cc9c44f9635973" + "sha256:1ee6a0e28677557f8c2f994e3eea77db6392b4de9cd1f5d7a9e87a0ae9d01b41", + "sha256:d2ceafaad1b3457968ed14efa28798162f1638dbb5d2a6868a2db002a5ee39a4" ], "markers": "python_version >= '3.10'", - "version": "==2025.12.0" + "version": "==2026.3.0" }, "idna": { "hashes": [ @@ -562,11 +567,11 @@ }, "importlib-metadata": { "hashes": [ - "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", - "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151" + "sha256:58850626cef4bd2df100378b0f2aea9724a7b92f10770d547725b047078f99ee", + "sha256:e0f761b6ea91ced3b0844c14c9d955224d538105921f8e6754c00f6ca79fba7f" ], - "markers": "python_version >= '3.9'", - "version": "==8.7.1" + "markers": "python_version >= '3.10'", + "version": "==8.9.0" }, "iniconfig": { "hashes": [ @@ -602,19 +607,19 @@ }, "jmespath": { "hashes": [ - "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", - "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe" + "sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d", + "sha256:a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64" ], - "markers": "python_version >= '3.7'", - "version": "==1.0.1" + "markers": "python_version >= '3.9'", + "version": "==1.1.0" }, "jsonschema": { "hashes": [ - "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63", - "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85" + "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", + "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce" ], - "markers": "python_version >= '3.9'", - "version": "==4.25.1" + "markers": "python_version >= '3.10'", + "version": "==4.26.0" }, "jsonschema-specifications": { "hashes": [ @@ -755,138 +760,124 @@ }, "mirakuru": { "hashes": [ - "sha256:43d27dc0e59dfde27bf720516a5e96ead0b4cf9e12cb1adb57cdeea3c9239b93", - "sha256:834686822da3ac06edd13fa1852143fd9ebcf0fea68d56b78b7d4be1e947f8c0" + "sha256:10e5dac4a8f26872c63e9cdfdc01b775aaa2beb3ced98abc497279d2dc525b8f", + "sha256:21192186a8680ea7567ca68170261df3785768b12962dd19fe8cccab15ad3441" ], "markers": "python_version >= '3.10'", - "version": "==3.0.1" + "version": "==3.0.2" }, "mmh3": { "hashes": [ - "sha256:03e08c6ebaf666ec1e3d6ea657a2d363bb01effd1a9acfe41f9197decaef0051", - "sha256:097e13c8b8a66c5753c6968b7640faefe85d8e38992703c1f666eda6ef4c3762", - "sha256:0b898cecff57442724a0f52bf42c2de42de63083a91008fb452887e372f9c328", - "sha256:10983c10f5c77683bd845751905ba535ec47409874acc759d5ce3ff7ef34398a", - "sha256:11730eeb16dfcf9674fdea9bb6b8e6dd9b40813b7eb839bc35113649eef38aeb", - "sha256:127c95336f2a98c51e7682341ab7cb0be3adb9df0819ab8505a726ed1801876d", - "sha256:12da42c0a55c9d86ab566395324213c319c73ecb0c239fad4726324212b9441c", - "sha256:132dd943451a7c7546978863d2f5a64977928410782e1a87d583cb60eb89e667", - "sha256:1556e31e4bd0ac0c17eaf220be17a09c171d7396919c3794274cb3415a9d3646", - "sha256:1a5f4d2e59d6bba8ef01b013c472741835ad961e7c28f50c82b27c57748744a4", - "sha256:1ba55d6ca32eeef8b2625e1e4bfc3b3db52bc63014bd7e5df8cc11bf2b036b12", - "sha256:1efc8fec8478e9243a78bb993422cf79f8ff85cb4cf6b79647480a31e0d950a8", - "sha256:1f8d8b627799f4e2fcc7c034fed8f5f24dc7724ff52f69838a3d6d15f1ad4765", - "sha256:1fae471339ae1b9c641f19cf46dfe6ffd7f64b1fba7c4333b99fa3dd7f21ae0a", - "sha256:1fdb36b940e9261aff0b5177c5b74a36936b902f473180f6c15bde26143681a9", - "sha256:2421b9d665a0b1ad724ec7332fb5a98d075f50bc51a6ff854f3a1882bd650d49", - "sha256:29c2b9ce61886809d0492a274a5a53047742dea0f703f9c4d5d223c3ea6377d3", - "sha256:2c9da0d568569cc87315cb063486d761e38458b8ad513fedd3dc9263e1b81bcd", - "sha256:2ebfc46b39168ab1cd44670a32ea5489bcbc74a25795c61b6d888c5c2cf654ed", - "sha256:3193752fc05ea72366c2b63ff24b9a190f422e32d75fdeae71087c08fff26115", - "sha256:33576136c06b46a7046b6d83a3d75fbca7d25f84cec743f1ae156362608dc6d2", - "sha256:37a358cc881fe796e099c1db6ce07ff757f088827b4e8467ac52b7a7ffdca647", - "sha256:382a6bb3f8c6532ea084e7acc5be6ae0c6effa529240836d59352398f002e3fc", - "sha256:384eda9361a7bf83a85e09447e1feafe081034af9dd428893701b959230d84be", - "sha256:38d899a156549da8ef6a9f1d6f7ef231228d29f8f69bce2ee12f5fba6d6fd7c5", - "sha256:3bc244802ccab5220008cb712ca1508cb6a12f0eb64ad62997156410579a1770", - "sha256:3c6041fd9d5fb5fcac57d5c80f521a36b74aea06b8566431c63e4ffc49aced51", - "sha256:3ca975c51c5028947bbcfc24966517aac06a01d6c921e30f7c5383c195f87991", - "sha256:3d6bfd9662a20c054bc216f861fa330c2dac7c81e7fb8307b5e32ab5b9b4d2e0", - "sha256:419005f84ba1cab47a77465a2a843562dadadd6671b8758bf179d82a15ca63eb", - "sha256:45b590e31bc552c6f8e2150ff1ad0c28dd151e9f87589e7eaf508fbdd8e8e908", - "sha256:49037d417419863b222ae47ee562b2de9c3416add0a45c8d7f4e864be8dc4f89", - "sha256:4a5f5536b1cbfa72318ab3bfc8a8188b949260baed186b75f0abc75b95d8c051", - "sha256:582f9dbeefe15c32a5fa528b79b088b599a1dfe290a4436351c6090f90ddebb8", - "sha256:58477cf9ef16664d1ce2b038f87d2dc96d70fe50733a34a7f07da6c9a5e3538c", - "sha256:58981d6ea9646dbbf9e59a30890cbf9f610df0e4a57dbfe09215116fd90b0093", - "sha256:5a5dba98e514fb26241868f6eb90a7f7ca0e039aed779342965ce24ea32ba513", - "sha256:5b0b58215befe0f0e120b828f7645e97719bbba9f23b69e268ed0ac7adde8645", - "sha256:61ac226af521a572700f863d6ecddc6ece97220ce7174e311948ff8c8919a363", - "sha256:63830f846797187c5d3e2dae50f0848fdc86032f5bfdc58ae352f02f857e9025", - "sha256:69fc339d7202bea69ef9bd7c39bfdf9fdabc8e6822a01eba62fb43233c1b3932", - "sha256:6d541038b3fc360ec538fc116de87462627944765a6750308118f8b509a8eec7", - "sha256:6ecb4e750d712abde046858ee6992b65c93f1f71b397fce7975c3860c07365d2", - "sha256:72d80005b7634a3a2220f81fbeb94775ebd12794623bb2e1451701ea732b4aa3", - "sha256:7303aab41e97adcf010a09efd8f1403e719e59b7705d5e3cfed3dd7571589290", - "sha256:7434a27754049144539d2099a6d2da5d88b8bdeedf935180bf42ad59b3607aa3", - "sha256:746a5ee71c6d1103d9b560fa147881b5e68fd35da56e54e03d5acefad0e7c055", - "sha256:7733ec52296fc1ba22e9b90a245c821adbb943e98c91d8a330a2254612726106", - "sha256:7901c893e704ee3c65f92d39b951f8f34ccf8e8566768c58103fb10e55afb8c1", - "sha256:7aa18cdb58983ee660c9c400b46272e14fa253c675ed963d3812487f8ca42037", - "sha256:7b986d506a8e8ea345791897ba5d8ba0d9d8820cd4fc3e52dbe6de19388de2e7", - "sha256:7bbb0df897944b5ec830f3ad883e32c5a7375370a521565f5fe24443bfb2c4f7", - "sha256:7c7f0b342fd06044bedd0b6e72177ddc0076f54fd89ee239447f8b271d919d9b", - "sha256:7e5634565367b6d98dc4aa2983703526ef556b3688ba3065edb4b9b90ede1c54", - "sha256:7fddccd4113e7b736706e17a239a696332360cbaddf25ae75b57ba1acce65081", - "sha256:81c504ad11c588c8629536b032940f2a359dda3b6cbfd4ad8f74cb24dcd1b0bc", - "sha256:81df0dae22cd0da87f1c978602750f33d17fb3d21fb0f326c89dc89834fea79b", - "sha256:86d1be5d63232e6eb93c50881aea55ff06eb86d8e08f9b5417c8c9b10db9db96", - "sha256:8b0c53fe0994beade1ad7c0f13bd6fec980a0664bfbe5a6a7d64500b9ab76772", - "sha256:8ebf241072cf2777a492d0e09252f8cc2b3edd07dfdb9404b9757bffeb4f2cee", - "sha256:931d47e08c9c8a67bf75d82f0ada8399eac18b03388818b62bfa42882d571d72", - "sha256:932a6eec1d2e2c3c9e630d10f7128d80e70e2d47fe6b8c7ea5e1afbd98733e65", - "sha256:941603bfd75a46023807511c1ac2f1b0f39cccc393c15039969806063b27e6db", - "sha256:956127e663d05edbeec54df38885d943dfa27406594c411139690485128525de", - "sha256:96f1e1ac44cbb42bcc406e509f70c9af42c594e72ccc7b1257f97554204445f0", - "sha256:99bb6a4d809aa4e528ddfe2c85dd5239b78b9dd14be62cca0329db78505e7b50", - "sha256:9f64bf06f4bf623325fda3a6d02d36cd69199b9ace99b04bb2d7fd9f89688504", - "sha256:a094319ec0db52a04af9fdc391b4d39a1bc72bc8424b47c4411afb05413a44b5", - "sha256:a367d4741ac0103f8198c82f429bccb9359f543ca542b06a51f4f0332e8de279", - "sha256:a7c0c7845566b9686480e6a7e9044db4afb60038d5fabd19227443f0104eeee4", - "sha256:aa6e5d31fdc5ed9e3e95f9873508615a778fe9b523d52c17fc770a3eb39ab6e4", - "sha256:ae9d032488fcec32d22be6542d1a836f00247f40f320844dbb361393b5b22773", - "sha256:b0271ac12415afd3171ab9a3c7cbfc71dee2c68760a7dc9d05bf8ed6ddfa3a7a", - "sha256:b0d753ad566c721faa33db7e2e0eddd74b224cdd3eaf8481d76c926603c7a00e", - "sha256:b29044e1ffdb84fe164d0a7ea05c7316afea93c00f8ed9449cf357c36fc4f814", - "sha256:b5995088dd7023d2d9f310a0c67de5a2b2e06a570ecfd00f9ff4ab94a67cde43", - "sha256:b5f317a727bba0e633a12e71228bc6a4acb4f471a98b1c003163b917311ea9a9", - "sha256:b9a87025121d1c448f24f27ff53a5fe7b6ef980574b4a4f11acaabe702420d63", - "sha256:bb0fdc451fb6d86d81ab8f23d881b8d6e37fc373a2deae1c02d27002d2ad7a05", - "sha256:bb4fe46bdc6104fbc28db7a6bacb115ee6368ff993366bbd8a2a7f0076e6f0c0", - "sha256:bc44fc2b886243d7c0d8daeb37864e16f232e5b56aaec27cc781d848264cfd28", - "sha256:bdde97310d59604f2a9119322f61b31546748499a21b44f6715e8ced9308a6c5", - "sha256:be1374df449465c9f2500e62eee73a39db62152a8bdfbe12ec5b5c1cd451344d", - "sha256:be7d3dca9358e01dab1bad881fb2b4e8730cec58d36dd44482bc068bfcd3bc65", - "sha256:bf7bee43e17e81671c447e9c83499f53d99bf440bc6d9dc26a841e21acfbe094", - "sha256:c3dca4cb5b946ee91b3d6bb700d137b1cd85c20827f89fdf9c16258253489044", - "sha256:c3f563e8901960e2eaa64c8e8821895818acabeb41c96f2efbb936f65dbe486c", - "sha256:c463d7c1c4cfc9d751efeaadd936bbba07b5b0ed81a012b3a9f5a12f0872bd6e", - "sha256:c4a2f3d83879e3de2eb8cbf562e71563a8ed15ee9b9c2e77ca5d9f73072ac15c", - "sha256:c5584061fd3da584659b13587f26c6cad25a096246a481636d64375d0c1f6c07", - "sha256:c677d78887244bf3095020b73c42b505b700f801c690f8eaa90ad12d3179612f", - "sha256:c903e71fd8debb35ad2a4184c1316b3cb22f64ce517b4e6747f25b0a34e41266", - "sha256:c9ff37ba9f15637e424c2ab57a1a590c52897c845b768e4e0a4958084ec87f22", - "sha256:cadc16e8ea64b5d9a47363013e2bea469e121e6e7cb416a7593aeb24f2ad122e", - "sha256:cedac4f4054b8f7859e5aed41aaa31ad03fce6851901a7fdc2af0275ac533c10", - "sha256:d22c9dcafed659fadc605538946c041722b6d1104fe619dbf5cc73b3c8a0ded8", - "sha256:d765058da196f68dc721116cab335e696e87e76720e6ef8ee5a24801af65e63d", - "sha256:d86651fa45799530885ba4dab3d21144486ed15285e8784181a0ab37a4552384", - "sha256:dd966df3489ec13848d6c6303429bbace94a153f43d1ae2a55115fd36fd5ca5d", - "sha256:ddc63328889bcaee77b743309e5c7d2d52cee0d7d577837c91b6e7cc9e755e0b", - "sha256:dfbead5575f6470c17e955b94f92d62a03dfc3d07f2e6f817d9b93dc211a1515", - "sha256:e0f3ed828d709f5b82d8bfe14f8856120718ec4bd44a5b26102c3030a1e12501", - "sha256:e1861fb6b1d0453ed7293200139c0a9011eeb1376632e048e3766945b13313c5", - "sha256:e5015f0bb6eb50008bed2d4b1ce0f2a294698a926111e4bb202c0987b4f89078", - "sha256:e651e17bfde5840e9e4174b01e9e080ce49277b70d424308b36a7969d0d1af73", - "sha256:e7884931fe5e788163e7b3c511614130c2c59feffdc21112290a194487efb2e9", - "sha256:e79c00eba78f7258e5b354eccd4d7907d60317ced924ea4a5f2e9d83f5453065", - "sha256:e912b19cf2378f2967d0c08e86ff4c6c360129887f678e27e4dde970d21b3f4d", - "sha256:e9a011469b47b752e7d20de296bb34591cdfcbe76c99c2e863ceaa2aa61113d2", - "sha256:eb756caf8975882630ce4e9fbbeb9d3401242a72528230422c9ab3a0d278e60c", - "sha256:eba01ec3bd4a49b9ac5ca2bc6a73ff5f3af53374b8556fcc2966dd2af9eb7779", - "sha256:ecbfc0437ddfdced5e7822d1ce4855c9c64f46819d0fdc4482c53f56c707b935", - "sha256:eed4bba7ff8a0d37106ba931ab03bdd3915fbb025bcf4e1f0aa02bc8114960c5", - "sha256:f35727c5118aba95f0397e18a1a5b8405425581bfe53e821f0fb444cbdc2bc9b", - "sha256:f698733a8a494466432d611a8f0d1e026f5286dee051beea4b3c3146817e35d5", - "sha256:f7f9034c7cf05ddfaac8d7a2e63a3c97a840d4615d0a0e65ba8bdf6f8576e3be", - "sha256:fa0c966ee727aad5406d516375593c5f058c766b21236ab8985693934bb5085b", - "sha256:fc9c5f280438cf1c1a8f9abb87dc8ce9630a964120cfb5dd50d1e7ce79690c7a", - "sha256:fd6e6c3d90660d085f7e73710eab6f5545d4854b81b0135a3526e797009dbda3", - "sha256:fdfd3fb739f4e22746e13ad7ba0c6eedf5f454b18d11249724a388868e308ee4", - "sha256:ff3d50dc3fe8a98059f99b445dfb62792b5d006c5e0b8f03c6de2813b8376110" + "sha256:022aa1a528604e6c83d0a7705fdef0b5355d897a9e0fa3a8d26709ceaa06965d", + "sha256:0634581290e6714c068f4aa24020acf7880927d1f0084fa753d9799ae9610082", + "sha256:08043f7cb1fb9467c3fbbbaea7896986e7fbc81f4d3fd9289a73d9110ab6207a", + "sha256:0a3984146e414684a6be2862d84fcb1035f4984851cb81b26d933bab6119bf00", + "sha256:0bbc17250b10d3466875a40a52520a6bac3c02334ca709207648abd3c223ed5c", + "sha256:0cc21533878e5586b80d74c281d7f8da7932bc8ace50b8d5f6dbf7e3935f63f1", + "sha256:0d0b7e803191db5f714d264044e06189c8ccd3219e936cc184f07106bd17fd7b", + "sha256:113f78e7463a36dbbcea05bfe688efd7fa759d0f0c56e73c974d60dcfec3dfcc", + "sha256:169e0d178cb59314456ab30772429a802b25d13227088085b0d49b9fe1533104", + "sha256:17fbb47f0885ace8327ce1235d0416dc86a211dcd8cc1e703f41523be32cfec8", + "sha256:19bbd3b841174ae6ed588536ab5e1b1fe83d046e668602c20266547298d939a9", + "sha256:1d9f9a3ce559a5267014b04b82956993270f63ec91765e13e9fd73daf2d2738e", + "sha256:1e4ecee40ba19e6975e1120829796770325841c2f153c0e9aecca927194c6a2a", + "sha256:22b0f9971ec4e07e8223f2beebe96a6cfc779d940b6f27d26604040dd74d3a44", + "sha256:26fb5b9c3946bf7f1daed7b37e0c03898a6f062149127570f8ede346390a0825", + "sha256:2778fed822d7db23ac5008b181441af0c869455b2e7d001f4019636ac31b6fe4", + "sha256:28cfab66577000b9505a0d068c731aee7ca85cd26d4d63881fab17857e0fe1fb", + "sha256:29bc3973676ae334412efdd367fcd11d036b7be3efc1ce2407ef8676dabfeb82", + "sha256:2bd9f19f7f1fcebd74e830f4af0f28adad4975d40d80620be19ffb2b2af56c9f", + "sha256:2d5d542bf2abd0fd0361e8017d03f7cb5786214ceb4a40eef1539d6585d93386", + "sha256:30e4d2084df019880d55f6f7bea35328d9b464ebee090baa372c096dc77556fb", + "sha256:3619473a0e0d329fd4aec8075628f8f616be2da41605300696206d6f36920c3d", + "sha256:368625fb01666655985391dbad3860dc0ba7c0d6b9125819f3121ee7292b4ac8", + "sha256:3737303ca9ea0f7cb83028781148fcda4f1dac7821db0c47672971dabcf63593", + "sha256:3a9fed49c6ce4ed7e73f13182760c65c816da006debe67f37635580dfb0fae00", + "sha256:3c38d142c706201db5b2345166eeef1e7740e3e2422b470b8ba5c8727a9b4c7a", + "sha256:3cb61db880ec11e984348227b333259994c2c85caa775eb7875decb3768db890", + "sha256:3d74a03fb57757ece25aa4b3c1c60157a1cece37a020542785f942e2f827eed5", + "sha256:3f796b535008708846044c43302719c6956f39ca2d93f2edda5319e79a29efbb", + "sha256:41105377f6282e8297f182e393a79cfffd521dde37ace52b106373bdcd9ca5cb", + "sha256:41aac7002a749f08727cb91babff1daf8deac317c0b1f317adc69be0e6c375d1", + "sha256:44983e45310ee5b9f73397350251cdf6e63a466406a105f1d16cb5baa659270b", + "sha256:4cbbde66f1183db040daede83dd86c06d663c5bb2af6de1142b7c8c37923dd74", + "sha256:4eda76074cfca2787c8cf1bec603eaebdddd8b061ad5502f85cddae998d54f00", + "sha256:4fc6cd65dc4d2fdb2625e288939a3566e36127a84811a4913f02f3d5931da52d", + "sha256:50885073e2909251d4718634a191c49ae5f527e5e1736d738e365c3e8be8f22b", + "sha256:5174a697ce042fa77c407e05efe41e03aa56dae9ec67388055820fb48cf4c3ba", + "sha256:54b64fb2433bc71488e7a449603bf8bd31fbcf9cb56fbe1eb6d459e90b86c37b", + "sha256:54fe8518abe06a4c3852754bfd498b30cc58e667f376c513eac89a244ce781a4", + "sha256:55dbbd8ffbc40d1697d5e2d0375b08599dae8746b0b08dea05eee4ce81648fac", + "sha256:57b52603e89355ff318025dd55158f6e71396c0f1f609d548e9ea9c94cc6ce0a", + "sha256:58370d05d033ee97224c81263af123dea3d931025030fd34b61227a768a8858a", + "sha256:5d87a3584093e1a89987e3d36d82c98d9621b2cb944e22a420aa1401e096758f", + "sha256:623f938f6a039536cc02b7582a07a080f13fdfd48f87e63201d92d7e34d09a18", + "sha256:62815d2c67f2dd1be76a253d88af4e1da19aeaa1820146dec52cf8bee2958b16", + "sha256:6290289fa5fb4c70fd7f72016e03633d60388185483ff3b162912c81205ae2cf", + "sha256:67e41a497bac88cc1de96eeba56eeb933c39d54bc227352f8455aa87c4ca4000", + "sha256:6c85c38a279ca9295a69b9b088a2e48aa49737bb1b34e6a9dc6297c110e8d912", + "sha256:6f01f044112d43a20be2f13a11683666d87151542ad627fe41a18b9791d2802f", + "sha256:707151644085dd0f20fe4f4b573d28e5130c4aaa5f587e95b60989c5926653b5", + "sha256:723b2681ed4cc07d3401bbea9c201ad4f2a4ca6ba8cddaff6789f715dd2b391e", + "sha256:72d1cc63bcc91e14933f77d51b3df899d6a07d184ec515ea7f56bff659e124d7", + "sha256:7374d6e3ef72afe49697ecd683f3da12f4fc06af2d75433d0580c6746d2fa025", + "sha256:7501e9be34cb21e72fcfe672aafd0eee65c16ba2afa9dcb5500a587d3a0580f0", + "sha256:76219cd1eefb9bf4af7856e3ae563d15158efa145c0aab01e9933051a1954045", + "sha256:7aec798c2b01aaa65a55f1124f3405804184373abb318a3091325aece235f67c", + "sha256:7be6dfb49e48fd0a7d91ff758a2b51336f1cd21f9d44b20f6801f072bd080cdd", + "sha256:7e4e1f580033335c6f76d1e0d6b56baf009d1a64d6a4816347e4271ba951f46d", + "sha256:7e8ec5f606e0809426d2440e0683509fb605a8820a21ebd120dcdba61b74ef7f", + "sha256:7f196cd7910d71e9d9860da0ff7a77f64d22c1ad931f1dd18559a06e03109fc0", + "sha256:82f3802bfc4751f420d591c5c864de538b71cea117fce67e4595c2afede08a15", + "sha256:85ffc9920ffc39c5eee1e3ac9100c913a0973996fbad5111f939bbda49204bb7", + "sha256:8e6c219e375f6341d0959af814296372d265a8ca1af63825f65e2e87c618f006", + "sha256:8f767ba0911602ddef289404e33835a61168314ebd3c729833db2ed685824211", + "sha256:8ff038d52ef6aa0f309feeba00c5095c9118d0abf787e8e8454d6048db2037fc", + "sha256:915e7a2418f10bd1151b1953df06d896db9783c9cfdb9a8ee1f9b3a4331ab503", + "sha256:92883836caf50d5255be03d988d75bc93e3f86ba247b7ca137347c323f731deb", + "sha256:960b1b3efa39872ac8b6cc3a556edd6fb90ed74f08c9c45e028f1005b26aa55d", + "sha256:9aeaf53eaa075dd63e81512522fd180097312fb2c9f476333309184285c49ce0", + "sha256:9d8089d853c7963a8ce87fff93e2a67075c0bc08684a08ea6ad13577c38ffc38", + "sha256:a4130d0b9ce5fad6af07421b1aecc7e079519f70d6c05729ab871794eded8617", + "sha256:a482ac121de6973897c92c2f31defc6bafb11c83825109275cffce54bb64933f", + "sha256:add7ac388d1e0bf57259afbcf9ed05621a3bf11ce5ee337e7536f1e1aaf056b0", + "sha256:b1f12bd684887a0a5d55e6363ca87056f361e45451105012d329b86ec19dbe0b", + "sha256:b3f99e1756fc48ad507b95e5d86f2fb21b3d495012ff13e6592ebac14033f166", + "sha256:b4cce60d0223074803c9dbe0721ad3fa51dafe7d462fee4b656a1aa01ee07518", + "sha256:baeb47635cb33375dee4924cd93d7f5dcaa786c740b08423b0209b824a1ee728", + "sha256:bbea5b775f0ac84945191fb83f845a6fd9a21a03ea7f2e187defac7e401616ad", + "sha256:bbfcb95d9a744e6e2827dfc66ad10e1020e0cac255eb7f85652832d5a264c2fc", + "sha256:bd6e7d363aa93bd3421b30b6af97064daf47bc96005bddba67c5ffbc6df426b8", + "sha256:be77c402d5e882b6fbacfd90823f13da8e0a69658405a39a569c6b58fdb17b03", + "sha256:c302245fd6c33d96bd169c7ccf2513c20f4c1e417c07ce9dce107c8bc3f8411f", + "sha256:c88653877aeb514c089d1b3d473451677b8b9a6d1497dbddf1ae7934518b06d2", + "sha256:cae6383181f1e345317742d2ddd88f9e7d2682fa4c9432e3a74e47d92dce0229", + "sha256:cd471ede0d802dd936b6fab28188302b2d497f68436025857ca72cd3810423fe", + "sha256:d106493a60dcb4aef35a0fac85105e150a11cf8bc2b0d388f5a33272d756c966", + "sha256:d30b650595fdbe32366b94cb14f30bb2b625e512bd4e1df00611f99dc5c27fd4", + "sha256:d51fde50a77f81330523562e3c2734ffdca9c4c9e9d355478117905e1cfe16c6", + "sha256:d57dea657357230cc780e13920d7fa7db059d58fe721c80020f94476da4ca0a1", + "sha256:d771f085fcdf4035786adfb1d8db026df1eb4b41dac1c3d070d1e49512843227", + "sha256:dae0f0bd7d30c0ad61b9a504e8e272cb8391eed3f1587edf933f4f6b33437450", + "sha256:db0562c5f71d18596dcd45e854cf2eeba27d7543e1a3acdafb7eef728f7fe85d", + "sha256:dfd51b4c56b673dfbc43d7d27ef857dd91124801e2806c69bb45585ce0fa019b", + "sha256:e080c0637aea036f35507e803a4778f119a9b436617694ae1c5c366805f1e997", + "sha256:e48d4dbe0f88e53081da605ae68644e5182752803bbc2beb228cca7f1c4454d6", + "sha256:e8b4b5580280b9265af3e0409974fb79c64cf7523632d03fbf11df18f8b0181e", + "sha256:e8b5378de2b139c3a830f0209c1e91f7705919a4b3e563a10955104f5097a70a", + "sha256:e904f2417f0d6f6d514f3f8b836416c360f306ddaee1f84de8eef1e722d212e5", + "sha256:eee884572b06bbe8a2b54f424dbd996139442cf83c76478e1ec162512e0dd2c7", + "sha256:f1fbb0a99125b1287c6d9747f937dc66621426836d1a2d50d05aecfc81911b57", + "sha256:f40a95186a72fa0b67d15fef0f157bfcda00b4f59c8a07cbe5530d41ac35d105", + "sha256:f6e0bfe77d238308839699944164b96a2eeccaf55f2af400f54dc20669d8d5f2", + "sha256:f963eafc0a77a6c0562397da004f5876a9bcf7265a7bcc3205e29636bc4a1312", + "sha256:fb9d44c25244e11c8be3f12c938ca8ba8404620ef8092245d2093c6ab3df260f", + "sha256:fc78739b5ec6e4fb02301984a3d442a91406e7700efbe305071e7fd1c78278f2", + "sha256:fceef7fe67c81e1585198215e42ad3fdba3a25644beda8fbdaf85f4d7b93175a", + "sha256:fd96476f04db5ceba1cfa0f21228f67c1f7402296f0e73fee3513aa680ad237b" ], - "markers": "python_version >= '3.9'", - "version": "==5.2.0" + "markers": "python_version >= '3.10'", + "version": "==5.2.1" }, "more-itertools": { "hashes": [ @@ -898,12 +889,12 @@ }, "moto": { "hashes": [ - "sha256:45298ef7b88561b839f6fe3e9da2a6e2ecd10283c7bf3daf43a07a97465885f9", - "sha256:b65aa8fc9032c5c574415451e14fd7da4e43fd50b8bdcb5f10289ad382c25bcf" + "sha256:d9f20ae3cf29c44f93c1f8f06c8f48d5560e5dc027816ef1d0d2059741ffcfbe", + "sha256:e5b2c378296e4da50ce5a3c355a1743c8d6d396ea41122f5bb2a40f9b9a8cc0e" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==5.1.18" + "version": "==5.1.22" }, "msgpack": { "hashes": [ @@ -1033,72 +1024,65 @@ }, "packaging": { "hashes": [ - "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", - "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f" + "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", + "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529" ], "markers": "python_version >= '3.8'", - "version": "==25.0" + "version": "==26.0" }, "pandas": { "hashes": [ - "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", - "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", - "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", - "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791", - "sha256:23ebd657a4d38268c7dfbdf089fbc31ea709d82e4923c5ffd4fbd5747133ce73", - "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", - "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4", - "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", - "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", - "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", - "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c", - "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", - "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", - "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250", - "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", - "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826", - "sha256:5554c929ccc317d41a5e3d1234f3be588248e61f08a74dd17c9eabb535777dc9", - "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", - "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1", - "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523", - "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", - "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", - "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", - "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", - "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", - "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", - "sha256:854d00d556406bffe66a4c0802f334c9ad5a96b4f1f868adf036a21b11ef13ff", - "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45", - "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", - "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", - "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", - "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", - "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", - "sha256:a637c5cdfa04b6d6e2ecedcb81fc52ffb0fd78ce2ebccc9ea964df9f658de8c8", - "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", - "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", - "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66", - "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b", - "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", - "sha256:bf1f8a81d04ca90e32a0aceb819d34dbd378a98bf923b6398b9a3ec0bf44de29", - "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", - "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", - "sha256:c503ba5216814e295f40711470446bc3fd00f0faea8a086cbc688808e26f92a2", - "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", - "sha256:d3e28b3e83862ccf4d85ff19cf8c20b2ae7e503881711ff2d534dc8f761131aa", - "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151", - "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838", - "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", - "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a", - "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", - "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", - "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", - "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", - "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c", - "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee" - ], - "markers": "python_version >= '3.9'", - "version": "==2.3.3" + "sha256:01f31a546acd5574ef77fe199bc90b55527c225c20ccda6601cf6b0fd5ed597c", + "sha256:0555c5882688a39317179ab4a0ed41d3ebc8812ab14c69364bbee8fb7a3f6288", + "sha256:07a10f5c36512eead51bc578eb3354ad17578b22c013d89a796ab5eee90cd991", + "sha256:08504503f7101300107ecdc8df73658e4347586db5cfdadabc1592e9d7e7a0fd", + "sha256:0f48afd9bb13300ffb5a3316973324c787054ba6665cda0da3fbd67f451995db", + "sha256:140f0cffb1fa2524e874dde5b477d9defe10780d8e9e220d259b2c0874c89d9d", + "sha256:232a70ebb568c0c4d2db4584f338c1577d81e3af63292208d615907b698a0f18", + "sha256:32cc41f310ebd4a296d93515fcac312216adfedb1894e879303987b8f1e2b97d", + "sha256:339dda302bd8369dedeae979cb750e484d549b563c3f54f3922cb8ff4978c5eb", + "sha256:4544c7a54920de8eeacaa1466a6b7268ecfbc9bc64ab4dbb89c6bbe94d5e0660", + "sha256:4d888a5c678a419a5bb41a2a93818e8ed9fd3172246555c0b37b7cc27027effd", + "sha256:5371b72c2d4d415d08765f32d689217a43227484e81b2305b52076e328f6f482", + "sha256:57a07209bebcbcf768d2d13c9b78b852f9a15978dac41b9e6421a81ad4cdd276", + "sha256:5880314e69e763d4c8b27937090de570f1fb8d027059a7ada3f7f8e98bdcb677", + "sha256:5d3cfe227c725b1f3dff4278b43d8c784656a42a9325b63af6b1492a8232209e", + "sha256:5fdbfa05931071aba28b408e59226186b01eb5e92bea2ab78b65863ca3228d84", + "sha256:60a80bb4feacbef5e1447a3f82c33209c8b7e07f28d805cfd1fb951e5cb443aa", + "sha256:61c2fd96d72b983a9891b2598f286befd4ad262161a609c92dc1652544b46b76", + "sha256:63d141b56ef686f7f0d714cfb8de4e320475b86bf4b620aa0b7da89af8cbdbbb", + "sha256:6c4d8458b97a35717b62469a4ea0e85abd5ed8687277f5ccfc67f8a5126f8c53", + "sha256:710246ba0616e86891b58ab95f2495143bb2bc83ab6b06747c74216f583a6ac9", + "sha256:734be7551687c00fbd760dc0522ed974f82ad230d4a10f54bf51b80d44a08702", + "sha256:7cadd7e9a44ec13b621aec60f9150e744cfc7a3dd32924a7e2f45edff31823b0", + "sha256:81526c4afd31971f8b62671442a4b2b51e0aa9acc3819c9f0f12a28b6fcf85f1", + "sha256:970762605cff1ca0d3f71ed4f3a769ea8f85fc8e6348f6e110b8fea7e6eb5a14", + "sha256:a3096110bf9eac0070b7208465f2740e2d8a670d5cb6530b5bb884eca495fd39", + "sha256:a4785e1d6547d8427c5208b748ae2efb64659a21bd82bf440d4262d02bfa02a4", + "sha256:a727a73cbdba2f7458dc82449e2315899d5140b449015d822f515749a46cbbe0", + "sha256:ae37e833ff4fed0ba352f6bdd8b73ba3ab3256a85e54edfd1ab51ae40cca0af8", + "sha256:aff4e6f4d722e0652707d7bcb190c445fe58428500c6d16005b02401764b1b3d", + "sha256:b35d14bb5d8285d9494fe93815a9e9307c0876e10f1e8e89ac5b88f728ec8dcf", + "sha256:b444dc64c079e84df91baa8bf613d58405645461cabca929d9178f2cd392398d", + "sha256:b5329e26898896f06035241a626d7c335daa479b9bbc82be7c2742d048e41172", + "sha256:b5918ba197c951dec132b0c5929a00c0bf05d5942f590d3c10a807f6e15a57d3", + "sha256:b75c347eff42497452116ce05ef461822d97ce5b9ff8df6edacb8076092c855d", + "sha256:c3b723df9087a9a9a840e263ebd9f88b64a12075d1bf2ea401a5a42f254f084d", + "sha256:c934008c733b8bbea273ea308b73b3156f0181e5b72960790b09c18a2794fe1e", + "sha256:d1478075142e83a5571782ad007fb201ed074bdeac7ebcc8890c71442e96adf7", + "sha256:d606a041c89c0a474a4702d532ab7e73a14fe35c8d427b972a625c8e46373668", + "sha256:db0dbfd2a6cdf3770aa60464d50333d8f3d9165b2f2671bcc299b72de5a6677b", + "sha256:dbbd4aa20ca51e63b53bbde6a0fa4254b1aaabb74d2f542df7a7959feb1d760c", + "sha256:dbc20dea3b9e27d0e66d74c42b2d0c1bed9c2ffe92adea33633e3bedeb5ac235", + "sha256:deeca1b5a931fdf0c2212c8a659ade6d3b1edc21f0914ce71ef24456ca7a6535", + "sha256:ed72cb3f45190874eb579c64fa92d9df74e98fd63e2be7f62bce5ace0ade61df", + "sha256:ef8b27695c3d3dc78403c9a7d5e59a62d5464a7e1123b4e0042763f7104dc74f", + "sha256:f12b1a9e332c01e09510586f8ca9b108fd631fd656af82e452d7315ef6df5f9f", + "sha256:f4753e73e34c8d83221ba58f232433fca2748be8b18dbca02d242ed153945043", + "sha256:f8d68083e49e16b84734eb1a4dcae4259a75c90fb6e2251ab9a00b61120c06ab" + ], + "markers": "python_version >= '3.11'", + "version": "==3.0.2" }, "parsedatetime": { "hashes": [ @@ -1133,116 +1117,116 @@ }, "protobuf": { "hashes": [ - "sha256:1f8017c48c07ec5859106533b682260ba3d7c5567b1ca1f24297ce03384d1b4f", - "sha256:2981c58f582f44b6b13173e12bb8656711189c2a70250845f264b877f00b1913", - "sha256:56dc370c91fbb8ac85bc13582c9e373569668a290aa2e66a590c2a0d35ddb9e4", - "sha256:7109dcc38a680d033ffb8bf896727423528db9163be1b6a02d6a49606dcadbfe", - "sha256:7636aad9bb01768870266de5dc009de2d1b936771b38a793f73cbbf279c91c5c", - "sha256:87eb388bd2d0f78febd8f4c8779c79247b26a5befad525008e49a6955787ff3d", - "sha256:8cd7640aee0b7828b6d03ae518b5b4806fdfc1afe8de82f79c3454f8aef29872", - "sha256:b5d3b5625192214066d99b2b605f5783483575656784de223f00a8d00754fc0e", - "sha256:d9b19771ca75935b3a4422957bc518b0cecb978b31d1dd12037b088f6bcc0e43", - "sha256:fc2a0e8b05b180e5fc0dd1559fe8ebdae21a27e81ac77728fb6c42b12c7419b4" + "sha256:0cd27b587afca21b7cfa59a74dcbd48a50f0a6400cfb59391340ad729d91d326", + "sha256:77179e006c476e69bf8e8ce866640091ec42e1beb80b213c3900006ecfba6901", + "sha256:7d29d9b65f8afef196f8334e80d6bc1d5d4adedb449971fefd3723824e6e77d3", + "sha256:9720e6961b251bde64edfdab7d500725a2af5280f3f4c87e57c0208376aa8c3a", + "sha256:a6768d25248312c297558af96a9f9c929e8c4cee0659cb07e780731095f38135", + "sha256:bd56799fb262994b2c2faa1799693c95cc2e22c62f56fb43af311cae45d26f0e", + "sha256:c96c37eec15086b79762ed265d59ab204dabc53056e3443e702d2681f4b39ce3", + "sha256:e2afbae9b8e1825e3529f88d514754e094278bb95eadc0e199751cdd9a2e82a2", + "sha256:e9db7e292e0ab79dd108d7f1a94fe31601ce1ee3f7b79e0692043423020b0593", + "sha256:f443a394af5ed23672bc6c486be138628fbe5c651ccbc536873d7da23d1868cf" ], "markers": "python_version >= '3.9'", - "version": "==6.33.2" + "version": "==6.33.6" }, "psutil": { "hashes": [ - "sha256:0d12c7ce6ed1128cd81fd54606afa054ac7dbb9773469ebb58cf2f171c49f2ac", - "sha256:24151011c21fadd94214d7139d7c6c54569290d7e553989bdf0eab73b13beb8c", - "sha256:26782bdbae2f5c14ce9ebe8ad2411dc2ca870495e0cd90f8910ede7fa5e27117", - "sha256:284e71038b3139e7ab3834b63b3eb5aa5565fcd61a681ec746ef9a0a8c457fd2", - "sha256:2e4f8e1552f77d14dc96fb0f6240c5b34a37081c0889f0853b3b29a496e5ef64", - "sha256:2f2f53fd114e7946dfba3afb98c9b7c7f376009447360ca15bfb73f2066f84c7", - "sha256:4413373c174520ae28a24a8974ad8ce6b21f060d27dde94e25f8c73a7effe57a", - "sha256:45f6b91f7ad63414d6454fd609e5e3556d0e1038d5d9c75a1368513bdf763f57", - "sha256:85ef849ac92169dedc59a7ac2fb565f47b3468fbe1524bf748746bc21afb94c7", - "sha256:87b18a19574139d60a546e88b5f5b9cbad598e26cdc790d204ab95d7024f03ee", - "sha256:91f211ba9279e7c61d9d8f84b713cfc38fa161cb0597d5cb3f1ca742f6848254", - "sha256:977a2fcd132d15cb05b32b2d85b98d087cad039b0ce435731670ba74da9e6133", - "sha256:abdb74137ca232d20250e9ad471f58d500e7743bc8253ba0bfbf26e570c0e437", - "sha256:b7665f612d3b38a583391b95969667a53aaf6c5706dc27a602c9a4874fbf09e4", - "sha256:c31e927555539132a00380c971816ea43d089bf4bd5f3e918ed8c16776d68474", - "sha256:ca0faef7976530940dcd39bc5382d0d0d5eb023b186a4901ca341bd8d8684151", - "sha256:cc66d21366850a4261412ce994ae9976bba9852dafb4f2fa60db68ed17ff5281", - "sha256:db8e44e766cef86dea47d9a1fa535d38dc76449e5878a92f33683b7dba5bfcb2", - "sha256:e025d67b42b8f22b096d5d20f5171de0e0fefb2f0ce983a13c5a1b5ed9872706", - "sha256:e65c41d7e60068f60ce43b31a3a7fc90deb0dfd34ffc824a2574c2e5279b377e", - "sha256:f37415188b7ea98faf90fed51131181646c59098b077550246e2e092e127418b" + "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", + "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", + "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", + "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", + "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", + "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", + "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", + "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", + "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", + "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", + "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", + "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", + "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", + "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", + "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", + "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", + "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", + "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", + "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", + "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", + "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8" ], "markers": "python_version >= '3.6'", - "version": "==7.2.0" + "version": "==7.2.2" }, "psycopg": { "hashes": [ - "sha256:3e94bc5f4690247d734599af56e51bae8e0db8e4311ea413f801fef82b14a99b", - "sha256:707a67975ee214d200511177a6a80e56e654754c9afca06a7194ea6bbfde9ca7" + "sha256:5e9a47458b3c1583326513b2556a2a9473a1001a56c9efe9e587245b43148dd9", + "sha256:f96525a72bcfade6584ab17e89de415ff360748c766f0106959144dcbb38c698" ], "markers": "python_version >= '3.10'", - "version": "==3.3.2" + "version": "==3.3.3" }, "psycopg-binary": { "hashes": [ - "sha256:03b7cd73fb8c45d272a34ae7249713e32492891492681e3cf11dff9531cf37e9", - "sha256:04bb2de4ba69d6f8395b446ede795e8884c040ec71d01dd07ac2b2d18d4153d1", - "sha256:0611f4822674f3269e507a307236efb62ae5a828fcfc923ac85fe22ca19fd7c8", - "sha256:0768c5f32934bb52a5df098317eca9bdcf411de627c5dca2ee57662b64b54b41", - "sha256:07a5f030e0902ec3e27d0506ceb01238c0aecbc73ecd7fa0ee55f86134600b5b", - "sha256:083c2e182be433f290dc2c516fd72b9b47054fcd305cce791e0a50d9e93e06f2", - "sha256:09b3014013f05cd89828640d3a1db5f829cc24ad8fa81b6e42b2c04685a0c9d4", - "sha256:0ae60e910531cfcc364a8f615a7941cac89efeb3f0fffe0c4824a6d11461eef7", - "sha256:136c43f185244893a527540307167f5d3ef4e08786508afe45d6f146228f5aa9", - "sha256:1586e220be05547c77afc326741dd41cc7fba38a81f9931f616ae98865439678", - "sha256:1e09d0d93d35c134704a2cb2b15f81ffc8174fd602f3e08f7b1a3d8896156cf0", - "sha256:1ea41c0229f3f5a3844ad0857a83a9f869aa7b840448fa0c200e6bcf85d33d19", - "sha256:23d2594af848c1fd3d874a9364bef50730124e72df7bb145a20cb45e728c50ed", - "sha256:3789d452a9d17a841c7f4f97bbcba51a21f957ea35641a4c98507520e6b6a068", - "sha256:3ff7489df5e06c12d1829544eaec64970fe27fe300f7cf04c8495fe682064688", - "sha256:43b130e3b6edcb5ee856c7167ccb8561b473308c870ed83978ae478613764f1c", - "sha256:44e89938d36acc4495735af70a886d206a5bfdc80258f95b69b52f68b2968d9e", - "sha256:458696a5fa5dad5b6fb5d5862c22454434ce4fe1cf66ca6c0de5f904cbc1ae3e", - "sha256:50ff10ab8c0abdb5a5451b9315538865b50ba64c907742a1385fdf5f5772b73e", - "sha256:522b79c7db547767ca923e441c19b97a2157f2f494272a119c854bba4804e186", - "sha256:59d0163c4617a2c577cb34afbed93d7a45b8c8364e54b2bd2020ff25d5f5f860", - "sha256:5a327327f1188b3fbecac41bf1973a60b86b2eb237db10dc945bd3dc97ec39e4", - "sha256:649c1d33bedda431e0c1df646985fbbeb9274afa964e1aef4be053c0f23a2924", - "sha256:716a586f99bbe4f710dc58b40069fcb33c7627e95cc6fc936f73c9235e07f9cf", - "sha256:742ce48cde825b8e52fb1a658253d6d1ff66d152081cbc76aa45e2986534858d", - "sha256:74bc306c4b4df35b09bc8cecf806b271e1c5d708f7900145e4e54a2e5dedfed0", - "sha256:7c1feba5a8c617922321aef945865334e468337b8fc5c73074f5e63143013b5a", - "sha256:7c43a773dd1a481dbb2fe64576aa303d80f328cce0eae5e3e4894947c41d1da7", - "sha256:8309ee4569dced5e81df5aa2dcd48c7340c8dee603a66430f042dfbd2878edca", - "sha256:8db9034cde3bcdafc66980f0130813f5c5d19e74b3f2a19fb3cfbc25ad113121", - "sha256:8ea05b499278790a8fa0ff9854ab0de2542aca02d661ddff94e830df971ff640", - "sha256:90ed9da805e52985b0202aed4f352842c907c6b4fc6c7c109c6e646c32e2f43b", - "sha256:94503b79f7da0b65c80d0dbb2f81dd78b300319ec2435d5e6dcf9622160bc2fa", - "sha256:9742580ecc8e1ac45164e98d32ca6df90da509c2d3ff26be245d94c430f92db4", - "sha256:9ca24062cd9b2270e4d77576042e9cc2b1d543f09da5aba1f1a3d016cea28390", - "sha256:a9387ab615f929e71ef0f4a8a51e986fa06236ccfa9f3ec98a88f60fbf230634", - "sha256:ac230e3643d1c436a2dfb59ca84357dfc6862c9f372fc5dbd96bafecae581f9f", - "sha256:c3a9ccdfee4ae59cf9bf1822777e763bc097ed208f4901e21537fca1070e1391", - "sha256:c5774272f754605059521ff037a86e680342e3847498b0aa86b0f3560c70963c", - "sha256:c6464150e25b68ae3cb04c4e57496ea11ebfaae4d98126aea2f4702dd43e3c12", - "sha256:c749770da0947bc972e512f35366dd4950c0e34afad89e60b9787a37e97cb443", - "sha256:cabb2a554d9a0a6bf84037d86ca91782f087dfff2a61298d0b00c19c0bc43f6d", - "sha256:d391b70c9cc23f6e1142729772a011f364199d2c5ddc0d596f5f43316fbf982d", - "sha256:d45acedcaa58619355f18e0f42af542fcad3fd84ace4b8355d3a5dea23318578", - "sha256:d79b0093f0fbf7a962d6a46ae292dc056c65d16a8ee9361f3cfbafd4c197ab14", - "sha256:d88f32ff8c47cb7f4e7e7a9d1747dcee6f3baa19ed9afa9e5694fd2fb32b61ed", - "sha256:d8c899a540f6c7585cee53cddc929dd4d2db90fd828e37f5d4017b63acbc1a5d", - "sha256:de9173f8cc0efd88ac2a89b3b6c287a9a0011cdc2f53b2a12c28d6fd55f9f81c", - "sha256:df65174c7cf6b05ea273ce955927d3270b3a6e27b0b12762b009ce6082b8d3fc", - "sha256:e22bf6b54df994aff37ab52695d635f1ef73155e781eee1f5fa75bc08b58c8da", - "sha256:e750afe74e6c17b2c7046d2c3e3173b5a3f6080084671c8aa327215323df155b", - "sha256:ea4fe6b4ead3bbbe27244ea224fcd1f53cb119afc38b71a2f3ce570149a03e30", - "sha256:f26f113013c4dcfbfe9ced57b5bad2035dda1a7349f64bf726021968f9bccad3", - "sha256:f3f601f32244a677c7b029ec39412db2772ad04a28bc2cbb4b1f0931ed0ffad7", - "sha256:fc5a189e89cbfff174588665bb18d28d2d0428366cc9dae5864afcaa2e57380b" + "sha256:05f32239aec25c5fb15f7948cffdc2dc0dac098e48b80a140e4ba32b572a2e7d", + "sha256:07c7211f9327d522c9c47560cae00a4ecf6687f4e02d779d035dd3177b41cb12", + "sha256:0dde92cfde09293fb63b3f547919ba7d73bd2654573c03502b3263dd0218e44e", + "sha256:111c59897a452196116db12e7f608da472fbff000693a21040e35fc978b23430", + "sha256:162e5675efb4704192411eaf8e00d07f7960b679cd3306e7efb120bb8d9456cc", + "sha256:165f22ab5a9513a3d7425ffb7fcc7955ed8ccaeef6d37e369d6cc1dff1582383", + "sha256:17bb6600e2455993946385249a3c3d0af52cd70c1c1cdbf712e9d696d0b0bf1b", + "sha256:19f93235ece6dbfc4036b5e4f6d8b13f0b8f2b3eeb8b0bd2936d406991bcdd40", + "sha256:1bef235a50a80f6aba05147002bc354559657cb6386dbd04d8e1c97d1d7cbe84", + "sha256:258d1ea53464d29768bf25930f43291949f4c7becc706f6e220c515a63a24edd", + "sha256:263a24f39f26e19ed7fc982d7859a36f17841b05bebad3eb47bb9cd2dd785351", + "sha256:329ff393441e75f10b673ae99ab45276887993d49e65f141da20d915c05aafd8", + "sha256:42961609ac07c232a427da7c87a468d3c82fee6762c220f38e37cfdacb2b178d", + "sha256:47f06fcbe8542b4d96d7392c476a74ada521c5aebdb41c3c0155f6595fc14c8d", + "sha256:48e500cf1c0984dacf1f28ea482c3cdbb4c2288d51c336c04bc64198ab21fc51", + "sha256:497852c5eaf1f0c2d88ab74a64a8097c099deac0c71de1cbcf18659a8a04a4b2", + "sha256:4d4606c84d04b80f9138d72f1e28c6c02dc5ae0c7b8f3f8aaf89c681ce1cd1b1", + "sha256:5152d50798c2fa5bd9b68ec68eb68a1b71b95126c1d70adaa1a08cd5eefdc23d", + "sha256:533efe6dc3a7cba5e2a84e38970786bb966306863e45f3db152007e9f48638a6", + "sha256:56c767007ca959ca32f796b42379fc7e1ae2ed085d29f20b05b3fc394f3715cc", + "sha256:5958dbf28b77ce2033482f6cb9ef04d43f5d8f4b7636e6963d5626f000efb23e", + "sha256:59aa31fe11a0e1d1bcc2ce37ed35fe2ac84cd65bb9036d049b1a1c39064d0f14", + "sha256:642050398583d61c9856210568eb09a8e4f2fe8224bf3be21b67a370e677eead", + "sha256:6698dbab5bcef8fdb570fc9d35fd9ac52041771bfcfe6fd0fc5f5c4e36f1e99d", + "sha256:73eaaf4bb04709f545606c1db2f65f4000e8a04cdbf3e00d165a23004692093e", + "sha256:74eae563166ebf74e8d950ff359be037b85723d99ca83f57d9b244a871d6c13b", + "sha256:78c9ce98caaf82ac8484d269791c1b403d7598633e0e4e2fa1097baae244e2f1", + "sha256:7c84f9d214f2d1de2fafebc17fa68ac3f6561a59e291553dfc45ad299f4898c1", + "sha256:883d68d48ca9ff3cb3d10c5fdebea02c79b48eecacdddbf7cce6e7cdbdc216b8", + "sha256:8e7e9eca9b363dbedeceeadd8be97149d2499081f3c52d141d7cd1f395a91f83", + "sha256:90eecd93073922f085967f3ed3a98ba8c325cbbc8c1a204e300282abd2369e13", + "sha256:97c839717bf8c8df3f6d983a20949c4fb22e2a34ee172e3e427ede363feda27b", + "sha256:9d6a1e56dd267848edb824dbeb08cf5bac649e02ee0b03ba883ba3f4f0bd54f2", + "sha256:9f7d0cf072c6fbac3795b08c98ef9ea013f11db609659dcfc6b1f6cc31f9e181", + "sha256:a39f34c9b18e8f6794cca17bfbcd64572ca2482318db644268049f8c738f35a6", + "sha256:a4aab31bd6d1057f287c96c0effca3a25584eb9cc702f282ecb96ded7814e830", + "sha256:a6af77b6626ce92b5817bf294b4d45ec1a6161dba80fc2d82cdffdd6814fd023", + "sha256:a89bb9ee11177b2995d87186b1d9fa892d8ea725e85eab28c6525e4cc14ee048", + "sha256:ae07a3114313dd91fce686cab2f4c44af094398519af0e0f854bc707e1aeedf1", + "sha256:b27d3a23c79fa59557d2cc63a7e8bb4c7e022c018558eda36f9d7c4e6b99a6e0", + "sha256:b3385b58b2fe408a13d084c14b8dcf468cd36cbbe774408250facc128f9fa75c", + "sha256:b62cf8784eb6d35beaee1056d54caf94ec6ecf2b7552395e305518ab61eb8fd2", + "sha256:cab7bc3d288d37a80aa8c0820033250c95e40b1c2b5c57cf59827b19c2a8b69d", + "sha256:cb85b1d5702877c16f28d7b92ba030c1f49ebcc9b87d03d8c10bf45a2f1c7508", + "sha256:d257c58d7b36a621dcce1d01476ad8b60f12d80eb1406aee4cf796f88b2ae482", + "sha256:d593612758d0041cb13cb0003f7f8d3fabb7ad9319e651e78afae49b1cf5860e", + "sha256:da2f331a01af232259a21573a01338530c6016dcfad74626c01330535bcd8628", + "sha256:dac7ee2f88b4d7bb12837989ca354c38d400eeb21bce3b73dac02622f0a3c8d6", + "sha256:e77957d2ba17cada11be09a5066d93026cdb61ada7c8893101d7fe1c6e1f3925", + "sha256:e7800e6c6b5dc4b0ca7cc7370f770f53ac83886b76afda0848065a674231e856", + "sha256:e7b607f0e14f2a4cf7e78a05ebd13df6144acfba87cb90842e70d3f125d9f53f", + "sha256:eb072949b8ebf4082ae24289a2b0fd724da9adc8f22743409d6fd718ddb379df", + "sha256:eb36a08859b9432d94ea6b26ec41a2f98f83f14868c91321d0c1e11f672eeae7", + "sha256:f24e8e17035200a465c178e9ea945527ad0738118694184c450f1192a452ff25", + "sha256:fab6b5e37715885c69f5d091f6ff229be71e235f272ebaa35158d5a46fd548a0" ], "index": "pypi", "markers": "python_version >= '3.10'", - "version": "==3.3.2" + "version": "==3.3.3" }, "psycopg2-binary": { "hashes": [ @@ -1384,11 +1368,11 @@ }, "pycparser": { "hashes": [ - "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", - "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934" + "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", + "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992" ], - "markers": "python_version >= '3.8'", - "version": "==2.23" + "markers": "python_version >= '3.10'", + "version": "==3.0" }, "pydantic": { "hashes": [ @@ -1527,136 +1511,145 @@ }, "pygments": { "hashes": [ - "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", - "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b" + "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", + "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176" ], - "markers": "python_version >= '3.8'", - "version": "==2.19.2" + "markers": "python_version >= '3.9'", + "version": "==2.20.0" }, "pyiceberg": { "hashes": [ - "sha256:03a4f208f0c59c040d2a6ff51b952479358810aac28c5271de3fd1fa425f063c", - "sha256:0d76efec0409536bf48146961abc2b94e4001c647d348da8ea0f8ccca6504d1f", - "sha256:13fd03ec3da6eb4d3b55ff94b647946a7749bede5d743c75b39deaad26421200", - "sha256:14a33da7eb579a02fc559d2e7b703a8133e81bc206bf11cb76ece9333ddfb7f3", - "sha256:14cb3a5186e64f2ab37bc69cd7d1b32b25f416c87f9dadbcaa4f8e21b6c4e7b1", - "sha256:1b0ef2f1880dd7549cc54ccb1a25f61ad5329e079cba372b4c239b0012aecac6", - "sha256:2127c795e451b971bd3f55cbda2d2c8200182bec3476e590e4a3453e60efda3c", - "sha256:2525afa5e7e5fc4e72b291f8e1cc219e982d2bda5ff17e62cd05b8d91c4139f5", - "sha256:2c799c9149e06ef9ece22945d5c198ffc69f5c04b314b59a43c2d4c1bb9ade84", - "sha256:33367c84bcb0a2fbbe54cbbfe062691ab93b91a2e3d319bb546ec5b9b45b6057", - "sha256:3e12cf585318f0f48d31a77b4149e0e5b4c41e03a24aa8612e060f20ff41eb10", - "sha256:4dfafd712fec5c3776fafbb444784e20256b8674cbe243487f8cd7f99a6e8836", - "sha256:64cad9d1db08192605875a872152cbcaca147ea486cfa94773fa5f4f65d78a23", - "sha256:6924f496f9a6e36f6530ce66483486f71d3cb4c08512d5aeb21095a9aa22d4b7", - "sha256:6979dd741cee263c1235595f71888c73365f2725697411027c4bd81046db3294", - "sha256:79016a97ec70a11e2920791fe2620b001bc5b657380d3d3ddf9f6a48af209615", - "sha256:912128d6b70313002b5418096c444afcde3d541e53b5e6a6b4df177531ac5686", - "sha256:9631d892f0977fbaef0498f088cb8535cd6b933606946dcce214a9a342d9c009", - "sha256:a8c7070fe1262f50694b12241b5373ee89c8aededda82ef325cb14e5a95cc461", - "sha256:e0d1a4896f546b1e115ece4212dd02b383eeb3c7ff5c072624b15f531b776f36", - "sha256:e549ca852233b1aa20f2af1a8f9276b4a064c2515be0d73d36f28282502b8728" + "sha256:138983e96a5c473aae1e1cd6143aacf02ccc9bbbf6180f15fa2588f99531188b", + "sha256:1663d79fc8400903992c63f79b3908b9298c623138e8929bf36c559231e082d3", + "sha256:1d6b6f0c1e7dd8357f1ba56524bfc870d04ad3c00979db291784a7145497ad3b", + "sha256:23ed91f8d2fa75a109708338f80a7addd2f37c93a8b0e6c9d220f1427939b81f", + "sha256:366fe0d5a74e3cf1d4e7cbf3c49e308da60e7835ea268667be9185388f05d7a5", + "sha256:4d8790f420ebc484236017edba59182cf2a21bd3e4224a0bd0760a9c7268e96a", + "sha256:6400774e6820760eb6c322f6feace43fe7267deb9f8d508f10bf258887a9c4d5", + "sha256:65a7ad892a570045b0de2db6af17119162880aebc05a0c125ce2db7dab36f17e", + "sha256:6cf94756fb6a822d20a5a64f44840e6633ebf8b1deb3ce01057bff1cc03b01c2", + "sha256:7770e7bdee34549e8baf28b8626e6552de7894d869465a7c95fd9af33b4cbeb0", + "sha256:856c7fca5ed780ed44f60bceb92d6b311ebc008a2249415b8f6045201d4f5530", + "sha256:89c347170a691e3b8d072519f36790b9c19a2263ec0af0144c873994ecfe55eb", + "sha256:8bd52c1891ae74cee21a4ebe8325953310a2e0af5352d70f47f5461422fcce2d", + "sha256:8c62636a1e9d8a1fc74ffb70383939b9cd93f2c9ee8e12015a50dd75c98a989e", + "sha256:a0f958cbca18d05846e3081dfff8575e73d45595441d659847479656dc76f91d", + "sha256:ae27ba4d37925d5b2cff192acaa70c8bb114d632bbc527cc91fea0370702b866", + "sha256:b347d3cc8510f8fbe191956fcda7da372ebb3302789acefca08e352345959003", + "sha256:b4b91f1b1bac135c077326d30a1876f917e6c36b844a2e329b148fb9cb7aa660", + "sha256:b7ec5db19feab98a31fcd5caccf4a9a4e83f96933d1ca393ba7aea665710c2bb", + "sha256:ba98d6a41ec0b7c81dd85d764f15653d6abbbbd69d92630677c43f92dd50d924", + "sha256:bba3a35b4648694783aeae5b77c235a57191c8b1b375c8602b03ae56a6cf4fe7", + "sha256:ccac408873f65b8954858ef08d4b098841301e232afc1b14e3eada489d303a7f", + "sha256:cd423b8ee2f75fc9db09158875abe5e2c952a26ae5e521c3265ab2f9d3511ddf", + "sha256:cec0616d2ba6e7dda6327089a2f34ec723aa9ac2c389857ef0b83f65fb135dd6", + "sha256:db66a4e0fdfbf4090631d59c3f65e960d9a5561e9259f6f3993cbe91e396837e", + "sha256:ddb360da76c62c7c23ec3da40e1af48e6712a563905fea2d1a8911ff7a3b6c4d", + "sha256:e08c268e12d54ea629a1f123bf7cb9587bdd57fd7bcdac22394dc6272a18668f", + "sha256:e273242cdca56029af694d7ce18075d47a74d034326d663ff6dd2655a6f44825", + "sha256:eb3a0a3e630ee89758eb96b39b456f4697732351fb0c080e9498ea578f9b71f9" ], "index": "pypi", - "markers": "python_version not in '2.7, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8' and python_version >= '3.9'", - "version": "==0.10.0" + "markers": "python_full_version >= '3.10.0' and python_full_version < '4.0.0'", + "version": "==0.11.1" }, "pyparsing": { "hashes": [ - "sha256:023b5e7e5520ad96642e2c6db4cb683d3970bd640cdf7115049a6e9c3682df82", - "sha256:47fad0f17ac1e2cad3de3b458570fbc9b03560aa029ed5e16ee5554da9a2251c" + "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", + "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc" ], "markers": "python_version >= '3.9'", - "version": "==3.3.1" + "version": "==3.3.2" }, "pyroaring": { "hashes": [ - "sha256:03e063329481396cbb70f1ce8b8ca0f01d74a45ee9d908b6645b0282b23832b0", - "sha256:051bd9a66ce855a1143faa2b879ea6c6ca2905209e172ce9eedf79834897c730", - "sha256:054eb6ef04ff9d2ed3ddd18ae21e5e51e02d0f8cdd7e5cb948648f77ddb04ea2", - "sha256:0caa10f20329d09233fac6550b2adce4d9f173f748a9a9a5ea3b7033827dfe2d", - "sha256:1ed2e9c7af46052466b5fa0392fe540331474718d97b9756cefa23233bfdb3ea", - "sha256:1f414343b4ed0756734328cdf2a91022fc54503769e3f8d79bd0b672ea815a16", - "sha256:20bc947054b197d1baa76cd05d70b8e04f95b82e698266e2f8f2f4b36d764477", - "sha256:25a83ec6bac3106568bd3fdd316f0fee52aa0be8c72da565ad02b10ae7905924", - "sha256:3035db9459bd8635a0145b4a9e3102869d621cb0b3648051115f06d31ffd1976", - "sha256:3043ff5c85375310ca3cd3e01944e03026e0ec07885e52dfabcfcd9dc303867f", - "sha256:34a781f1f9766897f63ef18be129827340ae37764015b83fdcff1efb9e29136d", - "sha256:3b217c4b3ad953b4c759a0d2f9bd95316f0c345b9f7adb49e6ded7a1f5106bd4", - "sha256:428c3bb384fe4c483feb5cf7aa3aef1621fb0a5c4f3d391da67b2c4a43f08a10", - "sha256:47d985293f861df1f2b03b41cef4fd3249c1c9608081750bcf3153051c2312d0", - "sha256:4d064aea3827e63eb60294ae3e6623e29613f5c8844869646d06f3735a425dd9", - "sha256:4f0cbc766df2a24e28f23d69b66bbec64e691799219fd82c2f2236f03fc88e2e", - "sha256:531b6ae56989b61742dde1b64fedc5537acc046cf04a333548322366c1bf3922", - "sha256:535d8deccbd8db2c6bf38629243e9646756905574a742b2a72ff51d6461d616c", - "sha256:53be988fc86698d56c11049bfe5113a2f6990adb1fa2782b29636509808b6aa7", - "sha256:54cb0c2bddd330e22099773c4681aca90847265afe56a9201a92c1a758494261", - "sha256:57fd5b80dacb8e888402b6b7508a734c6a527063e4e24e882ff2e0fd90721ada", - "sha256:5a183f5ec069757fe5b60e37f7c6fa8a53178eacf0d76601b739e2890edee036", - "sha256:5b16c2a2791a5a09c4b59c0e1069ac1c877d0df25cae3155579c7eac8844676e", - "sha256:6321a95b5b2ba69aa32e920dd1aa7f8fc4fac55b75981978aa4f2378724dee27", - "sha256:654af38b1f1c9bdc27b4f6d331fc5d91599df96e72a6df1886f4d95eea60ab29", - "sha256:65d2d81e5aed7698fab23058db70fb2b65fad221090be037a0af498569109915", - "sha256:6721036afa31c07bdcbb4fcafa166660cf9c2eac695dcd495f8778549fa55899", - "sha256:678d31fc24e82945a1bfb14816c77823983382ffea76985d494782aa2f058427", - "sha256:684fb8dffe19bdb7f91897c65eac6eee23b1e46043c47eb24288f28a1170fe04", - "sha256:6eb98d2cacfc6d51c6a69893f04075e07b3df761eac71ba162c43b9b4c4452ad", - "sha256:755cdac1f9a1b7b5c621e570d4f6dbcf3b8e4a1e35a66f976104ecb35dce4ed2", - "sha256:7a1b1c82d2da0bedc7c22d4047bd62544ef0e25c6be86ccf4b9d1ccc38876ee8", - "sha256:7c8fb6b0ad0e8db1b9559b2da180b103b48adddf0e4f24404269e2a3b5db268d", - "sha256:7d815f624e0285db3669f673d1725cb754b120ec70d0032d7c7166103a96c96d", - "sha256:7df84d223424523b19a23781f4246cc247fd6d821e1bc0853c2f25669136f7d0", - "sha256:8038f7dd25eb83c277b8e0ea14c5e61f085cc76bd0c6b9f6679f1770e33541ec", - "sha256:82ca5be174b85c40be7b00bc6bf39b2931a1b4a465f3af17ec6b9c48e9aa6fe0", - "sha256:8c7fb6ddf6ef31148f0939bc5c26b681d63df301ee1e372525012dd7bfe4a30a", - "sha256:8d5df95d9511bc83048da9348c7ab1c20f97ff4d95faf27ee1fdf2e8a96e200e", - "sha256:8e996939de01f448eb9448d91b47ab60bff0555c2a80d5c12a8405814072cd35", - "sha256:9232f3f606315d59049c128154100fd05008d5c5c211e48b21848cd41ee64d26", - "sha256:96a51e96f8f473381615f0f852f7238ad0a47f28e4a35e9f082468c5cfe4e9c3", - "sha256:9c0c856e8aa5606e8aed5f30201286e404fdc9093f81fefe82d2e79e67472bb2", - "sha256:a5a1db84e0952805223a7bf77eae58384b700a6b9affc53fb9772dddf868c712", - "sha256:a7a7d14822c64841ae64e98309697e1631ebadba55ded33daa7cd16d1b487d11", - "sha256:a86b88adbe0531b75f94f87279a6d4ee68e63335e29bbdab4400a05704fc2587", - "sha256:a9459f27498f97d08031a34a5ead230b77eb0ab3cc3d85b7f54faa2fd548acd6", - "sha256:a967e9eddb9485cbdd95d6371e3dada67880844d836c0283d3b11efe9225d1b7", - "sha256:ab26a7a45a0bb46c00394d1a60a9f2d57c220f84586e30d59b39784b0f94aee6", - "sha256:add3e4c78eb590a76526ecce8d1566eecdd5822e351c36b3697997f4a80ed808", - "sha256:b12ef7f992ba7be865f91c7c098fd8ac6c413563aaa14d5b1e2bcb8cb43a4614", - "sha256:b744746ba5da27fad760067f12633f5d384db6a1e65648d00244ceacbbd87731", - "sha256:ba5909b4c66bb85cab345e2f3a87e5ce671509c94b8c9823d8db64e107cbe854", - "sha256:bb7f2561e3ec26c3c869458431cbcba6b83f7e925b024460c136dbb5fadf3b31", - "sha256:c10e4cfbe203a578c78808406af491e3615d5e46cf69a7709050243346cd68bc", - "sha256:c17d4ec53b5b6b333d9a9515051213a691293ada785dc8c025d3641482597ed3", - "sha256:c28750148ef579a7447a8cb60b39e5943e03f8c29bce8f2788728f6f23d1887a", - "sha256:c656d62d0cf96ede0edc4e7d392889238777bdf88b32afd5d51c3cab016c29a0", - "sha256:c84d5b17ef628c3956d9a79c2f78c5bea7dda6f7aeb01f34671034d2650b9efb", - "sha256:cc329c62e504f2531c4008240f31736bcd2dee4339071f1eac0648068e6d17fa", - "sha256:cd18446832ea04a7d33bd6b78270b0be14eabcda5937af3428d6cb3d2bf98e54", - "sha256:cd7392d1c010c9e41c11c62cd0610c8852e7e9698b1f7f6c2fcdefe50e7ef6da", - "sha256:ce202452de2b58bffa3eb02e27c681eefcfb54e27f8ef85b5c93ebaada50f3f3", - "sha256:d16ae185c72dc64f76335dbe53e53a892e78115adc92194957d1b7ef74d230b9", - "sha256:d31f4c1c906f1af14ce61a3959d04a14a64c594f8a768399146a45bbd341f21f", - "sha256:d46eb5db78b673d8d8ca83651a1cce1e15eec5a922f2951b1f61014463b72af5", - "sha256:d54024459ace600f1d1ffbc6dc3c60eb47cca3b678701f06148f59e10f6f8d7b", - "sha256:dba4e4700030182a981a3c887aa73887697145fc9ffb192f908aa59b718fbbdd", - "sha256:dd0831326971b0ffa08ccce79abe7c2450d5d9254804d855e23a8ba31f70351a", - "sha256:dd7f9e5b7366b8f9bafca2a0fcf83fa534a00cc12d4ca01e301d8662bcdb805c", - "sha256:ddc80bfcd313c7c524a2742d263e73cae088b6a611b77dcc46fa90c306f6dace", - "sha256:defc508ef7acaf58d07e603c55feda6742c4034f5262cfd616f92cc3adbc2815", - "sha256:e195636034a0b62ec0e5325ed2f610f39cc8955ace3f47a5bc7f484159f02341", - "sha256:e26dd1dc1edba02288902914bdb559e53e346e9155defa43c31fcab831b55342", - "sha256:e6bcf838564c21bab8fe6c2748b4990d4cd90612d8c470c04889def7bb5114ea", - "sha256:e7f68dfcf8d01177267f4bc06c4960fe8e39577470d1b52c9af8b61a72ca8767", - "sha256:ebab073db620f26f0ba11e13fa2f35e3b1298209fba47b6bc8cb6f0e2c9627f9", - "sha256:ebaffe846cf4ba4f00ce6b8a9f39613f24e2d09447e77be4fa6e898bc36451b6", - "sha256:f109be8af937e85c52cb920d3fd120db52b172f59460852d2e3d2e3d13a4f52a", - "sha256:f2b2eb8bd1c35c772994889be9f7dda09477475d7aa1e2af9ab4ef18619326f6", - "sha256:f34b44b3ec3df97b978799f2901fefb2a48d367496fd1cde3cc5fe8b3bc13510", - "sha256:f758c681e63ffe74b20423695e71f0410920f41b075cee679ffb5bc2bf38440b", - "sha256:f888447bf22dde7759108bfe6dfbeb6bbb61b14948de9c4cb6843c4dd57e2215", - "sha256:fbbdc44c51a0a3efd7be3dbe04466278ce098fcd101aa1905849319042159770" - ], - "version": "==1.0.3" + "sha256:01f990499a4f34a666702da16080b6a94b990c5dc5cd7f2b1f6f92a7184b94ed", + "sha256:0333b18734475c531977e7a9027fc5753d7cac836f2475198f630ecefbbfd764", + "sha256:048b915bacfc8e4d05de4fe6c2d7f7dd9d4c7a200b3b23dc1589226ca2526b41", + "sha256:06b15bc8e0c272c3bee0c8adc29130178cd792ad99af64d7d7a1eb3069a1e0b8", + "sha256:06f080c8dc42af32f66f11afdc603d5bf965d9239ad8d7773f0bae0d28a4e22f", + "sha256:0736ee92f8781570d5be22a4f43238937676518a18487b1efafca67a63a89099", + "sha256:078ee25ed3fda098032d7f30a603f836b538e5e7e5717d8dee29b42de4547250", + "sha256:0b69e8799062acf859b13f5369c0976a6033211e72c51f8b7bc817925cab193f", + "sha256:0f8e82d665385033eef1794d96a34cfb34da76fa6896d49756510f2f32a0c218", + "sha256:13ccc488cfe6a227945586090397f299fd40c1a0dc1ed25e8e58a4d068c1ed46", + "sha256:15b0b92b4dcdb636ecd0a2104ef3be6b5288f85642dd16d7d631152948c3856e", + "sha256:15c7f8b4bfc66c005723218500af414466a52e5cd419dbdd3a899307303b4322", + "sha256:1c5f78aeccf2ce4580cd373f50c20b3e6279a594d6fb827266dbceede9dd8c92", + "sha256:226079645dd4098d3619ae5fc19bf9abfd2187a74aba94a8768443e637d406fa", + "sha256:236c5fb377d942c0911c7f7b1d929e192ad0165f07dca0957fa4b8ec607b4a8d", + "sha256:2984402d7c003923dc2e9b3e05676417f1de66ec31e4988d4b54c0a6008fe269", + "sha256:2ef35040b1bc4bb686b4206f4a4de748f6209fa578cafdf177ca3bb67f7bd552", + "sha256:2f617e66633428659193736bc568a0462f2966ab14229ec936ebb490647caa67", + "sha256:2fc84c41de2b1370d57fea076f12246e6ab9333499ba6e8c74a5ea32168d357a", + "sha256:310495c93d8e97b07de9024b6439215a78a5cc165e103a7cda7bf183572a4329", + "sha256:316f89f7961972d07b7ed71f32335fe1b47d143b3dca1c35d58c48299f687750", + "sha256:3487b1531f3532f8a024a5b8a9fac97bd1696c4df2a0ca92aa9e07009fcd0a9c", + "sha256:387001bcaa1653c6770eb8dd88f6427cbcef882c2ab8a812949dd8d98d09d545", + "sha256:4035852113b720f72872741be8f9760c0d2dd1640f0bc598ece7ff7ca226a3a0", + "sha256:4171902a88df936564f39cce05e36ff5d363e122575d5cf575163917be9ec91c", + "sha256:457dbadc044ad5ceb65dbdbc9aabc2ef557d4177353a7705fbe786a8336aba81", + "sha256:474b25774e0ea8e36ad3f811dbec6183ba4bcf93ee95674a14a4ae96932f0ffd", + "sha256:49a354fdd9359a11c2da5a70d5c202ee339a4328d2c57679acf642e577202b87", + "sha256:4dca094f1d0e18901fa3f6b8866fa14a0f9640b22f41f5fc278c20e15e70efee", + "sha256:55ae44a958017ef5d355c80a1b20ecd5cf8cd796ea26c9e34ef606a2f65f49de", + "sha256:598f4f4f2d61f2c5e5e64319faa03866397ab74a9bb7ef99d14ecd9f1a768166", + "sha256:5a8b8448c2f7af3b40f17dde23b6739f3b19cf8b24db6f817c549c870d50aae3", + "sha256:63ab0dcb24933fc9d4ca8c9fa0440f7e177183975990f756a42cddad22fd66db", + "sha256:645af7435e9ad31a7aa6891b55797fe904c9c579fc5993b7fd59605f593188b9", + "sha256:6633a7a91df7aea8340e348408b4eb92a2cd89eae0f99e9b42b1d6eb6a1c9673", + "sha256:68f18b8fffee671996a4ba450f015a89281f7b7516ccc70b1398f20f46858536", + "sha256:731e1f64292ee0e99cf43ef9d052c75c06f4c6dda752a6a21d062726bb077a2b", + "sha256:7497ea5124523bae7c05726e38faa9fe2f6e64c2423f96f0e4a00078d8c1b9db", + "sha256:76bdac16f535154322ca734cf51d96fa8f8d5a2f8d009a24affba0036f74f677", + "sha256:79af77dfb872da8a908514628b3f6bbcd2151bf31aeafebe2527e8d6fb786c97", + "sha256:7dfc36328b9dcd36ab2ba6c1d3438fa8503d9f375fa29786606dcca43fd0c94c", + "sha256:827e7ecfa57a0f6e1cfd2449eabbc04fabcc16e4b3ad0f59f7a2d08f5d2fd063", + "sha256:84925878cff40ce1f5a99de0fc5b49b7cf6a6276ae5046ae80bc2ae9b5b83d83", + "sha256:8a202294c7bfd19c2d08e95e03e486859b351a6f1daf0d69197bd8d355d4044a", + "sha256:8e1b2a9f6f6c08e971098867186bfd23fd08afd899db318cc9ed602913b1fc54", + "sha256:910c177c3ff77db0d306119963583be85a98870d396472b5a0153babc8b7fcf7", + "sha256:91e615d6a5e114ce9297650fabd48bf1f01655cfd5bd9cb41b9b1dc0ff840e06", + "sha256:924ee997ff1a0f2a184e39e153e9f77e0b928fe908d0aef63d03204c3ed90586", + "sha256:92fdad43421ad2e076639f7a0d9ee815713b98bfe07dd9107ef3ea91ff0f3b37", + "sha256:969c24580c9c16daa8e36eb76729d8c59c76250890dc6acdae9adb4d41107c4b", + "sha256:99d4217bdfeedc91b82efcec940175a9f9a9137c6476faf7ce5d9c9dd889c8e6", + "sha256:9a438455b90bf28ea5939ea35af8926e944f9c1480dcce3feea38a0239fe6629", + "sha256:9be9df4a9ec671fdef22581e8ac9110ca8c47c5724e90ce825d54813de8ac3d3", + "sha256:9ef52a2a1b3e6ccb3daac2dd5e8178349846d05f8cc1d0c05c551f73927cf0b4", + "sha256:a4ce889a06603931a03195b90dc11f03cfb6849c4d8504168e7325da06ce95ee", + "sha256:a7553a23a806033ee93f5bd50f7c963d713a26ebecd55f173d24404a8673317d", + "sha256:a92af0bf8ad040b513ef8867fda2669708a1b81325295c55cb4e8cc3a835321a", + "sha256:abcb5083a80453ff59757882510c41e895b20c3326a37e3f683993953ae6ed1c", + "sha256:ae8334787aabb41b947d203c4430f3589d587b2d65809bac80850dbdc65fcea7", + "sha256:b7a527279cc378e893a543a2271d71321b57d21733915a5a14e587532e29265a", + "sha256:bbed00fb4c4f2ba0446e159f025beebb12c2f12dd34827551eb239438044fdb9", + "sha256:c0e7768e2143b842f5833857bbcd0ba28b0022028654ca5be395b7320b548460", + "sha256:c291428f148450e0609d5b1201b81e8248b3262770e51fc4c89768529ee36df0", + "sha256:c2e909a436ef22b9ba9f7dbc0e88fb684ced3bc6d5192b8315fe5ba180796b34", + "sha256:c461121b1ee5462ca0da0e5f67d836f04d29b140e4b26969647347e2e89bc058", + "sha256:c67b59f5f794e3b8262b89148a2662199a11aac4169cd5515c6dc74efa7a3447", + "sha256:cac139cbeb1941760a9568d742d29bd31eaa2ea7bb6cf54757d14be4498145b9", + "sha256:cbbe3fd3baef0bf04e149031aff44485757173370c5ce326ccb5269e131377ed", + "sha256:d0b14587e4ea67b7c7e16293bd934929ac1a7cced34aed11caab15466b24b8d4", + "sha256:d3125ddc6e9e9dd58663db2db67c5ef12ac76d7a7e1882cf82581cd2307ac82b", + "sha256:d73979e1a3a6de2b7039dd9a545afa23f3b33f8b6f90a825390a34253d097f96", + "sha256:d85f85aa2f56a5dde9c8d97cbfaf80dfe9c7212171f7f263043d0800b44cee3a", + "sha256:d943aebe18f017e3a37acdf8eced5b37bd9b5d5fcde8d581936ec6732b72f3c7", + "sha256:dab3d8577b143c64c1c1659b4d1c69d7fec5baa0d0c0181cdddf6b84f43af00a", + "sha256:dcc7d0133f46163b5390dd151e3305bd47289f7710c6e5444f38453d55b15d1c", + "sha256:dd89ebb7496325fb1b3dbe290dad35bc4da8722b5e3afd2a71b1d6e8ad981725", + "sha256:dfabce5b120dd50dc46d11066ec111732d19a4f99e5a7720271dbab5b13bb692", + "sha256:ed967ec4ef3b9de7ef3f7c0cf3a850b599111479654d0b7962f12acea77b24ce", + "sha256:edd767e6263fa17feae959519ee3d9bdbd0c5f03b55f89ecdff9d7136886e8f6", + "sha256:f0239d70d5d83227fa43a43b332bf707c6cafa7e28c14889d1602fc872934f02", + "sha256:f38ca8a8b43f6a12d606bf68d9c0348620bca29b97d315d545caa3f0a1179902", + "sha256:f8157345c01f633f759fc47133a076d3307f85d0246dd17986127fd1e2c349d0", + "sha256:f8285cb12c7181cd29c9807f624d729c0db7bbf6f96fe7c25aba719225f85051", + "sha256:f9a111e668f026849a22a7e4cab628e41e48bb87bd2a9aea72bca75edcd7a6f2", + "sha256:fcee7f9cd9dcce96e057ae78b7deef0eced728b7452dcf2781b366bd69db3432" + ], + "version": "==1.0.4" }, "pyspark": { "extras": [ @@ -1710,10 +1703,10 @@ }, "pytz": { "hashes": [ - "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", - "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00" + "sha256:3378dde6a0c3d26719182142c56e60c7f9af7e968076f31aae569d72a0358ee1", + "sha256:f2fd16142fda348286a75e1a524be810bb05d444e5a081f37f7affc635035f7a" ], - "version": "==2025.2" + "version": "==2026.1.post1" }, "pyyaml": { "hashes": [ @@ -1804,27 +1797,27 @@ }, "requests": { "hashes": [ - "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", - "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf" + "sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517", + "sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a" ], - "markers": "python_version >= '3.9'", - "version": "==2.32.5" + "markers": "python_version >= '3.10'", + "version": "==2.33.1" }, "responses": { "hashes": [ - "sha256:0c710af92def29c8352ceadff0c3fe340ace27cf5af1bbe46fb71275bcd2831c", - "sha256:9374d047a575c8f781b94454db5cab590b6029505f488d12899ddb10a4af1cf4" + "sha256:03ec4409088cd5c66b71ecbbbd27fe2c58ddfad801c66203457b3e6a04868c37", + "sha256:c7f6923e6343ef3682816ba421c006626777893cb0d5e1434f674b649bac9eb4" ], "markers": "python_version >= '3.8'", - "version": "==0.25.8" + "version": "==0.26.0" }, "rich": { "hashes": [ - "sha256:73ff50c7c0c1c77c8243079283f4edb376f0f6442433aecb8ce7e6d0b92d1fe4", - "sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd" + "sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d", + "sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b" ], "markers": "python_full_version >= '3.8.0'", - "version": "==14.2.0" + "version": "==14.3.3" }, "rpds-py": { "hashes": [ @@ -1970,71 +1963,75 @@ ], "version": "==1.1.0" }, - "sortedcontainers": { - "hashes": [ - "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", - "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0" - ], - "version": "==2.4.0" - }, "sqlalchemy": { "hashes": [ - "sha256:0209d9753671b0da74da2cfbb9ecf9c02f72a759e4b018b3ab35f244c91842c7", - "sha256:040f6f0545b3b7da6b9317fc3e922c9a98fc7243b2a1b39f78390fc0942f7826", - "sha256:0c9f6ada57b58420a2c0277ff853abe40b9e9449f8d7d231763c6bc30f5c4953", - "sha256:0f02325709d1b1a1489f23a39b318e175a171497374149eae74d612634b234c0", - "sha256:107029bf4f43d076d4011f1afb74f7c3e2ea029ec82eb23d8527d5e909e97aa6", - "sha256:12c694ed6468333a090d2f60950e4250b928f457e4962389553d6ba5fe9951ac", - "sha256:13e27397a7810163440c6bfed6b3fe46f1bfb2486eb540315a819abd2c004128", - "sha256:1632a4bda8d2d25703fdad6363058d882541bdaaee0e5e3ddfa0cd3229efce88", - "sha256:1d8b4a7a8c9b537509d56d5cd10ecdcfbb95912d72480c8861524efecc6a3fff", - "sha256:215f0528b914e5c75ef2559f69dca86878a3beeb0c1be7279d77f18e8d180ed4", - "sha256:2c0b74aa79e2deade948fe8593654c8ef4228c44ba862bb7c9585c8e0db90f33", - "sha256:2e90a344c644a4fa871eb01809c32096487928bd2038bf10f3e4515cb688cc56", - "sha256:3c5f76216e7b85770d5bb5130ddd11ee89f4d52b11783674a662c7dd57018177", - "sha256:470daea2c1ce73910f08caf10575676a37159a6d16c4da33d0033546bddebc9b", - "sha256:4748601c8ea959e37e03d13dcda4a44837afcd1b21338e637f7c935b8da06177", - "sha256:4b6bec67ca45bc166c8729910bd2a87f1c0407ee955df110d78948f5b5827e8a", - "sha256:5225a288e4c8cc2308dbdd874edad6e7d0fd38eac1e9e5f23503425c8eee20d0", - "sha256:56ead1f8dfb91a54a28cd1d072c74b3d635bcffbd25e50786533b822d4f2cde2", - "sha256:5964f832431b7cdfaaa22a660b4c7eb1dfcd6ed41375f67fd3e3440fd95cb3cc", - "sha256:59a8b8bd9c6bedf81ad07c8bd5543eedca55fe9b8780b2b628d495ba55f8db1e", - "sha256:672c45cae53ba88e0dad74b9027dddd09ef6f441e927786b05bec75d949fbb2e", - "sha256:6d0beadc2535157070c9c17ecf25ecec31e13c229a8f69196d7590bde8082bf1", - "sha256:7ae64ebf7657395824a19bca98ab10eb9a3ecb026bf09524014f1bb81cb598d4", - "sha256:7f46ec744e7f51275582e6a24326e10c49fbdd3fc99103e01376841213028774", - "sha256:830d434d609fe7bfa47c425c445a8b37929f140a7a44cdaf77f6d34df3a7296a", - "sha256:83d7009f40ce619d483d26ac1b757dfe3167b39921379a8bd1b596cf02dab4a6", - "sha256:883c600c345123c033c2f6caca18def08f1f7f4c3ebeb591a63b6fceffc95cce", - "sha256:8a420169cef179d4c9064365f42d779f1e5895ad26ca0c8b4c0233920973db74", - "sha256:8defe5737c6d2179c7997242d6473587c3beb52e557f5ef0187277009f73e5e1", - "sha256:9a62b446b7d86a3909abbcd1cd3cc550a832f99c2bc37c5b22e1925438b9367b", - "sha256:9c6378449e0940476577047150fd09e242529b761dc887c9808a9a937fe990c8", - "sha256:a15b98adb7f277316f2c276c090259129ee4afca783495e212048daf846654b2", - "sha256:afbf47dc4de31fa38fd491f3705cac5307d21d4bb828a4f020ee59af412744ee", - "sha256:b3ee2aac15169fb0d45822983631466d60b762085bc4535cd39e66bea362df5f", - "sha256:b8c8b41b97fba5f62349aa285654230296829672fc9939cd7f35aab246d1c08b", - "sha256:ba547ac0b361ab4f1608afbc8432db669bd0819b3e12e29fb5fa9529a8bba81d", - "sha256:c1c2091b1489435ff85728fafeb990f073e64f6f5e81d5cd53059773e8521eb6", - "sha256:c64772786d9eee72d4d3784c28f0a636af5b0a29f3fe26ff11f55efe90c0bd85", - "sha256:cd337d3526ec5298f67d6a30bbbe4ed7e5e68862f0bf6dd21d289f8d37b7d60b", - "sha256:d29b2b99d527dbc66dd87c3c3248a5dd789d974a507f4653c969999fc7c1191b", - "sha256:d2c3684fca8a05f0ac1d9a21c1f4a266983a7ea9180efb80ffeb03861ecd01a0", - "sha256:d62e47f5d8a50099b17e2bfc1b0c7d7ecd8ba6b46b1507b58cc4f05eefc3bb1c", - "sha256:d8a2ca754e5415cde2b656c27900b19d50ba076aa05ce66e2207623d3fe41f5a", - "sha256:db6834900338fb13a9123307f0c2cbb1f890a8656fcd5e5448ae3ad5bbe8d312", - "sha256:e057f928ffe9c9b246a55b469c133b98a426297e1772ad24ce9f0c47d123bd5b", - "sha256:e50dcb81a5dfe4b7b4a4aa8f338116d127cb209559124f3694c70d6cd072b68f", - "sha256:ebd300afd2b62679203435f596b2601adafe546cb7282d5a0cd3ed99e423720f", - "sha256:ed3635353e55d28e7f4a95c8eda98a5cdc0a0b40b528433fbd41a9ae88f55b3d", - "sha256:ee580ab50e748208754ae8980cec79ec205983d8cf8b3f7c39067f3d9f2c8e22", - "sha256:f7d27a1d977a1cfef38a0e2e1ca86f09c4212666ce34e6ae542f3ed0a33bc606", - "sha256:fd93c6f5d65f254ceabe97548c709e073d6da9883343adaa51bf1a913ce93f8e", - "sha256:fe187fc31a54d7fd90352f34e8c008cf3ad5d064d08fedd3de2e8df83eb4a1cf" + "sha256:01146546d84185f12721a1d2ce0c6673451a7894d1460b592d378ca4871a0c72", + "sha256:059d7151fff513c53a4638da8778be7fce81a0c4854c7348ebd0c4078ddf28fe", + "sha256:0c98c59075b890df8abfcc6ad632879540f5791c68baebacb4f833713b510e75", + "sha256:0f2fa354ba106eafff2c14b0cc51f22801d1e8b2e4149342023bd6f0955de5f5", + "sha256:12b04d1db2663b421fe072d638a138460a51d5a862403295671c4f3987fb9148", + "sha256:22d8798819f86720bc646ab015baff5ea4c971d68121cb36e2ebc2ee43ead2b7", + "sha256:233088b4b99ebcbc5258c755a097aa52fbf90727a03a5a80781c4b9c54347a2e", + "sha256:24bd94bb301ec672d8f0623eba9226cc90d775d25a0c92b5f8e4965d7f3a1518", + "sha256:275424295f4256fd301744b8f335cff367825d270f155d522b30c7bf49903ee7", + "sha256:32fe6a41ad97302db2931f05bb91abbcc65b5ce4c675cd44b972428dd2947700", + "sha256:334edbcff10514ad1d66e3a70b339c0a29886394892490119dbb669627b17717", + "sha256:3bb9ec6436a820a4c006aad1ac351f12de2f2dbdaad171692ee457a02429b672", + "sha256:3ddcb27fb39171de36e207600116ac9dfd4ae46f86c82a9bf3934043e80ebb88", + "sha256:42e8804962f9e6f4be2cbaedc0c3718f08f60a16910fa3d86da5a1e3b1bfe60f", + "sha256:43d044780732d9e0381ac8d5316f95d7f02ef04d6e4ef6dc82379f09795d993f", + "sha256:46796877b47034b559a593d7e4b549aba151dae73f9e78212a3478161c12ab08", + "sha256:46d51518d53edfbe0563662c96954dc8fcace9832332b914375f45a99b77cc9a", + "sha256:47604cb2159f8bbd5a1ab48a714557156320f20871ee64d550d8bf2683d980d3", + "sha256:4bbccb45260e4ff1b7db0be80a9025bb1e6698bdb808b83fff0000f7a90b2c0b", + "sha256:4d4e5a0ceba319942fa6b585cf82539288a61e314ef006c1209f734551ab9536", + "sha256:55250fe61d6ebfd6934a272ee16ef1244e0f16b7af6cd18ab5b1fc9f08631db0", + "sha256:566df36fd0e901625523a5a1835032f1ebdd7f7886c54584143fa6c668b4df3b", + "sha256:57ca426a48eb2c682dae8204cd89ea8ab7031e2675120a47924fabc7caacbc2a", + "sha256:5e61abbec255be7b122aa461021daa7c3f310f3e743411a67079f9b3cc91ece3", + "sha256:618a308215b6cececb6240b9abde545e3acdabac7ae3e1d4e666896bf5ba44b4", + "sha256:62557958002b69699bdb7f5137c6714ca1133f045f97b3903964f47db97ea339", + "sha256:6270d717b11c5476b0cbb21eedc8d4dbb7d1a956fd6c15a23e96f197a6193158", + "sha256:685e93e9c8f399b0c96a624799820176312f5ceef958c0f88215af4013d29066", + "sha256:69469ce8ce7a8df4d37620e3163b71238719e1e2e5048d114a1b6ce0fbf8c662", + "sha256:6eb188b84269f357669b62cb576b5b918de10fb7c728a005fa0ebb0b758adce1", + "sha256:74ab4ee7794d7ed1b0c37e7333640e0f0a626fc7b398c07a7aef52f484fddde3", + "sha256:77641d299179c37b89cf2343ca9972c88bb6eef0d5fc504a2f86afd15cd5adf5", + "sha256:7c821c47ecfe05cc32140dcf8dc6fd5d21971c86dbd56eabfe5ba07a64910c01", + "sha256:7d6be30b2a75362325176c036d7fb8d19e8846c77e87683ffaa8177b35135613", + "sha256:7f605a456948c35260e7b2a39f8952a26f077fd25653c37740ed186b90aaa68a", + "sha256:83101a6930332b87653886c01d1ee7e294b1fe46a07dd9a2d2b4f91bcc88eec0", + "sha256:88690f4e1f0fbf5339bedbb127e240fec1fd3070e9934c0b7bef83432f779d2f", + "sha256:8a97ac839c2c6672c4865e48f3cbad7152cee85f4233fb4ca6291d775b9b954a", + "sha256:8d6efc136f44a7e8bc8088507eaabbb8c2b55b3dbb63fe102c690da0ddebe55e", + "sha256:8e20e511dc15265fb433571391ba313e10dd8ea7e509d51686a51313b4ac01a2", + "sha256:951d4a210744813be63019f3df343bf233b7432aadf0db54c75802247330d3af", + "sha256:9ac7a3e245fd0310fd31495eb61af772e637bdf7d88ee81e7f10a3f271bff014", + "sha256:9b1c058c171b739e7c330760044803099c7fff11511e3ab3573e5327116a9c33", + "sha256:9c04bff9a5335eb95c6ecf1c117576a0aa560def274876fd156cfe5510fccc61", + "sha256:9c4969a86e41454f2858256c39bdfb966a20961e9b58bf8749b65abf447e9a8d", + "sha256:9e0400fa22f79acc334d9a6b185dc00a44a8e6578aa7e12d0ddcd8434152b187", + "sha256:a05977bffe9bffd2229f477fa75eabe3192b1b05f408961d1bebff8d1cd4d401", + "sha256:a143af2ea6672f2af3f44ed8f9cd020e9cc34c56f0e8db12019d5d9ecf41cb3b", + "sha256:a51d3db74ba489266ef55c7a4534eb0b8db9a326553df481c11e5d7660c8364d", + "sha256:b95b2f470c1b2683febd2e7eab1d3f0e078c91dbdd0b00e9c645d07a413bb99f", + "sha256:b9870d15ef00e4d0559ae10ee5bc71b654d1f20076dbe8bc7ed19b4c0625ceba", + "sha256:c1dc3368794d522f43914e03312202523cc89692f5389c32bea0233924f8d977", + "sha256:c338ec6ec01c0bc8e735c58b9f5d51e75bacb6ff23296658826d7cfdfdb8678a", + "sha256:c5070135e1b7409c4161133aa525419b0062088ed77c92b1da95366ec5cbebbe", + "sha256:cc992c6ed024c8c3c592c5fc9846a03dd68a425674900c70122c77ea16c5fb0b", + "sha256:d15950a57a210e36dd4cec1aac22787e2a4d57ba9318233e2ef8b2daf9ff2d5f", + "sha256:d898cc2c76c135ef65517f4ddd7a3512fb41f23087b0650efb3418b8389a3cd1", + "sha256:d99945830a6f3e9638d89a28ed130b1eb24c91255e4f24366fbe699b983f29e4", + "sha256:da9b91bca419dc9b9267ffadde24eae9b1a6bffcd09d0a207e5e3af99a03ce0d", + "sha256:df2d441bacf97022e81ad047e1597552eb3f83ca8a8f1a1fdd43cd7fe3898120", + "sha256:e06e617e3d4fd9e51d385dfe45b077a41e9d1b033a7702551e3278ac597dc750", + "sha256:ec44cfa7ef1a728e88ad41674de50f6db8cfdb3e2af84af86e0041aaf02d43d0", + "sha256:fb37f15714ec2652d574f021d479e78cd4eb9d04396dca36568fdfffb3487982" ], "index": "pypi", "markers": "python_version >= '3.7'", - "version": "==2.0.45" + "version": "==2.0.49" }, "sqlparse": { "hashes": [ @@ -2054,11 +2051,11 @@ }, "tenacity": { "hashes": [ - "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb", - "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138" + "sha256:6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55", + "sha256:adb31d4c263f2bd041081ab33b498309a57c77f9acf2db65aadf0898179cf93a" ], - "markers": "python_version >= '3.9'", - "version": "==9.1.2" + "markers": "python_version >= '3.10'", + "version": "==9.1.4" }, "text-unidecode": { "hashes": [ @@ -2083,37 +2080,29 @@ "markers": "python_version >= '3.9'", "version": "==0.4.2" }, - "tzdata": { - "hashes": [ - "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1", - "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7" - ], - "markers": "python_version >= '2'", - "version": "==2025.3" - }, "urllib3": { "hashes": [ - "sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797", - "sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd" + "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", + "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4" ], "markers": "python_version >= '3.9'", - "version": "==2.6.2" + "version": "==2.6.3" }, "werkzeug": { "hashes": [ - "sha256:2ad50fb9ed09cc3af22c54698351027ace879a0b60a3b5edf5730b2f7d876905", - "sha256:cd3cd98b1b92dc3b7b3995038826c68097dcb16f9baa63abe35f20eafeb9fe5e" + "sha256:63a77fb8892bf28ebc3178683445222aa500e48ebad5ec77b0ad80f8726b1f50", + "sha256:9bad61a4268dac112f1c5cd4630a56ede601b6ed420300677a869083d70a4c44" ], "markers": "python_version >= '3.9'", - "version": "==3.1.4" + "version": "==3.1.8" }, "xmltodict": { "hashes": [ - "sha256:54306780b7c2175a3967cad1db92f218207e5bc1aba697d887807c0fb68b7649", - "sha256:62d0fddb0dcbc9f642745d8bbf4d81fd17d6dfaec5a15b5c1876300aad92af0d" + "sha256:6d94c9f834dd9e44514162799d344d815a3a4faec913717a9ecbfa5be1bb8e61", + "sha256:a4a00d300b0e1c59fc2bfccb53d7b2e88c32f200df138a0dd2229f842497026a" ], "markers": "python_version >= '3.9'", - "version": "==1.0.2" + "version": "==1.0.4" }, "zipp": { "hashes": [ @@ -2122,6 +2111,111 @@ ], "markers": "python_version >= '3.9'", "version": "==3.23.0" + }, + "zstandard": { + "hashes": [ + "sha256:011d388c76b11a0c165374ce660ce2c8efa8e5d87f34996aa80f9c0816698b64", + "sha256:01582723b3ccd6939ab7b3a78622c573799d5d8737b534b86d0e06ac18dbde4a", + "sha256:05353cef599a7b0b98baca9b068dd36810c3ef0f42bf282583f438caf6ddcee3", + "sha256:05df5136bc5a011f33cd25bc9f506e7426c0c9b3f9954f056831ce68f3b6689f", + "sha256:06acb75eebeedb77b69048031282737717a63e71e4ae3f77cc0c3b9508320df6", + "sha256:07b527a69c1e1c8b5ab1ab14e2afe0675614a09182213f21a0717b62027b5936", + "sha256:0bbc9a0c65ce0eea3c34a691e3c4b6889f5f3909ba4822ab385fab9057099431", + "sha256:0be7622c37c183406f3dbf0cba104118eb16a4ea7359eeb5752f0794882fc250", + "sha256:106281ae350e494f4ac8a80470e66d1fe27e497052c8d9c3b95dc4cf1ade81aa", + "sha256:10ef2a79ab8e2974e2075fb984e5b9806c64134810fac21576f0668e7ea19f8f", + "sha256:1673b7199bbe763365b81a4f3252b8e80f44c9e323fc42940dc8843bfeaf9851", + "sha256:172de1f06947577d3a3005416977cce6168f2261284c02080e7ad0185faeced3", + "sha256:181eb40e0b6a29b3cd2849f825e0fa34397f649170673d385f3598ae17cca2e9", + "sha256:1869da9571d5e94a85a5e8d57e4e8807b175c9e4a6294e3b66fa4efb074d90f6", + "sha256:19796b39075201d51d5f5f790bf849221e58b48a39a5fc74837675d8bafc7362", + "sha256:1cd5da4d8e8ee0e88be976c294db744773459d51bb32f707a0f166e5ad5c8649", + "sha256:1f3689581a72eaba9131b1d9bdbfe520ccd169999219b41000ede2fca5c1bfdb", + "sha256:1f830a0dac88719af0ae43b8b2d6aef487d437036468ef3c2ea59c51f9d55fd5", + "sha256:223415140608d0f0da010499eaa8ccdb9af210a543fac54bce15babbcfc78439", + "sha256:22a06c5df3751bb7dc67406f5374734ccee8ed37fc5981bf1ad7041831fa1137", + "sha256:22a086cff1b6ceca18a8dd6096ec631e430e93a8e70a9ca5efa7561a00f826fa", + "sha256:23ebc8f17a03133b4426bcc04aabd68f8236eb78c3760f12783385171b0fd8bd", + "sha256:25f8f3cd45087d089aef5ba3848cd9efe3ad41163d3400862fb42f81a3a46701", + "sha256:2b6bd67528ee8b5c5f10255735abc21aa106931f0dbaf297c7be0c886353c3d0", + "sha256:2e54296a283f3ab5a26fc9b8b5d4978ea0532f37b231644f367aa588930aa043", + "sha256:3756b3e9da9b83da1796f8809dd57cb024f838b9eeafde28f3cb472012797ac1", + "sha256:37daddd452c0ffb65da00620afb8e17abd4adaae6ce6310702841760c2c26860", + "sha256:3a39c94ad7866160a4a46d772e43311a743c316942037671beb264e395bdd611", + "sha256:3b870ce5a02d4b22286cf4944c628e0f0881b11b3f14667c1d62185a99e04f53", + "sha256:3c83b0188c852a47cd13ef3bf9209fb0a77fa5374958b8c53aaa699398c6bd7b", + "sha256:4203ce3b31aec23012d3a4cf4a2ed64d12fea5269c49aed5e4c3611b938e4088", + "sha256:457ed498fc58cdc12fc48f7950e02740d4f7ae9493dd4ab2168a47c93c31298e", + "sha256:474d2596a2dbc241a556e965fb76002c1ce655445e4e3bf38e5477d413165ffa", + "sha256:4b14abacf83dfb5c25eb4e4a79520de9e7e205f72c9ee7702f91233ae57d33a2", + "sha256:4b6d83057e713ff235a12e73916b6d356e3084fd3d14ced499d84240f3eecee0", + "sha256:4d441506e9b372386a5271c64125f72d5df6d2a8e8a2a45a0ae09b03cb781ef7", + "sha256:4f187a0bb61b35119d1926aee039524d1f93aaf38a9916b8c4b78ac8514a0aaf", + "sha256:51526324f1b23229001eb3735bc8c94f9c578b1bd9e867a0a646a3b17109f388", + "sha256:53e08b2445a6bc241261fea89d065536f00a581f02535f8122eba42db9375530", + "sha256:53f94448fe5b10ee75d246497168e5825135d54325458c4bfffbaafabcc0a577", + "sha256:5a56ba0db2d244117ed744dfa8f6f5b366e14148e00de44723413b2f3938a902", + "sha256:5f1ad7bf88535edcf30038f6919abe087f606f62c00a87d7e33e7fc57cb69fcc", + "sha256:5f5e4c2a23ca271c218ac025bd7d635597048b366d6f31f420aaeb715239fc98", + "sha256:6a573a35693e03cf1d67799fd01b50ff578515a8aeadd4595d2a7fa9f3ec002a", + "sha256:6c0e5a65158a7946e7a7affa6418878ef97ab66636f13353b8502d7ea03c8097", + "sha256:6dffecc361d079bb48d7caef5d673c88c8988d3d33fb74ab95b7ee6da42652ea", + "sha256:7030defa83eef3e51ff26f0b7bfb229f0204b66fe18e04359ce3474ac33cbc09", + "sha256:7149623bba7fdf7e7f24312953bcf73cae103db8cae49f8154dd1eadc8a29ecb", + "sha256:72d35d7aa0bba323965da807a462b0966c91608ef3a48ba761678cb20ce5d8b7", + "sha256:75ffc32a569fb049499e63ce68c743155477610532da1eb38e7f24bf7cd29e74", + "sha256:7713e1179d162cf5c7906da876ec2ccb9c3a9dcbdffef0cc7f70c3667a205f0b", + "sha256:78228d8a6a1c177a96b94f7e2e8d012c55f9c760761980da16ae7546a15a8e9b", + "sha256:7b3c3a3ab9daa3eed242d6ecceead93aebbb8f5f84318d82cee643e019c4b73b", + "sha256:809c5bcb2c67cd0ed81e9229d227d4ca28f82d0f778fc5fea624a9def3963f91", + "sha256:81dad8d145d8fd981b2962b686b2241d3a1ea07733e76a2f15435dfb7fb60150", + "sha256:85304a43f4d513f5464ceb938aa02c1e78c2943b29f44a750b48b25ac999a049", + "sha256:89c4b48479a43f820b749df49cd7ba2dbc2b1b78560ecb5ab52985574fd40b27", + "sha256:8e735494da3db08694d26480f1493ad2cf86e99bdd53e8e9771b2752a5c0246a", + "sha256:913cbd31a400febff93b564a23e17c3ed2d56c064006f54efec210d586171c00", + "sha256:9174f4ed06f790a6869b41cba05b43eeb9a35f8993c4422ab853b705e8112bbd", + "sha256:9300d02ea7c6506f00e627e287e0492a5eb0371ec1670ae852fefffa6164b072", + "sha256:933b65d7680ea337180733cf9e87293cc5500cc0eb3fc8769f4d3c88d724ec5c", + "sha256:9654dbc012d8b06fc3d19cc825af3f7bf8ae242226df5f83936cb39f5fdc846c", + "sha256:98750a309eb2f020da61e727de7d7ba3c57c97cf6213f6f6277bb7fb42a8e065", + "sha256:99c0c846e6e61718715a3c9437ccc625de26593fea60189567f0118dc9db7512", + "sha256:a1a4ae2dec3993a32247995bdfe367fc3266da832d82f8438c8570f989753de1", + "sha256:a3f79487c687b1fc69f19e487cd949bf3aae653d181dfb5fde3bf6d18894706f", + "sha256:a4089a10e598eae6393756b036e0f419e8c1d60f44a831520f9af41c14216cf2", + "sha256:a51ff14f8017338e2f2e5dab738ce1ec3b5a851f23b18c1ae1359b1eecbee6df", + "sha256:a5a419712cf88862a45a23def0ae063686db3d324cec7edbe40509d1a79a0aab", + "sha256:a9ec8c642d1ec73287ae3e726792dd86c96f5681eb8df274a757bf62b750eae7", + "sha256:aaf21ba8fb76d102b696781bddaa0954b782536446083ae3fdaa6f16b25a1c4b", + "sha256:ab85470ab54c2cb96e176f40342d9ed41e58ca5733be6a893b730e7af9c40550", + "sha256:b9af1fe743828123e12b41dd8091eca1074d0c1569cc42e6e1eee98027f2bbd0", + "sha256:bfc4e20784722098822e3eee42b8e576b379ed72cca4a7cb856ae733e62192ea", + "sha256:bfd06b1c5584b657a2892a6014c2f4c20e0db0208c159148fa78c65f7e0b0277", + "sha256:c19bcdd826e95671065f8692b5a4aa95c52dc7a02a4c5a0cac46deb879a017a2", + "sha256:c2ba942c94e0691467ab901fc51b6f2085ff48f2eea77b1a48240f011e8247c7", + "sha256:c8e167d5adf59476fa3e37bee730890e389410c354771a62e3c076c86f9f7778", + "sha256:ca54090275939dc8ec5dea2d2afb400e0f83444b2fc24e07df7fdef677110859", + "sha256:d7541afd73985c630bafcd6338d2518ae96060075f9463d7dc14cfb33514383d", + "sha256:d8c56bb4e6c795fc77d74d8e8b80846e1fb8292fc0b5060cd8131d522974b751", + "sha256:da469dc041701583e34de852d8634703550348d5822e66a0c827d39b05365b12", + "sha256:daab68faadb847063d0c56f361a289c4f268706b598afbf9ad113cbe5c38b6b2", + "sha256:e05ab82ea7753354bb054b92e2f288afb750e6b439ff6ca78af52939ebbc476d", + "sha256:e09bb6252b6476d8d56100e8147b803befa9a12cea144bbe629dd508800d1ad0", + "sha256:e29f0cf06974c899b2c188ef7f783607dbef36da4c242eb6c82dcd8b512855e3", + "sha256:e59fdc271772f6686e01e1b3b74537259800f57e24280be3f29c8a0deb1904dd", + "sha256:e7360eae90809efd19b886e59a09dad07da4ca9ba096752e61a2e03c8aca188e", + "sha256:e96594a5537722fdfb79951672a2a63aec5ebfb823e7560586f7484819f2a08f", + "sha256:ea9d54cc3d8064260114a0bbf3479fc4a98b21dffc89b3459edd506b69262f6e", + "sha256:ec996f12524f88e151c339688c3897194821d7f03081ab35d31d1e12ec975e94", + "sha256:f27662e4f7dbf9f9c12391cb37b4c4c3cb90ffbd3b1fb9284dadbbb8935fa708", + "sha256:f373da2c1757bb7f1acaf09369cdc1d51d84131e50d5fa9863982fd626466313", + "sha256:f5aeea11ded7320a84dcdd62a3d95b5186834224a9e55b92ccae35d21a8b63d4", + "sha256:f604efd28f239cc21b3adb53eb061e2a205dc164be408e553b41ba2ffe0ca15c", + "sha256:f67e8f1a324a900e75b5e28ffb152bcac9fbed1cc7b43f99cd90f395c4375344", + "sha256:fd7a5004eb1980d3cefe26b2685bcb0b17989901a70a1040d1ac86f1d898c551", + "sha256:ffef5a74088f1e09947aecf91011136665152e0b4b359c42be3373897fb39b01" + ], + "markers": "python_version >= '3.9'", + "version": "==0.25.0" } }, "develop": { @@ -2156,11 +2250,11 @@ }, "click": { "hashes": [ - "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a", - "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6" + "sha256:14162b8b3b3550a7d479eafa77dfd3c38d9dc8951f6f69c78913a8f9a7540fd5", + "sha256:1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d" ], "markers": "python_version >= '3.10'", - "version": "==8.3.1" + "version": "==8.3.2" }, "iniconfig": { "hashes": [ @@ -2180,11 +2274,11 @@ }, "packaging": { "hashes": [ - "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", - "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f" + "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", + "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529" ], "markers": "python_version >= '3.8'", - "version": "==25.0" + "version": "==26.0" }, "pathspec": { "hashes": [ @@ -2196,11 +2290,11 @@ }, "platformdirs": { "hashes": [ - "sha256:61d5cdcc6065745cdd94f0f878977f8de9437be93de97c1c12f853c9c0cdcbda", - "sha256:d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31" + "sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934", + "sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868" ], "markers": "python_version >= '3.10'", - "version": "==4.5.1" + "version": "==4.9.4" }, "pluggy": { "hashes": [ @@ -2212,11 +2306,11 @@ }, "pygments": { "hashes": [ - "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", - "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b" + "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", + "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176" ], - "markers": "python_version >= '3.8'", - "version": "==2.19.2" + "markers": "python_version >= '3.9'", + "version": "==2.20.0" }, "pytest": { "hashes": [ @@ -2228,38 +2322,78 @@ }, "pytest-split": { "hashes": [ - "sha256:466096b086a7147bcd423c6e6c2e57fc62af1c5ea2e256b4ed50fc030fc3dddc", - "sha256:adf80ba9fef7be89500d571e705b4f963dfa05038edf35e4925817e6b34ea66f" + "sha256:899d7c0f5730da91e2daf283860eb73b503259cb416851a65599368849c7f382", + "sha256:8ebdb29cc72cc962e8eb1ec07db1eeb98ab25e215ed8e3216f6b9fc7ce0ec2b5" ], "index": "pypi", - "markers": "python_full_version >= '3.8.1' and python_version < '4.0'", - "version": "==0.10.0" + "markers": "python_version >= '3.10' and python_version < '4.0'", + "version": "==0.11.0" }, "pytokens": { "hashes": [ - "sha256:2f932b14ed08de5fcf0b391ace2642f858f1394c0857202959000b68ed7a458a", - "sha256:95b2b5eaf832e469d141a378872480ede3f251a5a5041b8ec6e581d3ac71bbf3" + "sha256:0fc71786e629cef478cbf29d7ea1923299181d0699dbe7c3c0f4a583811d9fc1", + "sha256:11edda0942da80ff58c4408407616a310adecae1ddd22eef8c692fe266fa5009", + "sha256:140709331e846b728475786df8aeb27d24f48cbcf7bcd449f8de75cae7a45083", + "sha256:24afde1f53d95348b5a0eb19488661147285ca4dd7ed752bbc3e1c6242a304d1", + "sha256:26cef14744a8385f35d0e095dc8b3a7583f6c953c2e3d269c7f82484bf5ad2de", + "sha256:27b83ad28825978742beef057bfe406ad6ed524b2d28c252c5de7b4a6dd48fa2", + "sha256:292052fe80923aae2260c073f822ceba21f3872ced9a68bb7953b348e561179a", + "sha256:29d1d8fb1030af4d231789959f21821ab6325e463f0503a61d204343c9b355d1", + "sha256:2a44ed93ea23415c54f3face3b65ef2b844d96aeb3455b8a69b3df6beab6acc5", + "sha256:30f51edd9bb7f85c748979384165601d028b84f7bd13fe14d3e065304093916a", + "sha256:34bcc734bd2f2d5fe3b34e7b3c0116bfb2397f2d9666139988e7a3eb5f7400e3", + "sha256:3ad72b851e781478366288743198101e5eb34a414f1d5627cdd585ca3b25f1db", + "sha256:3f901fe783e06e48e8cbdc82d631fca8f118333798193e026a50ce1b3757ea68", + "sha256:42f144f3aafa5d92bad964d471a581651e28b24434d184871bd02e3a0d956037", + "sha256:4a14d5f5fc78ce85e426aa159489e2d5961acf0e47575e08f35584009178e321", + "sha256:4a58d057208cb9075c144950d789511220b07636dd2e4708d5645d24de666bdc", + "sha256:4e691d7f5186bd2842c14813f79f8884bb03f5995f0575272009982c5ac6c0f7", + "sha256:5502408cab1cb18e128570f8d598981c68a50d0cbd7c61312a90507cd3a1276f", + "sha256:584c80c24b078eec1e227079d56dc22ff755e0ba8654d8383b2c549107528918", + "sha256:5ad948d085ed6c16413eb5fec6b3e02fa00dc29a2534f088d3302c47eb59adf9", + "sha256:670d286910b531c7b7e3c0b453fd8156f250adb140146d234a82219459b9640c", + "sha256:682fa37ff4d8e95f7df6fe6fe6a431e8ed8e788023c6bcc0f0880a12eab80ad1", + "sha256:6d6c4268598f762bc8e91f5dbf2ab2f61f7b95bdc07953b602db879b3c8c18e1", + "sha256:79fc6b8699564e1f9b521582c35435f1bd32dd06822322ec44afdeba666d8cb3", + "sha256:8bdb9d0ce90cbf99c525e75a2fa415144fd570a1ba987380190e8b786bc6ef9b", + "sha256:8fcb9ba3709ff77e77f1c7022ff11d13553f3c30299a9fe246a166903e9091eb", + "sha256:941d4343bf27b605e9213b26bfa1c4bf197c9c599a9627eb7305b0defcfe40c1", + "sha256:967cf6e3fd4adf7de8fc73cd3043754ae79c36475c1c11d514fc72cf5490094a", + "sha256:970b08dd6b86058b6dc07efe9e98414f5102974716232d10f32ff39701e841c4", + "sha256:97f50fd18543be72da51dd505e2ed20d2228c74e0464e4262e4899797803d7fa", + "sha256:9bd7d7f544d362576be74f9d5901a22f317efc20046efe2034dced238cbbfe78", + "sha256:add8bf86b71a5d9fb5b89f023a80b791e04fba57960aa790cc6125f7f1d39dfe", + "sha256:b35d7e5ad269804f6697727702da3c517bb8a5228afa450ab0fa787732055fc9", + "sha256:b49750419d300e2b5a3813cf229d4e5a4c728dae470bcc89867a9ad6f25a722d", + "sha256:d31b97b3de0f61571a124a00ffe9a81fb9939146c122c11060725bd5aea79975", + "sha256:d70e77c55ae8380c91c0c18dea05951482e263982911fc7410b1ffd1dadd3440", + "sha256:d9907d61f15bf7261d7e775bd5d7ee4d2930e04424bab1972591918497623a16", + "sha256:da5baeaf7116dced9c6bb76dc31ba04a2dc3695f3d9f74741d7910122b456edc", + "sha256:dc74c035f9bfca0255c1af77ddd2d6ae8419012805453e4b0e7513e17904545d", + "sha256:dcafc12c30dbaf1e2af0490978352e0c4041a7cde31f4f81435c2a5e8b9cabb6", + "sha256:ee44d0f85b803321710f9239f335aafe16553b39106384cef8e6de40cb4ef2f6", + "sha256:f66a6bbe741bd431f6d741e617e0f39ec7257ca1f89089593479347cc4d13324" ], "markers": "python_version >= '3.8'", - "version": "==0.3.0" + "version": "==0.4.1" }, "setuptools": { "hashes": [ - "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", - "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c" + "sha256:8b0e9d10c784bf7d262c4e5ec5d4ec94127ce206e8738f29a437945fbc219b70", + "sha256:95b30ddfb717250edb492926c92b5221f7ef3fbcc2b07579bcd4a27da21d0173" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==80.9.0" + "version": "==80.10.2" }, "wheel": { "hashes": [ - "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729", - "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248" + "sha256:4b399d56c9d9338230118d705d9737a2a468ccca63d5e813e2a4fc7815d8bc4d", + "sha256:e3e79874b07d776c40bd6033f8ddf76a7dad46a7b8aa1b2787a83083519a1803" ], "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==0.45.1" + "markers": "python_version >= '3.9'", + "version": "==0.46.3" } } } diff --git a/duckdb_pglake/Makefile b/duckdb_pglake/Makefile index f71415ee..5c8b2ccc 100644 --- a/duckdb_pglake/Makefile +++ b/duckdb_pglake/Makefile @@ -11,7 +11,7 @@ EXT_FLAGS=-DBUILD_EXTENSIONS="tpch;json;icu" # GitHub actions uses a hash of the Makefile and source # files as a cache key. When we update the DuckDB version, # we should update the line below to trigger a new hash. -DUCKDB_VERSION=1.4.4 +DUCKDB_VERSION=1.5.1 # We install libduckdb.so into the postgres direcotry PG_CONFIG ?= pg_config diff --git a/duckdb_pglake/duckdb b/duckdb_pglake/duckdb index 6ddac802..7dbb2e64 160000 --- a/duckdb_pglake/duckdb +++ b/duckdb_pglake/duckdb @@ -1 +1 @@ -Subproject commit 6ddac802ffa9bcfbcc3f5f0d71de5dff9b0bc250 +Subproject commit 7dbb2e646fea939a89f10a55aa98c474cbb0c098 diff --git a/duckdb_pglake/duckdb-postgres b/duckdb_pglake/duckdb-postgres index b63ef4b1..8b822b60 160000 --- a/duckdb_pglake/duckdb-postgres +++ b/duckdb_pglake/duckdb-postgres @@ -1 +1 @@ -Subproject commit b63ef4b1eb007320840b6d1760f3c9b139bb3b49 +Subproject commit 8b822b6059d895403d3d64cc4de575fae67ac4a7 diff --git a/duckdb_pglake/extension_config.cmake b/duckdb_pglake/extension_config.cmake index f1e1aaed..ec458091 100644 --- a/duckdb_pglake/extension_config.cmake +++ b/duckdb_pglake/extension_config.cmake @@ -1,19 +1,19 @@ # External extensions to link into libduckdb duckdb_extension_load(httpfs GIT_URL https://github.com/duckdb/duckdb-httpfs - GIT_TAG 13f8a814d41a978c3f19eb1dc76069489652ea6f + GIT_TAG 7e86e7a5e5a1f01f458361bebdfa9b0a9a73a619 INCLUDE_DIR src/include ADD_PATCHES ) duckdb_extension_load(aws GIT_URL https://github.com/duckdb/duckdb-aws - GIT_TAG bc15d211f282d1d78fc0d9fda3d09957ba776423 + GIT_TAG b2649e68341a9ee717588dd23f277904727ce793 ) duckdb_extension_load(azure GIT_URL https://github.com/duckdb/duckdb-azure - GIT_TAG 7e1ac3333d946a6bf5b4552722743e03f30a47cd + GIT_TAG ea6ffae3710ec568ce08579dbfc0cddc8c759227 ) # Extension from this repo diff --git a/duckdb_pglake/patches/duckdb-postgres/composite-type-resolution.patch b/duckdb_pglake/patches/duckdb-postgres/composite-type-resolution.patch index eab2b684..87cb70a5 100644 --- a/duckdb_pglake/patches/duckdb-postgres/composite-type-resolution.patch +++ b/duckdb_pglake/patches/duckdb-postgres/composite-type-resolution.patch @@ -1,8 +1,8 @@ diff --git a/src/include/postgres_utils.hpp b/src/include/postgres_utils.hpp -index ea04300..38672a9 100644 +index 40f1516..d3d6b69 100644 --- a/src/include/postgres_utils.hpp +++ b/src/include/postgres_utils.hpp -@@ -13,6 +13,7 @@ +@@ -13,12 +13,14 @@ #include "postgres_version.hpp" namespace duckdb { @@ -10,14 +10,14 @@ index ea04300..38672a9 100644 class PostgresSchemaEntry; class PostgresTransaction; -@@ -21,5 +22,6 @@ struct PostgresTypeData { + struct PostgresTypeData { int64_t type_modifier = 0; string type_name; + int64_t type_oid = 0; idx_t array_dimensions = 0; }; -@@ -64,7 +66,8 @@ public: +@@ -63,7 +65,8 @@ public: static LogicalType ToPostgresType(const LogicalType &input); static LogicalType TypeToLogicalType(optional_ptr transaction, optional_ptr schema, const PostgresTypeData &input, @@ -28,11 +28,11 @@ index ea04300..38672a9 100644 static string PostgresOidToName(uint32_t oid); static uint32_t ToPostgresOid(const LogicalType &input); diff --git a/src/include/storage/postgres_table_set.hpp b/src/include/storage/postgres_table_set.hpp -index 422c2a1..997cf71 100644 +index fcdff54..b5ad911 100644 --- a/src/include/storage/postgres_table_set.hpp +++ b/src/include/storage/postgres_table_set.hpp @@ -46,11 +46,13 @@ protected: - void AlterTable(PostgresTransaction &transaction, RemoveColumnInfo &info); + void AlterTable(ClientContext &context, PostgresTransaction &transaction, RemoveColumnInfo &info); static void AddColumn(optional_ptr transaction, optional_ptr schema, - PostgresResult &result, idx_t row, PostgresTableInfo &table_info); @@ -48,7 +48,7 @@ index 422c2a1..997cf71 100644 void CreateEntries(PostgresTransaction &transaction, PostgresResult &result, idx_t start, idx_t end); diff --git a/src/postgres_utils.cpp b/src/postgres_utils.cpp -index 2d9f5d9..6f2a3f2 100644 +index 646696b..b9ad53b 100644 --- a/src/postgres_utils.cpp +++ b/src/postgres_utils.cpp @@ -1,4 +1,5 @@ @@ -57,7 +57,7 @@ index 2d9f5d9..6f2a3f2 100644 #include "storage/postgres_schema_entry.hpp" #include "storage/postgres_transaction.hpp" #include "postgres_type_oids.hpp" -@@ -85,7 +86,8 @@ LogicalType PostgresUtils::RemoveAlias(const LogicalType &type) { +@@ -74,7 +75,8 @@ LogicalType PostgresUtils::RemoveAlias(const LogicalType &type) { LogicalType PostgresUtils::TypeToLogicalType(optional_ptr transaction, optional_ptr schema, @@ -67,12 +67,13 @@ index 2d9f5d9..6f2a3f2 100644 auto &pgtypename = type_info.type_name; // postgres array types start with an _ -@@ -113,7 +115,14 @@ LogicalType PostgresUtils::TypeToLogicalType(optional_ptr t +@@ -101,8 +103,15 @@ LogicalType PostgresUtils::TypeToLogicalType(optional_ptr t + PostgresTypeData child_type_info; child_type_info.type_name = pgtypename.substr(1); child_type_info.type_modifier = type_info.type_modifier; + if (connection) { + D_ASSERT(type_info.type_oid != 0); -+ auto elem_result = connection->Query(StringUtil::Format( ++ auto elem_result = connection->Query(nullptr, StringUtil::Format( + "SELECT typelem FROM pg_type WHERE oid = %d", type_info.type_oid)); + D_ASSERT(elem_result->Count() > 0); + child_type_info.type_oid = elem_result->GetInt64(0, 0); @@ -83,7 +84,7 @@ index 2d9f5d9..6f2a3f2 100644 // construct the child type based on the number of dimensions for (idx_t i = 1; i < dimensions; i++) { PostgresType new_pg_type; -@@ -201,7 +203,52 @@ LogicalType PostgresUtils::TypeToLogicalType(optional_ptr t +@@ -190,7 +199,52 @@ LogicalType PostgresUtils::TypeToLogicalType(optional_ptr t return LogicalType::LIST(LogicalType::DOUBLE); } else { if (!transaction) { @@ -100,7 +101,7 @@ index 2d9f5d9..6f2a3f2 100644 + "AND a.attnum > 0 AND NOT a.attisdropped " + "ORDER BY a.attnum", + type_info.type_oid); -+ auto result = connection->Query(query); ++ auto result = connection->Query(nullptr, query); + auto rows = result->Count(); + if (rows > 0) { + child_list_t child_types; @@ -124,7 +125,7 @@ index 2d9f5d9..6f2a3f2 100644 + "JOIN pg_type bt ON bt.oid = t.typbasetype " + "WHERE t.oid = %d AND t.typtype = 'd'", + type_info.type_oid); -+ auto domain_result = connection->Query(domain_query); ++ auto domain_result = connection->Query(nullptr, domain_query); + if (domain_result->Count() > 0) { + PostgresTypeData base_type_info; + base_type_info.type_name = domain_result->GetString(0, 0); @@ -138,19 +139,19 @@ index 2d9f5d9..6f2a3f2 100644 return LogicalType::VARCHAR; } diff --git a/src/storage/postgres_table_set.cpp b/src/storage/postgres_table_set.cpp -index efe37a1..07d3ee6 100644 +index ae53dc6..dc42213 100644 --- a/src/storage/postgres_table_set.cpp +++ b/src/storage/postgres_table_set.cpp -@@ -24,16 +24,16 @@ SELECT pg_namespace.oid AS namespace_id, relname, relpages, attname, -- pg_type.typname type_name, atttypmod type_modifier, pg_attribute.attndims ndim, +@@ -23,7 +23,7 @@ string PostgresTableSet::GetInitializeQuery(const string &schema, const string & + string base_query = R"( + SELECT pg_namespace.oid AS namespace_id, relname, relpages, attname, + pg_type.typname type_name, atttypmod type_modifier, pg_attribute.attndims ndim, - attnum, pg_attribute.attnotnull AS notnull, NULL constraint_id, -+ pg_type.typname type_name, atttypmod type_modifier, pg_attribute.attndims ndim, + atttypid type_oid, attnum, pg_attribute.attnotnull AS notnull, NULL constraint_id, NULL constraint_type, NULL constraint_key FROM pg_class JOIN pg_namespace ON relnamespace = pg_namespace.oid - JOIN pg_attribute ON pg_class.oid=pg_attribute.attrelid - JOIN pg_type ON atttypid=pg_type.oid +@@ -32,7 +32,7 @@ JOIN pg_type ON atttypid=pg_type.oid WHERE attnum > 0 AND relkind IN ('r', 'v', 'm', 'f', 'p') ${CONDITION} UNION ALL SELECT pg_namespace.oid AS namespace_id, relname, NULL relpages, NULL attname, NULL type_name, @@ -159,8 +160,6 @@ index efe37a1..07d3ee6 100644 pg_constraint.oid AS constraint_id, contype AS constraint_type, conkey AS constraint_key FROM pg_class - JOIN pg_namespace ON relnamespace = pg_namespace.oid - JOIN pg_constraint ON (pg_class.oid=pg_constraint.conrelid) @@ -53,18 +53,19 @@ ORDER BY namespace_id, relname, attnum, constraint_id; void PostgresTableSet::AddColumn(optional_ptr transaction, @@ -173,8 +172,8 @@ index efe37a1..07d3ee6 100644 type_info.type_name = result.GetString(row, column_index + 1); type_info.type_modifier = result.GetInt64(row, column_index + 2); type_info.array_dimensions = result.GetInt64(row, column_index + 3); -+ type_info.type_oid = result.GetInt64(row, column_index + 4); - bool is_not_null = result.GetBool(row, column_index + 5); ++ type_info.type_oid = result.GetInt64(row, column_index + 4); + bool is_not_null = result.GetBool(row, column_index + 6); string default_value; @@ -184,12 +183,16 @@ index efe37a1..07d3ee6 100644 table_info.postgres_types.push_back(std::move(postgres_type)); table_info.postgres_names.push_back(column_name); ColumnDefinition column(std::move(column_name), std::move(column_type)); -@@ -87,3 +87,3 @@ void PostgresTableSet::AddConstraint(PostgresResult &result, idx_t row, Postgres +@@ -84,7 +85,7 @@ void PostgresTableSet::AddColumn(optional_ptr transaction, + } + void PostgresTableSet::AddConstraint(PostgresResult &result, idx_t row, PostgresTableInfo &table_info) { - idx_t column_index = 9; + idx_t column_index = 10; auto constraint_type = result.GetString(row, column_index + 1); -@@ -109,12 +109,13 @@ void PostgresTableSet::AddConstraint(PostgresResult &result, idx_t row, Postgres + auto constraint_key = result.GetString(row, column_index + 2); + if (constraint_key.empty() || constraint_key.front() != '{' || constraint_key.back() != '}') { +@@ -109,12 +110,13 @@ void PostgresTableSet::AddConstraint(PostgresResult &result, idx_t row, Postgres void PostgresTableSet::AddColumnOrConstraint(optional_ptr transaction, optional_ptr schema, PostgresResult &result, @@ -205,7 +208,7 @@ index efe37a1..07d3ee6 100644 } } -@@ -183,7 +184,7 @@ unique_ptr PostgresTableSet::GetTableInfo(PostgresConnection +@@ -183,7 +185,7 @@ unique_ptr PostgresTableSet::GetTableInfo(ClientContext &cont } auto table_info = make_uniq(schema_name, table_name); for (idx_t row = 0; row < rows; row++) { diff --git a/duckdb_pglake/patches/duckdb-postgres/numeric-nan.patch b/duckdb_pglake/patches/duckdb-postgres/numeric-nan.patch index 50faa537..6a9c9ddd 100644 --- a/duckdb_pglake/patches/duckdb-postgres/numeric-nan.patch +++ b/duckdb_pglake/patches/duckdb-postgres/numeric-nan.patch @@ -1,5 +1,5 @@ diff --git a/src/include/postgres_binary_reader.hpp b/src/include/postgres_binary_reader.hpp -index f4bc336..d9e92f1 100644 +index 5b5cca9..cbbc708 100644 --- a/src/include/postgres_binary_reader.hpp +++ b/src/include/postgres_binary_reader.hpp @@ -136,9 +136,11 @@ protected: @@ -29,7 +29,7 @@ index 391429e..ba4162b 100644 struct PostgresConversion { diff --git a/src/postgres_binary_reader.cpp b/src/postgres_binary_reader.cpp -index 86ebe30..9a49f8c 100644 +index c7fd72e..dd96b11 100644 --- a/src/postgres_binary_reader.cpp +++ b/src/postgres_binary_reader.cpp @@ -137,6 +137,7 @@ PostgresDecimalConfig PostgresBinaryReader::ReadDecimalConfig() { @@ -55,7 +55,7 @@ index 86ebe30..9a49f8c 100644 break; } D_ASSERT(value_len == sizeof(double)); -@@ -284,22 +288,26 @@ void PostgresBinaryReader::ReadValue(const LogicalType &type, const PostgresType +@@ -294,22 +298,26 @@ void PostgresBinaryReader::ReadValue(const LogicalType &type, const PostgresType if (value_len < sizeof(uint16_t) * 4) { throw InvalidInputException("Need at least 8 bytes to read a Postgres decimal. Got %d", value_len); } @@ -87,12 +87,12 @@ index 86ebe30..9a49f8c 100644 } diff --git a/src/postgres_text_reader.cpp b/src/postgres_text_reader.cpp -index 066e072..e3cfa67 100644 +index 3f41a8f..c1e3632 100644 --- a/src/postgres_text_reader.cpp +++ b/src/postgres_text_reader.cpp -@@ -321,6 +321,19 @@ void PostgresTextReader::ConvertVector(Vector &source, Vector &target, const Pos - case LogicalTypeId::BLOB: - ConvertBlob(source, target, count); +@@ -370,6 +370,19 @@ void PostgresTextReader::ConvertVector(Vector &source, Vector &target, const Pos + case LogicalTypeId::GEOMETRY: + ConvertGeometry(source, target, count); break; + case LogicalTypeId::DECIMAL: { + auto strings = FlatVector::GetData(source); diff --git a/duckdb_pglake/patches/duckdb-postgres/snapshot.patch b/duckdb_pglake/patches/duckdb-postgres/snapshot.patch index 52524dc4..9fbf9b3e 100644 --- a/duckdb_pglake/patches/duckdb-postgres/snapshot.patch +++ b/duckdb_pglake/patches/duckdb-postgres/snapshot.patch @@ -1,8 +1,8 @@ diff --git a/src/include/postgres_scanner.hpp b/src/include/postgres_scanner.hpp -index 0f9cda7..9f93468 100644 +index 3e0162c..7c8fa19 100644 --- a/src/include/postgres_scanner.hpp +++ b/src/include/postgres_scanner.hpp -@@ -48,6 +48,8 @@ public: +@@ -50,6 +50,8 @@ public: bool use_text_protocol = false; idx_t max_threads = 1; @@ -12,10 +12,10 @@ index 0f9cda7..9f93468 100644 void SetTablePages(idx_t approx_num_pages); diff --git a/src/postgres_query.cpp b/src/postgres_query.cpp -index 700db2f..c7c5101 100644 +index f999617..771427c 100644 --- a/src/postgres_query.cpp +++ b/src/postgres_query.cpp -@@ -43,6 +43,9 @@ static unique_ptr PGQueryBind(ClientContext &context, TableFunctio +@@ -44,6 +44,9 @@ static unique_ptr PGQueryBind(ClientContext &context, TableFunctio if (kv.first == "use_transaction") { use_transaction = BooleanValue::Get(kv.second); } @@ -23,23 +23,22 @@ index 700db2f..c7c5101 100644 + result->snapshot = kv.second.GetValue(); + } } - result->use_transaction = use_transaction; -@@ -97,6 +100,8 @@ static unique_ptr PGQueryBind(ClientContext &context, TableFunctio - PostgresQueryFunction::PostgresQueryFunction() + vector param_values; +@@ -123,6 +126,7 @@ PostgresQueryFunction::PostgresQueryFunction() : TableFunction("postgres_query", {LogicalType::VARCHAR, LogicalType::VARCHAR}, nullptr, PGQueryBind) { named_parameters["use_transaction"] = LogicalType::BOOLEAN; + named_parameters["params"] = LogicalType::ANY; + named_parameters["snapshot"] = LogicalType::VARCHAR; -+ PostgresScanFunction scan_function; init_global = scan_function.init_global; init_local = scan_function.init_local; diff --git a/src/postgres_scanner.cpp b/src/postgres_scanner.cpp -index bb4136f..2530172 100644 +index eb4360a..3de7dbe 100644 --- a/src/postgres_scanner.cpp +++ b/src/postgres_scanner.cpp @@ -67,9 +67,10 @@ private: - static void PostgresGetSnapshot(PostgresVersion version, const PostgresBindData &bind_data, + static void PostgresGetSnapshot(ClientContext &context, PostgresVersion version, const PostgresBindData &bind_data, PostgresGlobalState &gstate) { unique_ptr result; - // by default disable snapshotting @@ -52,8 +51,8 @@ index bb4136f..2530172 100644 return; } if (version.type_v == PostgresInstanceType::AURORA) { -@@ -93,7 +94,6 @@ static void PostgresGetSnapshot(PostgresVersion version, const PostgresBindData - con.TryQuery("SELECT pg_is_in_recovery(), pg_export_snapshot(), (select count(*) from pg_stat_wal_receiver)"); +@@ -93,7 +94,6 @@ static void PostgresGetSnapshot(ClientContext &context, PostgresVersion version, + context, "SELECT pg_is_in_recovery(), pg_export_snapshot(), (select count(*) from pg_stat_wal_receiver)"); if (result) { auto in_recovery = result->GetBool(0, 0) || result->GetInt64(0, 2) > 0; - gstate.snapshot = ""; @@ -74,7 +73,7 @@ index bb4136f..2530172 100644 + } + auto con = PostgresConnection::Open(bind_data->dsn, bind_data->attach_path); - auto version = con.GetPostgresVersion(); + auto version = con.GetPostgresVersion(context); // query the table schema so we can interpret the bits in the pages @@ -315,6 +324,9 @@ static unique_ptr PostgresInitGlobalState(ClientContex auto &bind_data = input.bind_data->Cast(); @@ -90,8 +89,8 @@ index bb4136f..2530172 100644 } else { auto con = PostgresConnection::Open(bind_data.dsn, bind_data.attach_path); if (bind_data.use_transaction) { -- PostgresScanConnect(con, string()); -+ PostgresScanConnect(con, result->snapshot); +- PostgresScanConnect(context, con, string()); ++ PostgresScanConnect(context, con, result->snapshot); } result->SetConnection(std::move(con)); } diff --git a/duckdb_pglake/patches/duckdb/.gitkeep b/duckdb_pglake/patches/duckdb/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/duckdb_pglake/patches/duckdb/parquet-virtual-column-stats.patch b/duckdb_pglake/patches/duckdb/parquet-virtual-column-stats.patch new file mode 100644 index 00000000..32fa41a1 --- /dev/null +++ b/duckdb_pglake/patches/duckdb/parquet-virtual-column-stats.patch @@ -0,0 +1,27 @@ +diff --git a/extension/parquet/parquet_reader.cpp b/extension/parquet/parquet_reader.cpp +--- a/extension/parquet/parquet_reader.cpp ++++ b/extension/parquet/parquet_reader.cpp +@@ -1286,7 +1286,10 @@ + unique_ptr GetColumnStatistics(const StorageIndex &storage_index) override { + const idx_t primary_index = storage_index.GetPrimaryIndex(); + D_ASSERT(metadata.row_groups.size() > row_group_idx); +- D_ASSERT(root_schema->children.size() > primary_index); ++ ++ if (primary_index >= root_schema->children.size()) { ++ return nullptr; ++ } + + const auto &row_group = metadata.row_groups[row_group_idx]; + const auto &column_schema = root_schema->children[primary_index]; +@@ -1296,7 +1299,10 @@ + bool MinMaxIsExact(const BaseStatistics &, const StorageIndex &storage_index) override { + const idx_t primary_index = storage_index.GetPrimaryIndex(); + D_ASSERT(metadata.row_groups.size() > row_group_idx); +- D_ASSERT(root_schema->children.size() > primary_index); ++ ++ if (primary_index >= root_schema->children.size()) { ++ return false; ++ } + + const auto &row_group = metadata.row_groups[row_group_idx]; + const auto &column_chunk = row_group.columns[primary_index]; diff --git a/duckdb_pglake/patches/duckdb/return_stats.patch b/duckdb_pglake/patches/duckdb/return_stats.patch deleted file mode 100644 index 972bfad1..00000000 --- a/duckdb_pglake/patches/duckdb/return_stats.patch +++ /dev/null @@ -1,53 +0,0 @@ -diff --git a/extension/parquet/parquet_writer.cpp b/extension/parquet/parquet_writer.cpp -index 3c6d11d9ad..d1a7b54ad5 100644 ---- a/extension/parquet/parquet_writer.cpp -+++ b/extension/parquet/parquet_writer.cpp -@@ -3,6 +3,7 @@ - #include "duckdb.hpp" - #include "mbedtls_wrapper.hpp" - #include "parquet_crypto.hpp" -+#include "parquet_decimal_utils.hpp" - #include "parquet_timestamp.hpp" - #include "resizable_buffer.hpp" - #include "duckdb/common/file_system.hpp" -@@ -656,8 +657,20 @@ struct DecimalStatsUnifier : public NumericStatsUnifier { - if (stats.empty()) { - return string(); - } -- auto numeric_val = Load(const_data_ptr_cast(stats.data())); -- return Value::DECIMAL(numeric_val, width, scale).ToString(); -+ -+ auto stats_data = const_data_ptr_cast(stats.data()); -+ -+ if (sizeof(T) == sizeof(hugeint_t)) -+ { -+ auto _schema = ParquetColumnSchema(); -+ auto numeric_val = ParquetDecimalUtils::ReadDecimalValue(stats_data, stats.size(), _schema); -+ return Value::DECIMAL(numeric_val, width, scale).ToString(); -+ } -+ else -+ { -+ auto numeric_val = Load(stats_data); -+ return Value::DECIMAL(numeric_val, width, scale).ToString(); -+ } - } - }; - -@@ -781,7 +794,7 @@ struct NullStatsUnifier : public ColumnStatsUnifier { - static unique_ptr GetBaseStatsUnifier(const LogicalType &type) { - switch (type.id()) { - case LogicalTypeId::BOOLEAN: -- return make_uniq(); -+ return make_uniq>(); - case LogicalTypeId::TINYINT: - case LogicalTypeId::SMALLINT: - case LogicalTypeId::INTEGER: -@@ -826,6 +839,8 @@ static unique_ptr GetBaseStatsUnifier(const LogicalType &typ - return make_uniq>(width, scale); - case PhysicalType::INT64: - return make_uniq>(width, scale); -+ case PhysicalType::INT128: -+ return make_uniq>(width, scale); - default: - return make_uniq(); - } diff --git a/duckdb_pglake/src/duckdb_pglake_extension.cpp b/duckdb_pglake/src/duckdb_pglake_extension.cpp index b68988d1..3cf84126 100644 --- a/duckdb_pglake/src/duckdb_pglake_extension.cpp +++ b/duckdb_pglake/src/duckdb_pglake_extension.cpp @@ -37,6 +37,7 @@ #include "duckdb/function/scalar/string_common.hpp" #include "duckdb/planner/expression/bound_constant_expression.hpp" #include "duckdb/main/extension_helper.hpp" +#include "duckdb/common/types/geometry_crs.hpp" #include "httpfs.hpp" #include "s3fs.hpp" @@ -587,6 +588,46 @@ DUCKDB_EXTENSION_API const char * duckdb_pglake_geometry_to_string(duckdb_databa return strdup(hexWKB.ToString().c_str()); } +DUCKDB_EXTENSION_API bool duckdb_pglake_is_geometry_type(duckdb_logical_type type) { + if (!type) { + return false; + } + auto *logical_type = reinterpret_cast(type); + return logical_type->id() == duckdb::LogicalTypeId::GEOMETRY; +} + +DUCKDB_EXTENSION_API int duckdb_pglake_geometry_get_srid(duckdb_logical_type type) { + if (!type) { + return 0; + } + auto *logical_type = reinterpret_cast(type); + if (logical_type->id() != duckdb::LogicalTypeId::GEOMETRY) { + return 0; + } + if (!duckdb::GeoType::HasCRS(*logical_type)) { + return 0; + } + auto &crs = duckdb::GeoType::GetCRS(*logical_type); + auto &identifier = crs.GetIdentifier(); + + // Handle AUTHORITY:NUMERIC_CODE format (e.g. "EPSG:4326") + auto colon = identifier.find(':'); + if (colon != std::string::npos) { + try { + return std::stoi(identifier.substr(colon + 1)); + } catch (...) { + // Not a numeric code, fall through to well-known identifier check + } + } + + // Handle well-known non-numeric CRS identifiers + if (identifier == "OGC:CRS84") { + return 4326; + } + + return 0; +} + DUCKDB_EXTENSION_API void duckdb_pglake_set_output_verbose(bool verbose) { PgLakePgcompatIsOutputVerbose = verbose; } diff --git a/duckdb_pglake/src/fs/caching_file_system.cpp b/duckdb_pglake/src/fs/caching_file_system.cpp index bce46c7e..ba923432 100644 --- a/duckdb_pglake/src/fs/caching_file_system.cpp +++ b/duckdb_pglake/src/fs/caching_file_system.cpp @@ -272,19 +272,40 @@ PGLakeCachingFileSystem::CleanUpCacheOnWriteFile(CachingFSFileHandle &pg_lakeHan vector PGLakeCachingFileSystem::Glob(const string &urlPattern, FileOpener *opener) { - if (StringUtil::StartsWith(urlPattern, NO_CACHE_PREFIX)) - { - /* do the Glob without the prefix */ - vector result = remoteFs->Glob(urlPattern.substr(NO_CACHE_PREFIX.length()), opener); + string url = urlPattern; + bool noCache = false; - /* add the prefix back to the results to pass nocache through */ - for (OpenFileInfo& url : result) - url.path = NO_CACHE_PREFIX + url.path; + if (StringUtil::StartsWith(url, NO_CACHE_PREFIX)) + { + url = url.substr(NO_CACHE_PREFIX.length()); + noCache = true; + } + /* + * Iceberg partition paths can contain glob characters like * as literal + * characters in directory names (e.g., "specialChars!@#$%^&*()_+"). + * DuckDB's glob machinery interprets these as wildcards, causing S3 + * ListObjects to search with a truncated prefix and find nothing. + * + * When the path has glob characters, check whether it refers to an + * actual file first. If it does, return it directly without globbing. + */ + if (HasGlob(url) && remoteFs->FileExists(url, opener)) + { + vector result; + result.push_back(OpenFileInfo(noCache ? NO_CACHE_PREFIX + url : url)); return result; } - else - return remoteFs->Glob(urlPattern, opener); + + vector result = remoteFs->Glob(url, opener); + + if (noCache) + { + for (OpenFileInfo& fileInfo : result) + fileInfo.path = NO_CACHE_PREFIX + fileInfo.path; + } + + return result; } diff --git a/duckdb_pglake/src/fs/pg_lake_s3fs.cpp b/duckdb_pglake/src/fs/pg_lake_s3fs.cpp index 26272900..f77fd309 100644 --- a/duckdb_pglake/src/fs/pg_lake_s3fs.cpp +++ b/duckdb_pglake/src/fs/pg_lake_s3fs.cpp @@ -53,6 +53,32 @@ const string MANAGED_STORAGE_KEY_ID_SETTING = "pg_lake_managed_storage_key_id"; +void +PgLakeS3FileSystem::RegisterContext(const shared_ptr &input, optional_ptr context) +{ + lock_guard guard(context_mutex_); + + /* Lazily clean up entries for destroyed handles */ + for (auto it = context_map_.begin(); it != context_map_.end();) { + if (it->second.input_ref.expired()) + it = context_map_.erase(it); + else + ++it; + } + + context_map_[input.get()] = {input, context}; +} + +optional_ptr +PgLakeS3FileSystem::LookupContext(HTTPInput *input) +{ + lock_guard guard(context_mutex_); + auto it = context_map_.find(input); + if (it != context_map_.end() && !it->second.input_ref.expired()) + return it->second.context; + return nullptr; +} + /* * CreateHandle is copy-pasted from s3fs.cpp, but using PgLakeS3FileHandle which includes * a pointer to the ClientContext. @@ -76,13 +102,17 @@ unique_ptr PgLakeS3FileSystem::CreateHandle(const OpenFileInfo & if (StringUtil::EndsWith(auth_params.endpoint, ".amazonaws.com")) auth_params.endpoint = StringUtil::Format("s3.%s.amazonaws.com", auth_params.region); - auto http_util = HTTPFSUtil::GetHTTPUtil(opener); - auto params = http_util->InitializeParameters(opener, info); + auto &http_util = HTTPFSUtil::GetHTTPUtil(opener); + auto params = http_util.InitializeParameters(opener, info); + + auto handle = duckdb::make_uniq(*this, fileInfo.path, flags, context, + params, + auth_params, + S3ConfigParams::ReadFrom(opener)); - return duckdb::make_uniq(*this, fileInfo.path, flags, context, - params, - auth_params, - S3ConfigParams::ReadFrom(opener)); + RegisterContext(handle->http_input, context); + + return unique_ptr_cast(std::move(handle)); } @@ -183,7 +213,7 @@ PgLakeS3FileSystem::RemoveFileFromS3(string path, optional_ptr opene /* Perform the "batch" deletion */ unique_ptr postResponse = - PostRequest(*s3Handle, s3Handle->path, {}, responseBuffer, + PostRequest(*s3Handle->http_input, s3Handle->path, {}, responseBuffer, (char *) body.c_str(), body.length(), "delete="); /* Construct body of the POST response */ @@ -396,13 +426,16 @@ IsPgLakeManagedStorageBucket(optional_ptr context, string prefix, * managed storage bucket if a key ID is configured. */ static void -SetEncryptionFields(PgLakeS3FileHandle &s3Handle, ParsedS3Url &parsed_s3_url, +SetEncryptionFields(optional_ptr context, ParsedS3Url &parsed_s3_url, string &encryption, string &customer_key_id) { + if (context == nullptr) + return; + Value setting; - if (s3Handle.context->TryGetCurrentSetting(MANAGED_STORAGE_KEY_ID_SETTING, setting) && - IsPgLakeManagedStorageBucket(s3Handle.context, parsed_s3_url.prefix, parsed_s3_url.bucket)) + if (context->TryGetCurrentSetting(MANAGED_STORAGE_KEY_ID_SETTING, setting) && + IsPgLakeManagedStorageBucket(context, parsed_s3_url.prefix, parsed_s3_url.bucket)) { /* use customer managed key */ customer_key_id = setting.ToString(); @@ -425,12 +458,12 @@ SetEncryptionFields(PgLakeS3FileHandle &s3Handle, ParsedS3Url &parsed_s3_url, * but with the addition of Content-MD5, which is required for DeleteObjects. */ unique_ptr -PgLakeS3FileSystem::PostRequest(FileHandle &handle, string url, HTTPHeaders header_map, +PgLakeS3FileSystem::PostRequest(HTTPInput &input, string url, HTTPHeaders header_map, string &buffer_out, char *buffer_in, idx_t buffer_in_len, string http_params) { - PgLakeS3FileHandle &s3Handle = handle.Cast(); - auto auth_params = s3Handle.auth_params; + auto &s3_input = input.Cast(); + auto auth_params = s3_input.auth_params; auto parsed_s3_url = S3UrlParse(url, auth_params); string http_url = parsed_s3_url.GetHTTPUrl(auth_params, http_params); auto payload_hash = GetPayloadHash(buffer_in, buffer_in_len); @@ -443,7 +476,7 @@ PgLakeS3FileSystem::PostRequest(FileHandle &handle, string url, HTTPHeaders head * For CreateMultipartUpload operations (?uploads=...), use the customer-managed key, if any. */ if (http_params.find("uploads=") != std::string::npos) - SetEncryptionFields(s3Handle, parsed_s3_url, encryption, customer_key_id); + SetEncryptionFields(LookupContext(&input), parsed_s3_url, encryption, customer_key_id); /* * For DeleteObjects operations we need to specify the Content-MD5 header. @@ -454,15 +487,15 @@ PgLakeS3FileSystem::PostRequest(FileHandle &handle, string url, HTTPHeaders head auto headers = create_s3_header(parsed_s3_url.path, http_params, parsed_s3_url.host, "s3", "POST", auth_params, "", "", payload_hash, "application/octet-stream", content_md5, encryption, customer_key_id); - return HTTPFileSystem::PostRequest(handle, http_url, headers, buffer_out, buffer_in, buffer_in_len); + return HTTPFileSystem::PostRequest(input, http_url, headers, buffer_out, buffer_in, buffer_in_len); } unique_ptr -PgLakeS3FileSystem::PutRequest(FileHandle &handle, string url, HTTPHeaders header_map, +PgLakeS3FileSystem::PutRequest(HTTPInput &input, string url, HTTPHeaders header_map, char *buffer_in, idx_t buffer_in_len, string http_params) { - PgLakeS3FileHandle &s3Handle = handle.Cast(); - auto auth_params = s3Handle.auth_params; + auto &s3_input = input.Cast(); + auto auth_params = s3_input.auth_params; auto parsed_s3_url = S3UrlParse(url, auth_params); string http_url = parsed_s3_url.GetHTTPUrl(auth_params, http_params); auto content_type = "application/octet-stream"; @@ -475,11 +508,11 @@ PgLakeS3FileSystem::PutRequest(FileHandle &handle, string url, HTTPHeaders heade * For PutObject operations (no params), use the customer-managed key, if any. */ if (http_params.empty()) - SetEncryptionFields(s3Handle, parsed_s3_url, encryption, customer_key_id); + SetEncryptionFields(LookupContext(&input), parsed_s3_url, encryption, customer_key_id); auto headers = create_s3_header(parsed_s3_url.path, http_params, parsed_s3_url.host, "s3", "PUT", auth_params, "", "", payload_hash, content_type, "", encryption, customer_key_id); - return HTTPFileSystem::PutRequest(handle, http_url, headers, buffer_in, buffer_in_len); + return HTTPFileSystem::PutRequest(input, http_url, headers, buffer_in, buffer_in_len); } /* @@ -698,7 +731,8 @@ PgLakeS3FileSystem::List(const string &glob_pattern, bool is_glob, FileOpener *o // Repeat requests until the keys of all common prefixes are parsed. auto common_prefixes = AWSListObjectV2::ParseCommonPrefix(response_str); while (!common_prefixes.empty()) { - auto prefix_path = parsed_s3_url.prefix + parsed_s3_url.bucket + '/' + common_prefixes.back(); + auto prefix_path = S3FileSystem::UrlDecode( + parsed_s3_url.prefix + parsed_s3_url.bucket + '/' + common_prefixes.back()); common_prefixes.pop_back(); // TODO we could optimize here by doing a match on the prefix, if it doesn't match we can skip this prefix diff --git a/duckdb_pglake/src/fs/region_aware_s3fs.cpp b/duckdb_pglake/src/fs/region_aware_s3fs.cpp index 9d2b38c0..760e0b02 100644 --- a/duckdb_pglake/src/fs/region_aware_s3fs.cpp +++ b/duckdb_pglake/src/fs/region_aware_s3fs.cpp @@ -515,7 +515,7 @@ RegionAwareS3FileSystem::PutCachedRegion(const string &bucketUrl, const string & string RegionAwareS3FileSystem::GetBucketRegionFromS3(const string &url, optional_ptr opener) { - shared_ptr httpUtil = HTTPFSUtil::GetHTTPUtil(opener); + auto &httpUtil = HTTPFSUtil::GetHTTPUtil(opener); /* Get the configuration */ FileOpenerInfo s3UrlInfo = {url}; @@ -536,12 +536,12 @@ RegionAwareS3FileSystem::GetBucketRegionFromS3(const string &url, optional_ptr httpParams = httpUtil->InitializeParameters(opener, httpUrlInfo); - unique_ptr client = httpUtil->InitializeClient(*httpParams, baseUrl); + unique_ptr httpParams = httpUtil.InitializeParameters(opener, httpUrlInfo); + unique_ptr client = httpUtil.InitializeClient(*httpParams, baseUrl); HTTPHeaders requestHeaders; HeadRequestInfo headRequest(baseUrl + "/", requestHeaders, *httpParams); - unique_ptr response = httpUtil->Request(headRequest, client); + unique_ptr response = httpUtil.Request(headRequest, client); if (!response->headers.HasHeader("x-amz-bucket-region")) return string(); diff --git a/duckdb_pglake/src/include/pg_lake/fs/file_cache_manager.hpp b/duckdb_pglake/src/include/pg_lake/fs/file_cache_manager.hpp index acf5d7c8..8a041b63 100644 --- a/duckdb_pglake/src/include/pg_lake/fs/file_cache_manager.hpp +++ b/duckdb_pglake/src/include/pg_lake/fs/file_cache_manager.hpp @@ -244,6 +244,10 @@ class FileCacheManager : public ObjectCacheEntry { return ObjectType(); } + optional_idx GetEstimatedCacheMemory() const override { + return optional_idx(); + } + private: /* * FileCacheActivity is a wrapper for both a mutex and state of a diff --git a/duckdb_pglake/src/include/pg_lake/fs/pg_lake_s3fs.hpp b/duckdb_pglake/src/include/pg_lake/fs/pg_lake_s3fs.hpp index 6dcf87a7..b768ce14 100644 --- a/duckdb_pglake/src/include/pg_lake/fs/pg_lake_s3fs.hpp +++ b/duckdb_pglake/src/include/pg_lake/fs/pg_lake_s3fs.hpp @@ -17,6 +17,9 @@ #pragma once +#include +#include + #include "duckdb.hpp" #include "duckdb/common/local_file_system.hpp" @@ -44,13 +47,12 @@ class PgLakeS3FileSystem : public S3FileSystem { vector List(const string &glob_pattern, bool is_glob, FileOpener *opener); /* Custom replacement for S3FileSystem functions */ - unique_ptr PostRequest(FileHandle &handle, string s3_url, HTTPHeaders header_map, - string &buffer_out, - char *buffer_in, idx_t buffer_in_len, - string http_params = "") override; - unique_ptr PutRequest(FileHandle &handle, string s3_url, HTTPHeaders header_map, - char *buffer_in, idx_t buffer_in_len, - string http_params = "") override; + unique_ptr PostRequest(HTTPInput &input, string s3_url, HTTPHeaders header_map, + string &buffer_out, char *buffer_in, idx_t buffer_in_len, + string http_params = "") override; + unique_ptr PutRequest(HTTPInput &input, string s3_url, HTTPHeaders header_map, + char *buffer_in, idx_t buffer_in_len, + string http_params = "") override; /* Overrides that are not in S3FileSystem */ void RemoveFile(const string &filename, optional_ptr opener = nullptr) override; @@ -59,9 +61,20 @@ class PgLakeS3FileSystem : public S3FileSystem { return "PgLakeS3FileSystem"; } + void RegisterContext(const shared_ptr &input, optional_ptr context); + optional_ptr LookupContext(HTTPInput *input); + protected: unique_ptr CreateHandle(const OpenFileInfo &path, FileOpenFlags flags, optional_ptr opener) override; + +private: + mutable mutex context_mutex_; + struct ContextEntry { + weak_ptr input_ref; + optional_ptr context; + }; + unordered_map context_map_; }; class PgLakeS3FileHandle : public S3FileHandle { diff --git a/duckdb_pglake/src/include/pg_lake/fs/region_aware_s3fs.hpp b/duckdb_pglake/src/include/pg_lake/fs/region_aware_s3fs.hpp index ebc82c6a..ec7558e8 100644 --- a/duckdb_pglake/src/include/pg_lake/fs/region_aware_s3fs.hpp +++ b/duckdb_pglake/src/include/pg_lake/fs/region_aware_s3fs.hpp @@ -160,6 +160,10 @@ class BucketRegion : public ObjectCacheEntry { string GetObjectType() override { return ObjectType(); } + + optional_idx GetEstimatedCacheMemory() const override { + return optional_idx(); + } }; diff --git a/pg_lake_copy/tests/pytests/test_create_table.py b/pg_lake_copy/tests/pytests/test_create_table.py index cafa8978..97454c79 100644 --- a/pg_lake_copy/tests/pytests/test_create_table.py +++ b/pg_lake_copy/tests/pytests/test_create_table.py @@ -277,7 +277,7 @@ def test_create_table_load_from_invalid_url(pg_conn, duckdb_conn, s3): pg_conn, raise_error=False, ) - assert error.startswith("ERROR: HTTP Error: Unable to connect to URL") + assert error.startswith("ERROR: HTTP Error:") pg_conn.rollback() @@ -288,7 +288,7 @@ def test_create_table_load_from_invalid_url(pg_conn, duckdb_conn, s3): pg_conn, raise_error=False, ) - assert error.startswith("ERROR: HTTP Error: Unable to connect to URL") + assert error.startswith("ERROR: HTTP Error:") pg_conn.rollback() diff --git a/pg_lake_copy/tests/pytests/test_gcs_copy.py b/pg_lake_copy/tests/pytests/test_gcs_copy.py index b2a022d3..958731e4 100644 --- a/pg_lake_copy/tests/pytests/test_gcs_copy.py +++ b/pg_lake_copy/tests/pytests/test_gcs_copy.py @@ -59,7 +59,7 @@ def test_gcs_copy_from_parquet_notexists(pg_conn, gcs): pg_conn, raise_error=False, ) - assert error.startswith("ERROR: HTTP Error: Unable to connect to URL ") + assert error.startswith("ERROR: HTTP Error:") pg_conn.rollback() diff --git a/pg_lake_copy/tests/pytests/test_s3_copy.py b/pg_lake_copy/tests/pytests/test_s3_copy.py index 62b2db06..61f855c0 100644 --- a/pg_lake_copy/tests/pytests/test_s3_copy.py +++ b/pg_lake_copy/tests/pytests/test_s3_copy.py @@ -113,7 +113,7 @@ def test_s3_copy_from_parquet_notexists(pg_conn, s3): pg_conn, raise_error=False, ) - assert error.startswith("ERROR: HTTP Error: Unable to connect to URL ") + assert error.startswith("ERROR: HTTP Error:") pg_conn.rollback() diff --git a/pg_lake_engine/src/pgduck/read_data.c b/pg_lake_engine/src/pgduck/read_data.c index 7209f256..b76104c6 100644 --- a/pg_lake_engine/src/pgduck/read_data.c +++ b/pg_lake_engine/src/pgduck/read_data.c @@ -25,6 +25,7 @@ #include "commands/defrem.h" #include "common/string.h" #include "pg_lake/csv/csv_options.h" +#include "pg_lake/extensions/postgis.h" #include "pg_lake/parsetree/options.h" #include "pg_lake/parquet/field.h" #include "pg_lake/pgduck/gdal.h" @@ -53,7 +54,7 @@ static char *ReadDataSourceFunction(List *sourcePaths, bool preferVarchar, ReadRowLocationMode emitRowLocation, bool emitRowId); -static char *BuildParquetSchema(DataFileSchema * schema, bool emitRowId); +static char *BuildParquetSchema(DataFileSchema * schema, TupleDesc expectedDesc, bool emitRowId); static char *GetSchemaType(Field * mapping); static char *ReadEmptyDataSource(TupleDesc tupleDesc, CopyDataFormat format, bool preferVarchar, @@ -256,7 +257,7 @@ ReadDataSourceFunction(List *sourcePaths, if (schema && schema->nfields > 0) { - char *schemaOptions = BuildParquetSchema(schema, emitRowId); + char *schemaOptions = BuildParquetSchema(schema, expectedDesc, emitRowId); if (schemaOptions != NULL) { @@ -566,7 +567,7 @@ ReadDataSourceFunction(List *sourcePaths, * read them all. The */ static char * -BuildParquetSchema(DataFileSchema * schema, bool emitRowId) +BuildParquetSchema(DataFileSchema * schema, TupleDesc expectedDesc, bool emitRowId) { StringInfoData schemaString; @@ -590,6 +591,35 @@ BuildParquetSchema(DataFileSchema * schema, bool emitRowId) defaultValue = quote_literal_cstr(field->duckSerializedInitialDefault); } + /* + * GeoParquet stores geometry as native GEOMETRY with CRS in Parquet, + * but the Iceberg spec maps geometry to "binary" (BLOB). Override to + * plain GEOMETRY so read_parquet() reads the column natively rather + * than trying to cast GEOMETRY to BLOB. CRS is stripped in + * BuildColumnProjection. + */ + const char *schemaType = GetSchemaType(field->type); + + if (expectedDesc != NULL && + field->type->type == FIELD_TYPE_SCALAR && + strcmp(schemaType, "binary") == 0) + { + for (int attnum = 0; attnum < expectedDesc->natts; attnum++) + { + Form_pg_attribute attr = TupleDescAttr(expectedDesc, attnum); + + if (attr->attisdropped) + continue; + + if (strcmp(field->name, NameStr(attr->attname)) == 0 && + IsGeometryTypeId(attr->atttypid)) + { + schemaType = "GEOMETRY"; + break; + } + } + } + /* * add this to the schema 0: {name: 'renamed_i', type: 'BIGINT', * default_value: ''} @@ -597,7 +627,7 @@ BuildParquetSchema(DataFileSchema * schema, bool emitRowId) appendStringInfo(&schemaString, "%d: {name: %s, type: %s, default_value: %s}", field->id, quote_literal_cstr(field->name), - quote_literal_cstr(GetSchemaType(field->type)), + quote_literal_cstr(schemaType), defaultValue); addComma = true; @@ -627,8 +657,10 @@ GetSchemaType(Field * field) switch (field->type) { case FIELD_TYPE_SCALAR: - /* For scalar types, simply append the type name */ - appendStringInfoString(&str, field->field.scalar.typeName); + if (strncasecmp(field->field.scalar.typeName, "fixed[", 6) == 0) + appendStringInfoString(&str, "binary"); + else + appendStringInfoString(&str, field->field.scalar.typeName); break; case FIELD_TYPE_LIST: @@ -1304,18 +1336,17 @@ GuessStorageType(DuckDBTypeInfo engineType, CopyDataFormat sourceFormat) if (engineType.typeId == DUCKDB_TYPE_GEOMETRY) { - if (sourceFormat == DATA_FORMAT_PARQUET || - sourceFormat == DATA_FORMAT_ICEBERG) - { - /* - * Geometry is stored as a WKB blob in Parquet, we ask for it as - * BLOB such that we can call ST_GeomFromWKB - */ - storageType.typeId = DUCKDB_TYPE_BLOB; - storageType.typeName = engineType.isArrayType ? "BLOB[]" : "BLOB"; - } - else if (sourceFormat == DATA_FORMAT_JSON || - sourceFormat == DATA_FORMAT_CSV) + /* + * For Parquet/Iceberg, keep GEOMETRY as-is so DuckDB reads it + * natively via GeoParquet. For old files without GeoParquet metadata, + * DuckDB casts BLOB to GEOMETRY automatically. + * + * JSON and CSV store geometry as text (GeoJSON / WKT), so we override + * to VARCHAR here and convert via spatial functions in + * BuildColumnProjection. + */ + if (sourceFormat == DATA_FORMAT_JSON || + sourceFormat == DATA_FORMAT_CSV) { /* * Geometry is stored as a GeoJSON in JSON, we ask for it as @@ -1371,7 +1402,7 @@ GuessStorageType(DuckDBTypeInfo engineType, CopyDataFormat sourceFormat) * do its own casting or alias then we end up with invalid/weird expressions * here, such as: * - * ST_AsWKB(geom :: BLOB) AS geom :: geometry AS geom + * ST_SetCRS(geom, '') AS geom :: geometry AS geom * * Since only the caller knows whether it will be doing that, it will tell us * if we need to add our own column aliasing in this case. @@ -1415,23 +1446,51 @@ BuildColumnProjection(char *columnName, if (engineType.typeId == DUCKDB_TYPE_GEOMETRY && !engineType.isArrayType) { /* - * Geometry requires special casts using spatial functions + * Geometry requires special casts using spatial functions. + * + * For Parquet/Iceberg the column is read as native GEOMETRY with CRS + * stripped so that pushed-down WHERE clauses using functions like + * ST_Distance_Spheroid work correctly (DuckDB 1.5+ requires plain + * GEOMETRY for implicit POINT_2D casts). SRID is preserved by PostGIS + * via the column's typmod. */ if (FormatUsesParquet(sourceFormat)) - /* assume geometry in Parquet is stored as WKB blob */ - return psprintf("ST_GeomFromWKB(%s::blob)%s", + { + /* + * GeoParquet defaults to OGC:CRS84 (SRID 4326) when no explicit + * CRS is stored, and setting CRS via ST_SetCRS prevents implicit + * GEOMETRY → POINT_2D casts required by DuckDB 1.5+ spheroid + * functions. Strip all CRS so that pushed-down WHERE clauses + * work correctly. + * + * SRID preservation for the output relies on PostGIS applying the + * column typmod (e.g. geometry(point,4326)) when the FDW converts + * the result to PostgreSQL format. + */ + return psprintf("ST_SetCRS(%s, '')%s", quote_identifier(columnName), columnAliasString); + } if (sourceFormat == DATA_FORMAT_CSV) - /* assume geometry in JSON is stored as WKT */ return psprintf("ST_GeomFromText(%s)%s", quote_identifier(columnName), columnAliasString); if (sourceFormat == DATA_FORMAT_JSON) - /* assume geometry in JSON is stored as GeoJSON */ return psprintf("ST_GeomFromGeoJSON(%s)%s", quote_identifier(columnName), columnAliasString); + + + /* + * GDAL format can store geometry as BLOB or GEOMETRY depending on the + * driver. We need to cast to BLOB and then to hex to get the WKB + * representation. + */ + if (sourceFormat == DATA_FORMAT_GDAL) + return psprintf("COALESCE(hex(TRY_CAST(%s AS BLOB)), ST_AsHexWKB(TRY_CAST(%s AS GEOMETRY)))%s", + quote_identifier(columnName), + quote_identifier(columnName), + columnAliasString); } if (engineType.typeId == DUCKDB_TYPE_TIME_TZ) diff --git a/pg_lake_engine/src/pgduck/write_data.c b/pg_lake_engine/src/pgduck/write_data.c index 8d46f098..e922c866 100644 --- a/pg_lake_engine/src/pgduck/write_data.c +++ b/pg_lake_engine/src/pgduck/write_data.c @@ -416,8 +416,12 @@ TupleDescToProjectionListForWrite(TupleDesc tupleDesc, CopyDataFormat destinatio /* * In case of geometry, we write WKT in csv_writer.c and parse it as * GEOMETRY via read_csv. Just before writing to the destination, we - * convert to a form that makes sense for the destination format, - * namely WKB blob in Parquet and GeoJSON in JSON. + * convert to a form that makes sense for the destination format. + * + * For Parquet/Iceberg we keep the column as native GEOMETRY so that + * DuckDB's GeoParquet writer can emit CRS metadata preserving the + * SRID. When the PostgreSQL column carries an SRID we set the CRS via + * ST_SetCRS. * * In case of CSV we preserve the WKT as written by csv_writer.c */ @@ -425,9 +429,13 @@ TupleDescToProjectionListForWrite(TupleDesc tupleDesc, CopyDataFormat destinatio { if (destinationFormat == DATA_FORMAT_PARQUET || destinationFormat == DATA_FORMAT_ICEBERG) - appendStringInfo(&projection, "ST_AsWKB(%s) AS ", - quote_identifier(columnName)); + { + int srid = GEOMETRY_GET_SRID(column->atttypmod); + if (srid > 0) + appendStringInfo(&projection, "ST_SetCRS(%s, 'EPSG:%d') AS ", + quote_identifier(columnName), srid); + } else if (destinationFormat == DATA_FORMAT_JSON) appendStringInfo(&projection, "ST_AsGeoJSON(%s) AS ", quote_identifier(columnName)); diff --git a/pg_lake_spatial/tests/pytests/test_gdal.py b/pg_lake_spatial/tests/pytests/test_gdal.py index 90554d94..190b7514 100644 --- a/pg_lake_spatial/tests/pytests/test_gdal.py +++ b/pg_lake_spatial/tests/pytests/test_gdal.py @@ -206,6 +206,7 @@ def test_gdal_zip_gml( assert ( "Geometry type 10 not supported" in error or "'MULTICURVE' is not supported" in error + or "Unsupported geometry type in WKB" in error ) user_conn.rollback() @@ -221,7 +222,7 @@ def test_gdal_zip_gml( user_conn, raise_error=False, ) - assert "could not be found" in error + assert "could not be found" in error or "Could not find layer" in error user_conn.rollback() diff --git a/pg_lake_table/tests/pytests/test_caching.py b/pg_lake_table/tests/pytests/test_caching.py index 1322b2ed..235e9f8b 100644 --- a/pg_lake_table/tests/pytests/test_caching.py +++ b/pg_lake_table/tests/pytests/test_caching.py @@ -248,7 +248,7 @@ def test_invalid_url(s3, pg_conn, extension): error = run_command( f"SELECT lake_file_cache.add('{url_notexists}');", pg_conn, raise_error=False ) - assert "NOT FOUND" in error + assert "NOT FOUND" in error.upper() pg_conn.rollback() diff --git a/pg_lake_table/tests/pytests/test_column_inference.py b/pg_lake_table/tests/pytests/test_column_inference.py index 59393663..4253277d 100644 --- a/pg_lake_table/tests/pytests/test_column_inference.py +++ b/pg_lake_table/tests/pytests/test_column_inference.py @@ -54,7 +54,7 @@ def test_invalid_url(conn): conn, raise_error=False, ) - assert "NOT FOUND" in error + assert "NOT FOUND" in error.upper() conn.rollback() diff --git a/pg_lake_table/tests/pytests/test_create_iceberg_table_load_from.py b/pg_lake_table/tests/pytests/test_create_iceberg_table_load_from.py index 06207f74..1baa0bcd 100644 --- a/pg_lake_table/tests/pytests/test_create_iceberg_table_load_from.py +++ b/pg_lake_table/tests/pytests/test_create_iceberg_table_load_from.py @@ -249,7 +249,7 @@ def test_create_table_load_from_invalid_url( pg_conn, raise_error=False, ) - assert error.startswith("ERROR: HTTP Error: Unable to connect to URL") + assert error.startswith("ERROR: HTTP Error:") pg_conn.rollback() @@ -260,7 +260,7 @@ def test_create_table_load_from_invalid_url( pg_conn, raise_error=False, ) - assert error.startswith("ERROR: HTTP Error: Unable to connect to URL") + assert error.startswith("ERROR: HTTP Error:") pg_conn.rollback() diff --git a/pg_lake_table/tests/pytests/test_drop_table.py b/pg_lake_table/tests/pytests/test_drop_table.py index c3628503..47b8563b 100644 --- a/pg_lake_table/tests/pytests/test_drop_table.py +++ b/pg_lake_table/tests/pytests/test_drop_table.py @@ -426,7 +426,7 @@ def test_drop_without_s3_access_cached( pg_conn, raise_error=False, ) - assert "Could not establish connection error" in result + assert "Could not connect to server error" in result pg_conn.rollback() # still, we can drop the table/schema @@ -522,7 +522,7 @@ def test_drop_without_s3_access_not_cached( pg_conn, raise_error=False, ) - assert "Could not establish connection error" in result + assert "Could not connect to server error" in result pg_conn.rollback() # still, we can drop the table/schema diff --git a/pg_lake_table/tests/pytests/test_explain.py b/pg_lake_table/tests/pytests/test_explain.py index a05b6aac..2213571f 100644 --- a/pg_lake_table/tests/pytests/test_explain.py +++ b/pg_lake_table/tests/pytests/test_explain.py @@ -253,7 +253,7 @@ def test_explain_explicit_cardinality(pg_conn, s3, with_default_location): assert custom_scan["Node Type"] == "Custom Scan" duckdb_plan = custom_scan["Plans"][0] - assert duckdb_plan["Node Type"] == "READ_PARQUET " + assert duckdb_plan["Node Type"].strip() == "READ_PARQUET" assert duckdb_plan["Estimated Cardinality"] == "101" # first, delete one row, then check the plan with position deletes @@ -286,7 +286,7 @@ def test_explain_explicit_cardinality(pg_conn, s3, with_default_location): assert hash_join_plan["Estimated Cardinality"] == "101" source_read_parquet_plan = hash_join_plan["Plans"][0] - assert source_read_parquet_plan["Node Type"] == "READ_PARQUET " + assert source_read_parquet_plan["Node Type"].strip() == "READ_PARQUET" assert source_read_parquet_plan["Estimated Cardinality"] == "101" position_delete_projection_plan = hash_join_plan["Plans"][1] @@ -295,7 +295,7 @@ def test_explain_explicit_cardinality(pg_conn, s3, with_default_location): assert position_delete_projection_plan["Estimated Cardinality"] == "1" position_delete_read_parquet_plan = position_delete_projection_plan["Plans"][0] - assert position_delete_read_parquet_plan["Node Type"] == "READ_PARQUET " + assert position_delete_read_parquet_plan["Node Type"].strip() == "READ_PARQUET" assert position_delete_read_parquet_plan["Estimated Cardinality"] == "1" diff --git a/pg_lake_table/tests/pytests/test_vacuum_failure.py b/pg_lake_table/tests/pytests/test_vacuum_failure.py index a32990f7..af15bbe2 100644 --- a/pg_lake_table/tests/pytests/test_vacuum_failure.py +++ b/pg_lake_table/tests/pytests/test_vacuum_failure.py @@ -136,7 +136,7 @@ def test_vacuum_without_s3_access( pg_conn, raise_error=False, ) - assert "Could not establish connection error" in result + assert "Could not connect to server error" in result pg_conn.rollback() # first, show that there are already items in the deletion queue diff --git a/pgduck_server/include/duckdb/duckdb_pglake.h b/pgduck_server/include/duckdb/duckdb_pglake.h index 2792007d..e777b9b6 100644 --- a/pgduck_server/include/duckdb/duckdb_pglake.h +++ b/pgduck_server/include/duckdb/duckdb_pglake.h @@ -42,6 +42,8 @@ const char *duckdb_pglake_time_to_string(duckdb_time input); const char *duckdb_pglake_time_tz_to_string(duckdb_time_tz input); const char *duckdb_pglake_date_to_string(duckdb_date input); const char *duckdb_pglake_geometry_to_string(duckdb_database database, duckdb_string_t input); +bool duckdb_pglake_is_geometry_type(duckdb_logical_type type); +int duckdb_pglake_geometry_get_srid(duckdb_logical_type type); /* * Other utility functions in duckdb_pglake. diff --git a/pgduck_server/src/duckdb/duckdb.c b/pgduck_server/src/duckdb/duckdb.c index df73c764..de193058 100644 --- a/pgduck_server/src/duckdb/duckdb.c +++ b/pgduck_server/src/duckdb/duckdb.c @@ -354,16 +354,6 @@ duckdb_global_init(char *databaseFilePath, return DUCKDB_INITIALIZATION_ERROR; } - { - if (snprintf(setCommand, 1024, "SET GLOBAL enable_geoparquet_conversion TO 'false'") < 0) - { - return DUCKDB_INITIALIZATION_ERROR; - } - - if (run_command_on_duckdb(setCommand) == DuckDBError) - return DUCKDB_INITIALIZATION_ERROR; - } - { if (snprintf(setCommand, 1024, "SET GLOBAL enable_object_cache TO true") < 0) { @@ -675,6 +665,14 @@ duckdb_vector_to_pg_wire(duckdb_vector vector, duckdb_type duckType, ResponseFormat * responseFormat, StringInfo output) { + /* + * GEOMETRY has no duckdb_type enum value; fall back to BLOB which handles + * it via blob_to_text + the geometry-specific check. + */ + if (duckType == DUCKDB_TYPE_INVALID && + duckdb_pglake_is_geometry_type(logicalType)) + duckType = DUCKDB_TYPE_BLOB; + DuckDBTypeInfo *typeMap = find_duck_type_info(duckType); if (typeMap == NULL || typeMap->to_text == NULL) @@ -1131,6 +1129,24 @@ duckdb_query_result_send_column_metadata(DuckDBQueryResult * duckdb_query_result duckdb_type duckType = duckdb_column_type(duckResult, columnIndex); DuckDBResultColumn *resultColumn = &resultColumns[columnIndex]; + /* + * DuckDB 1.5.1 promoted GEOMETRY to a first-class LogicalTypeId with + * no corresponding duckdb_type enum value, so duckdb_column_type() + * returns DUCKDB_TYPE_INVALID. Map it to BLOB so our existing + * blob_to_text handler can convert it to hex WKB. + */ + if (duckType == DUCKDB_TYPE_INVALID) + { + duckdb_logical_type colLogicalType = + duckdb_column_logical_type(duckResult, columnIndex); + + if (colLogicalType != NULL && + duckdb_pglake_is_geometry_type(colLogicalType)) + duckType = DUCKDB_TYPE_BLOB; + + duckdb_destroy_logical_type(&colLogicalType); + } + Oid originalTableId = 0; AttrNumber originalColumnNumber = 0; DuckDBTypeInfo *typeInfo = find_duck_type_info(duckType); diff --git a/pgduck_server/src/duckdb/type_conversion.c b/pgduck_server/src/duckdb/type_conversion.c index b85ea53f..6ba6abf2 100644 --- a/pgduck_server/src/duckdb/type_conversion.c +++ b/pgduck_server/src/duckdb/type_conversion.c @@ -415,6 +415,111 @@ pg_varchar_to_text(duckdb_string_t val, TextOutputBuffer * toTextBuffer) } +/* + * inject_srid_into_hex_wkb transforms ISO WKB hex into EWKB hex by setting + * the SRID flag in the type word and inserting 4 SRID bytes. + * + * Returns a newly allocated string (caller must free), or NULL on error. + * If srid <= 0 or the input is too short, returns NULL without modifying. + */ +static char * +inject_srid_into_hex_wkb(const char *hexWkb, int srid) +{ + size_t len = strlen(hexWkb); + + /* minimum: 1 byte order + 4 type bytes = 10 hex chars */ + if (len < 10 || srid <= 0) + return NULL; + + bool isLE = (hexWkb[0] == '0' && hexWkb[1] == '1'); + + /* parse existing type word (4 bytes = 8 hex chars at offset 2) */ + uint32_t typeWord = 0; + + for (int i = 0; i < 8; i++) + { + char c = hexWkb[2 + i]; + uint32_t nibble; + + if (c >= '0' && c <= '9') + nibble = c - '0'; + else if (c >= 'a' && c <= 'f') + nibble = c - 'a' + 10; + else if (c >= 'A' && c <= 'F') + nibble = c - 'A' + 10; + else + return NULL; + + if (isLE) + typeWord |= nibble << ((i / 2) * 8 + (i % 2 ? 0 : 4)); + else + typeWord = (typeWord << 4) | nibble; + } + + /* set SRID flag */ + typeWord |= 0x20000000; + + /* EWKB = byte_order(2) + type_word(8) + srid(8) + rest */ + size_t ewkbLen = len + 8 + 1; + char *ewkb = (char *) malloc(ewkbLen); + + if (!ewkb) + return NULL; + + /* copy byte order */ + ewkb[0] = hexWkb[0]; + ewkb[1] = hexWkb[1]; + + /* write modified type word */ + if (isLE) + { + for (int i = 0; i < 4; i++) + { + uint8_t byte = (typeWord >> (i * 8)) & 0xFF; + + snprintf(ewkb + 2 + i * 2, 3, "%02X", byte); + } + } + else + { + for (int i = 0; i < 4; i++) + { + uint8_t byte = (typeWord >> ((3 - i) * 8)) & 0xFF; + + snprintf(ewkb + 2 + i * 2, 3, "%02X", byte); + } + } + + /* write SRID */ + if (isLE) + { + for (int i = 0; i < 4; i++) + { + uint8_t byte = (srid >> (i * 8)) & 0xFF; + + snprintf(ewkb + 10 + i * 2, 3, "%02X", byte); + } + } + else + { + for (int i = 0; i < 4; i++) + { + uint8_t byte = (srid >> ((3 - i) * 8)) & 0xFF; + + snprintf(ewkb + 10 + i * 2, 3, "%02X", byte); + } + } + + /* + * copy remainder of original WKB (everything after byte_order + + * type_word) + */ + memcpy(ewkb + 18, hexWkb + 10, len - 10 + 1); + + return ewkb; +} + + /* * pg_blob_to_text: converts a blob to its string representation * @@ -429,23 +534,54 @@ blob_to_text(duckdb_vector vector, duckdb_logical_type blobType, int row, TextOu char *typeAlias = duckdb_logical_type_get_alias(blobType); bool emitEscapeSequence = true; - if (typeAlias != NULL) + /* + * Check for geometry: either via type alias (legacy DuckDB where GEOMETRY + * was BLOB + alias) or via the first-class GEOMETRY LogicalTypeId + * introduced in DuckDB 1.5.1. + */ + if ((typeAlias != NULL && strcmp(typeAlias, "GEOMETRY") == 0) || + duckdb_pglake_is_geometry_type(blobType)) { - if (strcmp(typeAlias, "GEOMETRY") == 0) - { - /* output geometry via st_ashexwkb */ - toTextBuffer->buffer = (char *) duckdb_pglake_geometry_to_string(DuckDB, val); - toTextBuffer->needsFree = true; + char *hexWkb = (char *) duckdb_pglake_geometry_to_string(DuckDB, val); - return CHECK_OOM(toTextBuffer->buffer); + if (hexWkb == NULL) + { + duckdb_free(typeAlias); + toTextBuffer->buffer = NULL; + return DUCKDB_OUT_OF_MEMORY_ERROR; } - else if (strcmp(typeAlias, "WKB_BLOB") == 0) + + /* + * If the column carries a CRS (e.g. EPSG:4326), inject the SRID into + * the hex WKB to produce EWKB so PostGIS can recover it. + */ + int srid = duckdb_pglake_geometry_get_srid(blobType); + + if (srid > 0) { - /* output WKB_BLOB as pure hex to be parseable as geometry */ - emitEscapeSequence = false; + char *ewkb = inject_srid_into_hex_wkb(hexWkb, srid); + + if (ewkb != NULL) + { + free(hexWkb); + hexWkb = ewkb; + } } + + toTextBuffer->buffer = hexWkb; + toTextBuffer->needsFree = true; + + duckdb_free(typeAlias); + return DUCKDB_SUCCESS; + } + else if (typeAlias != NULL && strcmp(typeAlias, "WKB_BLOB") == 0) + { + /* output WKB_BLOB as pure hex to be parseable as geometry */ + emitEscapeSequence = false; } + duckdb_free(typeAlias); + uint32_t blobLength; char *blobBuffer; diff --git a/pgduck_server/tests/pytests/test_caching.py b/pgduck_server/tests/pytests/test_caching.py index ae4642bc..14bcea99 100644 --- a/pgduck_server/tests/pytests/test_caching.py +++ b/pgduck_server/tests/pytests/test_caching.py @@ -129,7 +129,7 @@ def test_invalid_url(s3, pgduck_conn): error = run_command( f"CALL pg_lake_cache_file('{url_notexists}');", pgduck_conn, raise_error=False ) - assert "NOT FOUND" in error + assert "NOT FOUND" in error.upper() pgduck_conn.rollback() @@ -274,7 +274,7 @@ def test_pg_lake_manage_cache_invalid_url(s3, pgduck_conn): # Read from non-existent URL error = run_command(f"SELECT count(*) FROM '{url}'", pgduck_conn, raise_error=False) - assert "NOT FOUND" in error + assert "NOT FOUND" in error.upper() pgduck_conn.rollback() @@ -792,13 +792,17 @@ def run_test_pg_lake_remove_file(query_arg, s3, pgduck_conn): pgduck_conn.rollback() - # Removing twice does not give an error - run_command( + # Removing twice does not crash + result = run_command( f""" SELECT pg_lake_remove_file('{url}'); """, pgduck_conn, + raise_error=False, ) + if result: + assert "404" in result or "Not Found" in result + pgduck_conn.rollback() # Test that query arguments are included in the path diff --git a/pgduck_server/tests/pytests/test_pgbench.py b/pgduck_server/tests/pytests/test_pgbench.py index 38efaf41..b12c60a8 100644 --- a/pgduck_server/tests/pytests/test_pgbench.py +++ b/pgduck_server/tests/pytests/test_pgbench.py @@ -50,18 +50,18 @@ def test_pgbench_prepared(pgduck_server): # so we don't care about query results def test_pgbench_full_suite(pgduck_server): - returncode, stdout, stderr = run_pgbench_command( - [ - "-i", - "-I", - "t", - "-h", - server_params.PGDUCK_UNIX_DOMAIN_PATH, - "-p", - str(server_params.PGDUCK_PORT), - ] + conn = psycopg2.connect( + host=server_params.PGDUCK_UNIX_DOMAIN_PATH, port=server_params.PGDUCK_PORT ) - assert returncode == 0, f"pgbench prepared failed for init" + conn.autocommit = True + for ddl in [ + "CREATE TABLE IF NOT EXISTS pgbench_branches(bid int not null,bbalance int,filler char(88))", + "CREATE TABLE IF NOT EXISTS pgbench_tellers(tid int not null,bid int,tbalance int,filler char(84))", + "CREATE TABLE IF NOT EXISTS pgbench_accounts(aid int not null,bid int,abalance int,filler char(84))", + "CREATE TABLE IF NOT EXISTS pgbench_history(tid int,bid int,aid int,delta int,mtime timestamp,filler char(22))", + ]: + run_command(ddl, conn) + conn.close() test_dir = os.path.dirname(os.path.abspath(__file__)) diff --git a/pgduck_server/tests/pytests/test_s3.py b/pgduck_server/tests/pytests/test_s3.py index cbaed8e8..651dbd9e 100644 --- a/pgduck_server/tests/pytests/test_s3.py +++ b/pgduck_server/tests/pytests/test_s3.py @@ -199,6 +199,6 @@ def test_s3_get_region_invalid(pgduck_conn): raise_error=False, ) assert ( - "Could not establish connection error" in error + "Could not resolve hostname error" in error or "server closed the connection" in error ) diff --git a/test_common/helpers/iceberg.py b/test_common/helpers/iceberg.py index a1bff15b..eb7ac4e3 100644 --- a/test_common/helpers/iceberg.py +++ b/test_common/helpers/iceberg.py @@ -701,7 +701,7 @@ def iceberg_extension(postgres): @pytest.fixture(scope="module") -def iceberg_catalog(superuser_conn, s3): +def iceberg_catalog(superuser_conn, s3, extension): catalog = create_iceberg_test_catalog(superuser_conn) yield catalog tables = catalog.list_tables("public") From af1c864acd5691bb3480f24ba9fd10ecc45d8ee7 Mon Sep 17 00:00:00 2001 From: Aykut Bozkurt Date: Tue, 7 Apr 2026 10:51:35 +0300 Subject: [PATCH 2/3] fix file sequence number assertion by duckdb Signed-off-by: Aykut Bozkurt --- pg_lake_iceberg/src/iceberg/metadata_operations.c | 4 ++-- pg_lake_iceberg/src/iceberg/write_manifest.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pg_lake_iceberg/src/iceberg/metadata_operations.c b/pg_lake_iceberg/src/iceberg/metadata_operations.c index 92003762..eed70ccb 100644 --- a/pg_lake_iceberg/src/iceberg/metadata_operations.c +++ b/pg_lake_iceberg/src/iceberg/metadata_operations.c @@ -1145,8 +1145,8 @@ CreateIcebergManifestEntryFromMetadataOperation(TableMetadataOperation * operati manifestEntry->has_sequence_number = true; manifestEntry->sequence_number = sequenceNumber; - manifestEntry->file_sequence_number = 0; - manifestEntry->has_file_sequence_number = false; + manifestEntry->file_sequence_number = sequenceNumber; + manifestEntry->has_file_sequence_number = true; SetIcebergDataFileStats(&operation->dataFileStats, &manifestEntry->data_file.record_count, diff --git a/pg_lake_iceberg/src/iceberg/write_manifest.c b/pg_lake_iceberg/src/iceberg/write_manifest.c index 94223dfb..42939cb3 100644 --- a/pg_lake_iceberg/src/iceberg/write_manifest.c +++ b/pg_lake_iceberg/src/iceberg/write_manifest.c @@ -219,7 +219,7 @@ WriteIcebergManifestEntryToAvro(IcebergManifestEntry * entry, avro_value_t * rec AvroSetInt32Field(record, "status", entry->status); AvroSetNullableInt64Field(record, "snapshot_id", entry->snapshot_id, entry->has_snapshot_id); AvroSetNullableInt64Field(record, "sequence_number", entry->sequence_number, entry->has_sequence_number); - AvroSetNullableInt64Field(record, "file_sequence_number", entry->sequence_number, entry->has_file_sequence_number); + AvroSetNullableInt64Field(record, "file_sequence_number", entry->file_sequence_number, entry->has_file_sequence_number); AvroSetRecordField(record, "data_file", (AvroSerializeFunction) WriteDataFileToAvro, &entry->data_file); } From 8876a79cee996e8c6a48e9c2d1cc3c66fb09f2f6 Mon Sep 17 00:00:00 2001 From: Aykut Bozkurt Date: Tue, 7 Apr 2026 13:49:08 +0300 Subject: [PATCH 3/3] fix gdal Signed-off-by: Aykut Bozkurt --- pg_lake_engine/include/pg_lake/pgduck/gdal.h | 3 ++- pg_lake_engine/src/pgduck/gdal.c | 5 +++-- pg_lake_engine/src/pgduck/read_data.c | 15 +++++++++++---- pg_lake_spatial/tests/pytests/test_gdal.py | 10 ++-------- pg_lake_table/src/describe/describe.c | 6 +++++- 5 files changed, 23 insertions(+), 16 deletions(-) diff --git a/pg_lake_engine/include/pg_lake/pgduck/gdal.h b/pg_lake_engine/include/pg_lake/pgduck/gdal.h index 473b98e8..7ee31755 100644 --- a/pg_lake_engine/include/pg_lake/pgduck/gdal.h +++ b/pg_lake_engine/include/pg_lake/pgduck/gdal.h @@ -20,4 +20,5 @@ #include "pg_lake/copy/copy_format.h" #include "nodes/pg_list.h" -extern PGDLLEXPORT char *GDALReadFunctionCall(char *path, CopyDataCompression compression, List *options); +extern PGDLLEXPORT char *GDALReadFunctionCall(char *path, CopyDataCompression compression, List *options, + bool forceKeepWKB); diff --git a/pg_lake_engine/src/pgduck/gdal.c b/pg_lake_engine/src/pgduck/gdal.c index 851ac411..35128321 100644 --- a/pg_lake_engine/src/pgduck/gdal.c +++ b/pg_lake_engine/src/pgduck/gdal.c @@ -32,7 +32,8 @@ * See https://gdal.org/user/virtual_file_systems.html for compression syntax. */ char * -GDALReadFunctionCall(char *path, CopyDataCompression compression, List *options) +GDALReadFunctionCall(char *path, CopyDataCompression compression, List *options, + bool forceKeepWKB) { DefElem *filenameOption = GetOption(options, "filename"); bool emitFilename = @@ -92,7 +93,7 @@ GDALReadFunctionCall(char *path, CopyDataCompression compression, List *options) /* whether to preserve WKB as a raw byte array */ DefElem *keepWKBOption = GetOption(options, "keep_wkb"); - if (keepWKBOption != NULL && defGetBoolean(keepWKBOption)) + if (forceKeepWKB || (keepWKBOption != NULL && defGetBoolean(keepWKBOption))) appendStringInfoString(&stRead, ", keep_wkb=true"); /* select a specific layer */ diff --git a/pg_lake_engine/src/pgduck/read_data.c b/pg_lake_engine/src/pgduck/read_data.c index b76104c6..04c9f315 100644 --- a/pg_lake_engine/src/pgduck/read_data.c +++ b/pg_lake_engine/src/pgduck/read_data.c @@ -471,8 +471,14 @@ ReadDataSourceFunction(List *sourcePaths, } char *path = (char *) linitial(sourcePaths); + + /* + * Force keep_wkb so geometry stays as raw WKB BLOB. This + * avoids DuckDB's strict Arrow-to-GEOMETRY conversion that + * throws on types like MULTICURVE. + */ char *stReadCall = - GDALReadFunctionCall(path, sourceCompression, formatOptions); + GDALReadFunctionCall(path, sourceCompression, formatOptions, true); appendStringInfoString(&command, stReadCall); break; @@ -1482,9 +1488,10 @@ BuildColumnProjection(char *columnName, /* - * GDAL format can store geometry as BLOB or GEOMETRY depending on the - * driver. We need to cast to BLOB and then to hex to get the WKB - * representation. + * GDAL data scans always use keep_wkb=true so geometry arrives as raw + * WKB BLOB. The hex(TRY_CAST(... AS BLOB)) path converts it directly. + * The ST_AsHexWKB fallback exists for safety but should not be + * reached. */ if (sourceFormat == DATA_FORMAT_GDAL) return psprintf("COALESCE(hex(TRY_CAST(%s AS BLOB)), ST_AsHexWKB(TRY_CAST(%s AS GEOMETRY)))%s", diff --git a/pg_lake_spatial/tests/pytests/test_gdal.py b/pg_lake_spatial/tests/pytests/test_gdal.py index 190b7514..7a84827c 100644 --- a/pg_lake_spatial/tests/pytests/test_gdal.py +++ b/pg_lake_spatial/tests/pytests/test_gdal.py @@ -200,14 +200,8 @@ def test_gdal_zip_gml( user_conn, ) - # Querying is currently not supported because WKB is converted by DuckDB - # Error messages reflect different DuckDB spatial versions - error = run_query("SELECT shape FROM test_gdal.fdw", user_conn, raise_error=False) - assert ( - "Geometry type 10 not supported" in error - or "'MULTICURVE' is not supported" in error - or "Unsupported geometry type in WKB" in error - ) + result = run_query("SELECT shape FROM test_gdal.fdw", user_conn) + assert len(result) == 5 user_conn.rollback() diff --git a/pg_lake_table/src/describe/describe.c b/pg_lake_table/src/describe/describe.c index 237ee6bc..808a2d1d 100644 --- a/pg_lake_table/src/describe/describe.c +++ b/pg_lake_table/src/describe/describe.c @@ -375,8 +375,12 @@ DescribeColumnsQueryForURL(char *url, } else if (format == DATA_FORMAT_GDAL) { + /* + * DESCRIBE needs the native GEOMETRY type so foreign table columns + * are created as PostGIS geometry, not bytea. + */ appendStringInfo(&command, "FROM %s", - GDALReadFunctionCall(url, compression, copyOptions)); + GDALReadFunctionCall(url, compression, copyOptions, false)); } else {