From 534723e08459a15141439bad0c9ab678fa555bf8 Mon Sep 17 00:00:00 2001 From: muhammad Date: Thu, 5 Sep 2024 17:32:03 +0300 Subject: [PATCH 01/27] changed Cluster_Conn to use hostnames instead of ips --- falkordb/cluster.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/falkordb/cluster.py b/falkordb/cluster.py index 5bc88a0..da6fd4e 100644 --- a/falkordb/cluster.py +++ b/falkordb/cluster.py @@ -1,4 +1,6 @@ -from redis.cluster import RedisCluster +from redis.cluster import RedisCluster, ClusterNode +from redis.retry import Retry +from redis.backoff import default_backoff # detect if a connection is a sentinel def Is_Cluster(conn): @@ -7,12 +9,10 @@ def Is_Cluster(conn): # create a cluster connection from a Redis connection def Cluster_Conn(conn, ssl): - # current sentinel + info = conn.execute_command("CLUSTER NODES") + nodes = [ ClusterNode(v['hostname'],k.split(':')[1]) for k,v in info.items()] connection_kwargs = conn.connection_pool.connection_kwargs - host = connection_kwargs['host'] - port = connection_kwargs['port'] username = connection_kwargs['username'] password = connection_kwargs['password'] - - return RedisCluster(host=host, port=port, username=username, password=password, ssl=ssl) + return RedisCluster(Retry(default_backoff(),6),cluster_error_retry_attempts=6,startup_nodes=nodes,username=username,password=password,ssl=ssl) From eff9ae8c72a58183cf588d304c2710465bccdadd Mon Sep 17 00:00:00 2001 From: muhammad Date: Thu, 5 Sep 2024 17:39:03 +0300 Subject: [PATCH 02/27] changed redis version to use master until new release --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 557e63d..1403ac6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ packages = [{include = "falkordb"}] [tool.poetry.dependencies] python = "^3.8" -redis = "^5.0.1" +redis = {git = "https://github.com/redis/redis-py", rev = "master"} [tool.poetry.group.test.dependencies] pytest-cov = ">=4.1,<6.0" From 3fd5c14f787c1c82c577a75cfc95906a9478dd25 Mon Sep 17 00:00:00 2001 From: muhammad Date: Sun, 8 Sep 2024 10:26:21 +0300 Subject: [PATCH 03/27] changed redis dependency to point to Dudi's branch --- poetry.lock | 257 +++++++++++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 2 +- 2 files changed, 258 insertions(+), 1 deletion(-) create mode 100644 poetry.lock diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..9d14fdf --- /dev/null +++ b/poetry.lock @@ -0,0 +1,257 @@ +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. + +[[package]] +name = "async-timeout" +version = "4.0.3" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, +] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "coverage" +version = "7.6.1" +description = "Code coverage measurement for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"}, + {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959"}, + {file = "coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232"}, + {file = "coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0"}, + {file = "coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93"}, + {file = "coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133"}, + {file = "coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c"}, + {file = "coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6"}, + {file = "coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778"}, + {file = "coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d"}, + {file = "coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5"}, + {file = "coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb"}, + {file = "coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106"}, + {file = "coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155"}, + {file = "coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a"}, + {file = "coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129"}, + {file = "coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e"}, + {file = "coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3"}, + {file = "coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f"}, + {file = "coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657"}, + {file = "coverage-7.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0"}, + {file = "coverage-7.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989"}, + {file = "coverage-7.6.1-cp38-cp38-win32.whl", hash = "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7"}, + {file = "coverage-7.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8"}, + {file = "coverage-7.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255"}, + {file = "coverage-7.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36"}, + {file = "coverage-7.6.1-cp39-cp39-win32.whl", hash = "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c"}, + {file = "coverage-7.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca"}, + {file = "coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df"}, + {file = "coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d"}, +] + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "exceptiongroup" +version = "1.2.2" +description = "Backport of PEP 654 (exception groups)" +optional = false +python-versions = ">=3.7" +files = [ + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, +] + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "packaging" +version = "24.1" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, +] + +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pytest" +version = "8.2.1" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-8.2.1-py3-none-any.whl", hash = "sha256:faccc5d332b8c3719f40283d0d44aa5cf101cec36f88cde9ed8f2bc0538612b1"}, + {file = "pytest-8.2.1.tar.gz", hash = "sha256:5046e5b46d8e4cac199c373041f26be56fdb81eb4e67dc11d4e10811fc3408fd"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.5,<2.0" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-asyncio" +version = "0.23.8" +description = "Pytest support for asyncio" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest_asyncio-0.23.8-py3-none-any.whl", hash = "sha256:50265d892689a5faefb84df80819d1ecef566eb3549cf915dfb33569359d1ce2"}, + {file = "pytest_asyncio-0.23.8.tar.gz", hash = "sha256:759b10b33a6dc61cce40a8bd5205e302978bbbcc00e279a8b61d9a6a3c82e4d3"}, +] + +[package.dependencies] +pytest = ">=7.0.0,<9" + +[package.extras] +docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] +testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)"] + +[[package]] +name = "pytest-cov" +version = "5.0.0" +description = "Pytest plugin for measuring coverage." +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"}, + {file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"}, +] + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] + +[[package]] +name = "redis" +version = "5.1.0b7" +description = "Python client for Redis database and key-value store" +optional = false +python-versions = ">=3.8" +files = [] +develop = false + +[package.dependencies] +async-timeout = {version = ">=4.0.3", markers = "python_full_version < \"3.11.3\""} + +[package.extras] +hiredis = ["hiredis (>=3.0.0)"] +ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==23.2.1)", "requests (>=2.31.0)"] + +[package.source] +type = "git" +url = "https://github.com/dudizimber/redis-py" +reference = "3342-add-hostname-to-parse-node-line" +resolved_reference = "1bbdcc87ff2708b828554b01f7377735098bb1b4" + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] + +[metadata] +lock-version = "2.0" +python-versions = "^3.8" +content-hash = "bef0d7ca921978b14b224de50077832ba7357382b7adb4affdd000e9bdf04283" diff --git a/pyproject.toml b/pyproject.toml index 1403ac6..fe17009 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ packages = [{include = "falkordb"}] [tool.poetry.dependencies] python = "^3.8" -redis = {git = "https://github.com/redis/redis-py", rev = "master"} +redis = {git = "https://github.com/dudizimber/redis-py", rev = "3342-add-hostname-to-parse-node-line"} [tool.poetry.group.test.dependencies] pytest-cov = ">=4.1,<6.0" From e5cfe802c538bee737d1fa55b6fc2022834f8cae Mon Sep 17 00:00:00 2001 From: muhammad Date: Sun, 8 Sep 2024 19:58:44 +0300 Subject: [PATCH 04/27] for testing --- falkordb/cluster.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/falkordb/cluster.py b/falkordb/cluster.py index da6fd4e..5939aab 100644 --- a/falkordb/cluster.py +++ b/falkordb/cluster.py @@ -14,5 +14,5 @@ def Cluster_Conn(conn, ssl): connection_kwargs = conn.connection_pool.connection_kwargs username = connection_kwargs['username'] password = connection_kwargs['password'] - return RedisCluster(Retry(default_backoff(),6),cluster_error_retry_attempts=6,startup_nodes=nodes,username=username,password=password,ssl=ssl) + return RedisCluster(Retry(default_backoff(),20),cluster_error_retry_attempts=6,startup_nodes=nodes,username=username,password=password,ssl=ssl) From 377fae27f034f383af28ae7fa5a4baf332f68f80 Mon Sep 17 00:00:00 2001 From: muhammad Date: Sun, 8 Sep 2024 21:29:57 +0300 Subject: [PATCH 05/27] lowered retries --- falkordb/cluster.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/falkordb/cluster.py b/falkordb/cluster.py index 5939aab..da6fd4e 100644 --- a/falkordb/cluster.py +++ b/falkordb/cluster.py @@ -14,5 +14,5 @@ def Cluster_Conn(conn, ssl): connection_kwargs = conn.connection_pool.connection_kwargs username = connection_kwargs['username'] password = connection_kwargs['password'] - return RedisCluster(Retry(default_backoff(),20),cluster_error_retry_attempts=6,startup_nodes=nodes,username=username,password=password,ssl=ssl) + return RedisCluster(Retry(default_backoff(),6),cluster_error_retry_attempts=6,startup_nodes=nodes,username=username,password=password,ssl=ssl) From eef67b87a37d6d0fd9643af45be14469bc077f4d Mon Sep 17 00:00:00 2001 From: muhammad Date: Sun, 8 Sep 2024 22:19:18 +0300 Subject: [PATCH 06/27] updated retry times --- falkordb/cluster.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/falkordb/cluster.py b/falkordb/cluster.py index da6fd4e..5c47fa6 100644 --- a/falkordb/cluster.py +++ b/falkordb/cluster.py @@ -14,5 +14,5 @@ def Cluster_Conn(conn, ssl): connection_kwargs = conn.connection_pool.connection_kwargs username = connection_kwargs['username'] password = connection_kwargs['password'] - return RedisCluster(Retry(default_backoff(),6),cluster_error_retry_attempts=6,startup_nodes=nodes,username=username,password=password,ssl=ssl) + return RedisCluster(Retry(default_backoff(),6),cluster_error_retry_attempts=20,startup_nodes=nodes,username=username,password=password,ssl=ssl) From e65ee269b47aba157aaff8f8cfe5ce7e5a624552 Mon Sep 17 00:00:00 2001 From: muhammad Date: Mon, 9 Sep 2024 09:31:48 +0300 Subject: [PATCH 07/27] lowered retries --- falkordb/cluster.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/falkordb/cluster.py b/falkordb/cluster.py index 5c47fa6..da6fd4e 100644 --- a/falkordb/cluster.py +++ b/falkordb/cluster.py @@ -14,5 +14,5 @@ def Cluster_Conn(conn, ssl): connection_kwargs = conn.connection_pool.connection_kwargs username = connection_kwargs['username'] password = connection_kwargs['password'] - return RedisCluster(Retry(default_backoff(),6),cluster_error_retry_attempts=20,startup_nodes=nodes,username=username,password=password,ssl=ssl) + return RedisCluster(Retry(default_backoff(),6),cluster_error_retry_attempts=6,startup_nodes=nodes,username=username,password=password,ssl=ssl) From 97bbe4a8865d8381d22c6e5b27ed0ac162ec06b1 Mon Sep 17 00:00:00 2001 From: muhammad Date: Tue, 10 Sep 2024 12:03:56 +0300 Subject: [PATCH 08/27] insane retry count --- falkordb/cluster.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/falkordb/cluster.py b/falkordb/cluster.py index da6fd4e..e5662a2 100644 --- a/falkordb/cluster.py +++ b/falkordb/cluster.py @@ -14,5 +14,5 @@ def Cluster_Conn(conn, ssl): connection_kwargs = conn.connection_pool.connection_kwargs username = connection_kwargs['username'] password = connection_kwargs['password'] - return RedisCluster(Retry(default_backoff(),6),cluster_error_retry_attempts=6,startup_nodes=nodes,username=username,password=password,ssl=ssl) + return RedisCluster(Retry(default_backoff(),20),cluster_error_retry_attempts=20,startup_nodes=nodes,username=username,password=password,ssl=ssl) From 0e79477de00e77557113a52d05a15a920f5b80af Mon Sep 17 00:00:00 2001 From: muhammad Date: Wed, 11 Sep 2024 12:45:00 +0300 Subject: [PATCH 09/27] changed dependenct to debug --- poetry.lock | 8 ++++---- pyproject.toml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/poetry.lock b/poetry.lock index 9d14fdf..4c0d4bc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -236,9 +236,9 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==23.2.1)", "requests (>=2.31.0)" [package.source] type = "git" -url = "https://github.com/dudizimber/redis-py" -reference = "3342-add-hostname-to-parse-node-line" -resolved_reference = "1bbdcc87ff2708b828554b01f7377735098bb1b4" +url = "https://github.com/MuhammadQadora/redis-py" +reference = "master" +resolved_reference = "2b98f76ac5e952e05dcddc5b806b4a2dbcdb8ba2" [[package]] name = "tomli" @@ -254,4 +254,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "bef0d7ca921978b14b224de50077832ba7357382b7adb4affdd000e9bdf04283" +content-hash = "e769fed0b9f0c57092d56dc3ff94cdb52e5f02bfddb2c8ff647807f671fcaff6" diff --git a/pyproject.toml b/pyproject.toml index fe17009..d22eb3a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ packages = [{include = "falkordb"}] [tool.poetry.dependencies] python = "^3.8" -redis = {git = "https://github.com/dudizimber/redis-py", rev = "3342-add-hostname-to-parse-node-line"} +redis = {git = "https://github.com/MuhammadQadora/redis-py", rev = "master"} [tool.poetry.group.test.dependencies] pytest-cov = ">=4.1,<6.0" From 98719f67a12b6d99a9392a5c092ed4b46fb31285 Mon Sep 17 00:00:00 2001 From: muhammad Date: Wed, 11 Sep 2024 17:55:07 +0300 Subject: [PATCH 10/27] reduced retry count --- falkordb/cluster.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/falkordb/cluster.py b/falkordb/cluster.py index e5662a2..da6fd4e 100644 --- a/falkordb/cluster.py +++ b/falkordb/cluster.py @@ -14,5 +14,5 @@ def Cluster_Conn(conn, ssl): connection_kwargs = conn.connection_pool.connection_kwargs username = connection_kwargs['username'] password = connection_kwargs['password'] - return RedisCluster(Retry(default_backoff(),20),cluster_error_retry_attempts=20,startup_nodes=nodes,username=username,password=password,ssl=ssl) + return RedisCluster(Retry(default_backoff(),6),cluster_error_retry_attempts=6,startup_nodes=nodes,username=username,password=password,ssl=ssl) From f65ce34f0654b54d45941e80ab9664b9425ac0ef Mon Sep 17 00:00:00 2001 From: muhammad Date: Wed, 11 Sep 2024 18:32:22 +0300 Subject: [PATCH 11/27] updated dependency --- poetry.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/poetry.lock b/poetry.lock index 4c0d4bc..26fb199 100644 --- a/poetry.lock +++ b/poetry.lock @@ -238,7 +238,7 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==23.2.1)", "requests (>=2.31.0)" type = "git" url = "https://github.com/MuhammadQadora/redis-py" reference = "master" -resolved_reference = "2b98f76ac5e952e05dcddc5b806b4a2dbcdb8ba2" +resolved_reference = "99e39b6dc1d0a32c20a1d4b8fe559286b6d87b0a" [[package]] name = "tomli" From f623557f6d529ff092078e01bfa0f236e119e48f Mon Sep 17 00:00:00 2001 From: muhammad Date: Mon, 16 Sep 2024 11:34:38 +0300 Subject: [PATCH 12/27] updated retry attempts --- falkordb/cluster.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/falkordb/cluster.py b/falkordb/cluster.py index da6fd4e..5c47fa6 100644 --- a/falkordb/cluster.py +++ b/falkordb/cluster.py @@ -14,5 +14,5 @@ def Cluster_Conn(conn, ssl): connection_kwargs = conn.connection_pool.connection_kwargs username = connection_kwargs['username'] password = connection_kwargs['password'] - return RedisCluster(Retry(default_backoff(),6),cluster_error_retry_attempts=6,startup_nodes=nodes,username=username,password=password,ssl=ssl) + return RedisCluster(Retry(default_backoff(),6),cluster_error_retry_attempts=20,startup_nodes=nodes,username=username,password=password,ssl=ssl) From 427ef70f47387a6504a1b158972823ef0a974191 Mon Sep 17 00:00:00 2001 From: Qadora <110588924+MuhammadQadora@users.noreply.github.com> Date: Tue, 17 Sep 2024 14:02:47 +0300 Subject: [PATCH 13/27] Update falkordb.py From 523ff53957c1b45d67989e1bed82cfb562cfa388 Mon Sep 17 00:00:00 2001 From: Qadora <110588924+MuhammadQadora@users.noreply.github.com> Date: Tue, 17 Sep 2024 14:03:10 +0300 Subject: [PATCH 14/27] Update cluster.py --- falkordb/cluster.py | 47 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/falkordb/cluster.py b/falkordb/cluster.py index 5c47fa6..a13e28e 100644 --- a/falkordb/cluster.py +++ b/falkordb/cluster.py @@ -1,6 +1,4 @@ -from redis.cluster import RedisCluster, ClusterNode -from redis.retry import Retry -from redis.backoff import default_backoff +from redis.cluster import RedisCluster # detect if a connection is a sentinel def Is_Cluster(conn): @@ -9,10 +7,43 @@ def Is_Cluster(conn): # create a cluster connection from a Redis connection def Cluster_Conn(conn, ssl): - info = conn.execute_command("CLUSTER NODES") - nodes = [ ClusterNode(v['hostname'],k.split(':')[1]) for k,v in info.items()] connection_kwargs = conn.connection_pool.connection_kwargs - username = connection_kwargs['username'] - password = connection_kwargs['password'] - return RedisCluster(Retry(default_backoff(),6),cluster_error_retry_attempts=20,startup_nodes=nodes,username=username,password=password,ssl=ssl) + host = connection_kwargs.pop("host") + port = connection_kwargs.pop("port") + username = connection_kwargs.pop("username") + password = connection_kwargs.pop("password") + startup_nodes = connection_kwargs.pop("startup_nodes", None) + cluster_error_retry_attempts = connection_kwargs.pop("cluster_error_retry_attempts", 3) + retry = connection_kwargs.pop("retry", None) + retry_on_timeout = connection_kwargs.pop("retry_on_timeout", None) + retry_on_error = connection_kwargs.pop("retry_on_error", [ + ConnectionError, + TimeoutError, + ConnectionRefusedError, + ]) + require_full_coverage = connection_kwargs.pop("require_full_coverage", None) + reinitialize_steps = connection_kwargs.pop("reinitialize_steps", None) + read_from_replicas = connection_kwargs.pop("read_from_replicas", None) + dynamic_startup_nodes = connection_kwargs.pop("dynamic_startup_nodes", None) + url = connection_kwargs.pop("url", None) + address_remap = connection_kwargs.pop("address_remap", None) + + return RedisCluster( + host=host, + port=port, + username=username, + password=password, + ssl=ssl, + retry=retry, + retry_on_timeout=retry_on_timeout, + retry_on_error=retry_on_error, + require_full_coverage=require_full_coverage, + reinitialize_steps=reinitialize_steps, + read_from_replicas=read_from_replicas, + dynamic_startup_nodes=dynamic_startup_nodes, + url=url, + address_remap=address_remap, + startup_nodes=startup_nodes, + cluster_error_retry_attempts=cluster_error_retry_attempts, + ) From 8509151dd14a61a72c0bf88bfc8f7d07052f8da5 Mon Sep 17 00:00:00 2001 From: Qadora <110588924+MuhammadQadora@users.noreply.github.com> Date: Tue, 17 Sep 2024 14:05:48 +0300 Subject: [PATCH 15/27] Update pyproject.toml --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index d22eb3a..1403ac6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ packages = [{include = "falkordb"}] [tool.poetry.dependencies] python = "^3.8" -redis = {git = "https://github.com/MuhammadQadora/redis-py", rev = "master"} +redis = {git = "https://github.com/redis/redis-py", rev = "master"} [tool.poetry.group.test.dependencies] pytest-cov = ">=4.1,<6.0" From 09c969a05e0ea744793e967b8750e15bc8e07dc8 Mon Sep 17 00:00:00 2001 From: Qadora <110588924+MuhammadQadora@users.noreply.github.com> Date: Tue, 17 Sep 2024 14:10:00 +0300 Subject: [PATCH 16/27] Update cluster.py --- falkordb/cluster.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/falkordb/cluster.py b/falkordb/cluster.py index a13e28e..a184084 100644 --- a/falkordb/cluster.py +++ b/falkordb/cluster.py @@ -23,7 +23,7 @@ def Cluster_Conn(conn, ssl): ConnectionRefusedError, ]) require_full_coverage = connection_kwargs.pop("require_full_coverage", None) - reinitialize_steps = connection_kwargs.pop("reinitialize_steps", None) + reinitialize_steps = connection_kwargs.pop("reinitialize_steps", 5) read_from_replicas = connection_kwargs.pop("read_from_replicas", None) dynamic_startup_nodes = connection_kwargs.pop("dynamic_startup_nodes", None) url = connection_kwargs.pop("url", None) From da4512124924346dd3358164562e44564aa0471a Mon Sep 17 00:00:00 2001 From: Qadora <110588924+MuhammadQadora@users.noreply.github.com> Date: Thu, 19 Sep 2024 13:37:02 +0300 Subject: [PATCH 17/27] Update falkordb.py --- falkordb/falkordb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/falkordb/falkordb.py b/falkordb/falkordb.py index 9d3df80..e6dd041 100644 --- a/falkordb/falkordb.py +++ b/falkordb/falkordb.py @@ -100,7 +100,7 @@ def __init__( if Is_Sentinel(conn): self.sentinel, self.service_name = Sentinel_Conn(conn, ssl) - conn = self.sentinel.master_for(self.service_name, ssl=ssl) + conn = self.sentinel.master_for(self.service_name, ssl=ssl, retry=retry) if Is_Cluster(conn): conn = Cluster_Conn(conn, ssl) From 14580bc8e7df11db860502078bde2e82678e5329 Mon Sep 17 00:00:00 2001 From: muhammad Date: Thu, 19 Sep 2024 13:44:56 +0300 Subject: [PATCH 18/27] changed dependenc --- poetry.lock | 6 +++--- pyproject.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 26fb199..c25da5a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -236,9 +236,9 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==23.2.1)", "requests (>=2.31.0)" [package.source] type = "git" -url = "https://github.com/MuhammadQadora/redis-py" +url = "https://github.com/dudizimber/redis-py" reference = "master" -resolved_reference = "99e39b6dc1d0a32c20a1d4b8fe559286b6d87b0a" +resolved_reference = "7d73d742d6df4b3d6f6a1f0ec73e72d4a02add74" [[package]] name = "tomli" @@ -254,4 +254,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "e769fed0b9f0c57092d56dc3ff94cdb52e5f02bfddb2c8ff647807f671fcaff6" +content-hash = "90114369fecfefd171623167bcb8ffc1e74afa306a89a00fcf2da2839ba63dc1" diff --git a/pyproject.toml b/pyproject.toml index d22eb3a..7f81a85 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ packages = [{include = "falkordb"}] [tool.poetry.dependencies] python = "^3.8" -redis = {git = "https://github.com/MuhammadQadora/redis-py", rev = "master"} +redis = {git = "https://github.com/dudizimber/redis-py", rev = "master"} [tool.poetry.group.test.dependencies] pytest-cov = ">=4.1,<6.0" From c074f7052774b833fb9c1551021df0da74a47145 Mon Sep 17 00:00:00 2001 From: Qadora <110588924+MuhammadQadora@users.noreply.github.com> Date: Thu, 19 Sep 2024 13:48:38 +0300 Subject: [PATCH 19/27] Update falkordb.py --- falkordb/falkordb.py | 214 +++++++++++++++++++++++++------------------ 1 file changed, 125 insertions(+), 89 deletions(-) diff --git a/falkordb/falkordb.py b/falkordb/falkordb.py index e6dd041..b8a1aa1 100644 --- a/falkordb/falkordb.py +++ b/falkordb/falkordb.py @@ -5,10 +5,11 @@ from typing import List, Union # config command -LIST_CMD = "GRAPH.LIST" +LIST_CMD = "GRAPH.LIST" CONFIG_CMD = "GRAPH.CONFIG" -class FalkorDB(): + +class FalkorDB: """ FalkorDB Class for interacting with a FalkorDB server. @@ -25,88 +26,121 @@ class FalkorDB(): """ def __init__( - self, - host='localhost', - port=6379, - password=None, - socket_timeout=None, - socket_connect_timeout=None, - socket_keepalive=None, - socket_keepalive_options=None, - connection_pool=None, - unix_socket_path=None, - encoding='utf-8', - encoding_errors='strict', - charset=None, - errors=None, - retry_on_timeout=False, - retry_on_error=None, - ssl=False, - ssl_keyfile=None, - ssl_certfile=None, - ssl_cert_reqs='required', - ssl_ca_certs=None, - ssl_ca_path=None, - ssl_ca_data=None, - ssl_check_hostname=False, - ssl_password=None, - ssl_validate_ocsp=False, - ssl_validate_ocsp_stapled=False, - ssl_ocsp_context=None, - ssl_ocsp_expected_cert=None, - max_connections=None, - single_connection_client=False, - health_check_interval=0, - client_name=None, - lib_name='FalkorDB', - lib_version='1.0.0', - username=None, - retry=None, - connect_func=None, - credential_provider=None, - protocol=2 - ): - - conn = redis.Redis(host=host, port=port, db=0, password=password, - socket_timeout=socket_timeout, - socket_connect_timeout=socket_connect_timeout, - socket_keepalive=socket_keepalive, - socket_keepalive_options=socket_keepalive_options, - connection_pool=connection_pool, - unix_socket_path=unix_socket_path, - encoding=encoding, encoding_errors=encoding_errors, - charset=charset, errors=errors, - decode_responses=True, - retry_on_timeout=retry_on_timeout, - retry_on_error=retry_on_error, ssl=ssl, - ssl_keyfile=ssl_keyfile, ssl_certfile=ssl_certfile, - ssl_cert_reqs=ssl_cert_reqs, - ssl_ca_certs=ssl_ca_certs, ssl_ca_path=ssl_ca_path, - ssl_ca_data=ssl_ca_data, - ssl_check_hostname=ssl_check_hostname, - ssl_password=ssl_password, - ssl_validate_ocsp=ssl_validate_ocsp, - ssl_validate_ocsp_stapled=ssl_validate_ocsp_stapled, - ssl_ocsp_context=ssl_ocsp_context, - ssl_ocsp_expected_cert=ssl_ocsp_expected_cert, - max_connections=max_connections, - single_connection_client=single_connection_client, - health_check_interval=health_check_interval, - client_name=client_name, lib_name=lib_name, - lib_version=lib_version, username=username, - retry=retry, redis_connect_func=connect_func, - credential_provider=credential_provider, - protocol=protocol) + self, + host="localhost", + port=6379, + password=None, + socket_timeout=None, + socket_connect_timeout=None, + socket_keepalive=None, + socket_keepalive_options=None, + connection_pool=None, + unix_socket_path=None, + encoding="utf-8", + encoding_errors="strict", + charset=None, + errors=None, + retry_on_timeout=False, + retry_on_error=None, + ssl=False, + ssl_keyfile=None, + ssl_certfile=None, + ssl_cert_reqs="required", + ssl_ca_certs=None, + ssl_ca_path=None, + ssl_ca_data=None, + ssl_check_hostname=False, + ssl_password=None, + ssl_validate_ocsp=False, + ssl_validate_ocsp_stapled=False, + ssl_ocsp_context=None, + ssl_ocsp_expected_cert=None, + max_connections=None, + single_connection_client=False, + health_check_interval=0, + client_name=None, + lib_name="FalkorDB", + lib_version="1.0.0", + username=None, + retry=None, + connect_func=None, + credential_provider=None, + protocol=2, + # FalkorDB Cluster Params + cluster_error_retry_attempts=3, + startup_nodes=None, + require_full_coverage=False, + reinitialize_steps=5, + read_from_replicas=False, + dynamic_startup_nodes=True, + url=None, + address_remap=None, + ): + + conn = redis.Redis( + host=host, + port=port, + db=0, + password=password, + socket_timeout=socket_timeout, + socket_connect_timeout=socket_connect_timeout, + socket_keepalive=socket_keepalive, + socket_keepalive_options=socket_keepalive_options, + connection_pool=connection_pool, + unix_socket_path=unix_socket_path, + encoding=encoding, + encoding_errors=encoding_errors, + charset=charset, + errors=errors, + decode_responses=True, + retry_on_timeout=retry_on_timeout, + retry_on_error=retry_on_error, + ssl=ssl, + ssl_keyfile=ssl_keyfile, + ssl_certfile=ssl_certfile, + ssl_cert_reqs=ssl_cert_reqs, + ssl_ca_certs=ssl_ca_certs, + ssl_ca_path=ssl_ca_path, + ssl_ca_data=ssl_ca_data, + ssl_check_hostname=ssl_check_hostname, + ssl_password=ssl_password, + ssl_validate_ocsp=ssl_validate_ocsp, + ssl_validate_ocsp_stapled=ssl_validate_ocsp_stapled, + ssl_ocsp_context=ssl_ocsp_context, + ssl_ocsp_expected_cert=ssl_ocsp_expected_cert, + max_connections=max_connections, + single_connection_client=single_connection_client, + health_check_interval=health_check_interval, + client_name=client_name, + lib_name=lib_name, + lib_version=lib_version, + username=username, + retry=retry, + redis_connect_func=connect_func, + credential_provider=credential_provider, + protocol=protocol, + ) if Is_Sentinel(conn): self.sentinel, self.service_name = Sentinel_Conn(conn, ssl) - conn = self.sentinel.master_for(self.service_name, ssl=ssl, retry=retry) + conn = self.sentinel.master_for(self.service_name, ssl=ssl,retry=retry) if Is_Cluster(conn): - conn = Cluster_Conn(conn, ssl) - - self.connection = conn - self.flushdb = conn.flushdb + conn = Cluster_Conn( + conn, + ssl, + cluster_error_retry_attempts, + startup_nodes, + require_full_coverage, + reinitialize_steps, + read_from_replicas, + dynamic_startup_nodes, + url, + address_remap, + ) + + self.connection = conn + self.flushdb = conn.flushdb self.execute_command = conn.execute_command @classmethod @@ -129,18 +163,18 @@ def from_url(cls, url: str, **kwargs) -> "FalkorDB": """ # switch from redis:// to falkordb:// - if url.startswith('falkor://'): - url = 'redis://' + url[len('falkor://'):] - elif url.startswith('falkors://'): - url = 'rediss://' + url[len('falkors://'):] + if url.startswith("falkor://"): + url = "redis://" + url[len("falkor://") :] + elif url.startswith("falkors://"): + url = "rediss://" + url[len("falkors://") :] conn = redis.from_url(url, **kwargs) connection_kwargs = conn.connection_pool.connection_kwargs - kwargs['host'] = connection_kwargs.get('host', 'localhost') - kwargs['port'] = connection_kwargs.get('port', 6379) - kwargs['username'] = connection_kwargs.get('username') - kwargs['password'] = connection_kwargs.get('password') + kwargs["host"] = connection_kwargs.get("host", "localhost") + kwargs["port"] = connection_kwargs.get("port", 6379) + kwargs["username"] = connection_kwargs.get("username") + kwargs["password"] = connection_kwargs.get("password") # Initialize a FalkorDB instance using the updated kwargs db = cls(**kwargs) @@ -158,7 +192,9 @@ def select_graph(self, graph_id: str) -> Graph: Graph: A new Graph instance associated with the selected graph. """ if not isinstance(graph_id, str) or graph_id == "": - raise TypeError(f"Expected a string parameter, but received {type(graph_id)}.") + raise TypeError( + f"Expected a string parameter, but received {type(graph_id)}." + ) return Graph(self, graph_id) @@ -167,7 +203,7 @@ def list_graphs(self) -> List[str]: Lists all graph names. See: https://docs.falkordb.com/commands/graph.list.html - Returns: + Returns: List: List of graph names. """ From adbbadac58f65436e3b6dab051f881b2d0c99d55 Mon Sep 17 00:00:00 2001 From: Qadora <110588924+MuhammadQadora@users.noreply.github.com> Date: Thu, 19 Sep 2024 13:48:55 +0300 Subject: [PATCH 20/27] Update cluster.py --- falkordb/cluster.py | 50 +++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/falkordb/cluster.py b/falkordb/cluster.py index a184084..b8ec5db 100644 --- a/falkordb/cluster.py +++ b/falkordb/cluster.py @@ -1,39 +1,49 @@ from redis.cluster import RedisCluster +import redis.exceptions as redis_exceptions +import socket # detect if a connection is a sentinel def Is_Cluster(conn): info = conn.info(section="server") return "redis_mode" in info and info["redis_mode"] == "cluster" + # create a cluster connection from a Redis connection -def Cluster_Conn(conn, ssl): +def Cluster_Conn( + conn, + ssl, + cluster_error_retry_attempts=3, + startup_nodes=None, + require_full_coverage=False, + reinitialize_steps=5, + read_from_replicas=False, + dynamic_startup_nodes=True, + url=None, + address_remap=None, +): connection_kwargs = conn.connection_pool.connection_kwargs host = connection_kwargs.pop("host") - port = connection_kwargs.pop("port") + port = connection_kwargs.pop("port") username = connection_kwargs.pop("username") password = connection_kwargs.pop("password") - startup_nodes = connection_kwargs.pop("startup_nodes", None) - cluster_error_retry_attempts = connection_kwargs.pop("cluster_error_retry_attempts", 3) retry = connection_kwargs.pop("retry", None) retry_on_timeout = connection_kwargs.pop("retry_on_timeout", None) - retry_on_error = connection_kwargs.pop("retry_on_error", [ - ConnectionError, - TimeoutError, - ConnectionRefusedError, - ]) - require_full_coverage = connection_kwargs.pop("require_full_coverage", None) - reinitialize_steps = connection_kwargs.pop("reinitialize_steps", 5) - read_from_replicas = connection_kwargs.pop("read_from_replicas", None) - dynamic_startup_nodes = connection_kwargs.pop("dynamic_startup_nodes", None) - url = connection_kwargs.pop("url", None) - address_remap = connection_kwargs.pop("address_remap", None) - + retry_on_error = connection_kwargs.pop( + "retry_on_error", + [ + ConnectionRefusedError, + ConnectionError, + TimeoutError, + socket.timeout, + redis_exceptions.ConnectionError, + ], + ) return RedisCluster( - host=host, - port=port, - username=username, - password=password, + host=host, + port=port, + username=username, + password=password, ssl=ssl, retry=retry, retry_on_timeout=retry_on_timeout, From 670e908a90942314fe83d14ddebaa3067039786a Mon Sep 17 00:00:00 2001 From: muhammad Date: Wed, 25 Sep 2024 16:19:29 +0300 Subject: [PATCH 21/27] changed dependenc --- poetry.lock | 6 +++--- pyproject.toml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index c25da5a..20428e0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -236,9 +236,9 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==23.2.1)", "requests (>=2.31.0)" [package.source] type = "git" -url = "https://github.com/dudizimber/redis-py" +url = "https://github.com/MuhammadQadora/redis-py" reference = "master" -resolved_reference = "7d73d742d6df4b3d6f6a1f0ec73e72d4a02add74" +resolved_reference = "084c216a78dfd40eea3faf142450c43efe50af3c" [[package]] name = "tomli" @@ -254,4 +254,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.8" -content-hash = "90114369fecfefd171623167bcb8ffc1e74afa306a89a00fcf2da2839ba63dc1" +content-hash = "e769fed0b9f0c57092d56dc3ff94cdb52e5f02bfddb2c8ff647807f671fcaff6" diff --git a/pyproject.toml b/pyproject.toml index 7f81a85..d22eb3a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ packages = [{include = "falkordb"}] [tool.poetry.dependencies] python = "^3.8" -redis = {git = "https://github.com/dudizimber/redis-py", rev = "master"} +redis = {git = "https://github.com/MuhammadQadora/redis-py", rev = "master"} [tool.poetry.group.test.dependencies] pytest-cov = ">=4.1,<6.0" From d79518980427f2594e774793fcd32ef742b2ee40 Mon Sep 17 00:00:00 2001 From: Qadora <110588924+MuhammadQadora@users.noreply.github.com> Date: Wed, 25 Sep 2024 16:21:47 +0300 Subject: [PATCH 22/27] Update falkordb.py --- falkordb/falkordb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/falkordb/falkordb.py b/falkordb/falkordb.py index b8a1aa1..2763940 100644 --- a/falkordb/falkordb.py +++ b/falkordb/falkordb.py @@ -123,7 +123,7 @@ def __init__( if Is_Sentinel(conn): self.sentinel, self.service_name = Sentinel_Conn(conn, ssl) - conn = self.sentinel.master_for(self.service_name, ssl=ssl,retry=retry) + conn = self.sentinel.master_for(self.service_name, ssl=ssl,retry=retry, socket_connect_timeout=socket_connect_timeout) if Is_Cluster(conn): conn = Cluster_Conn( From d05f64417724c76278f58c4c49fa7c4628086a91 Mon Sep 17 00:00:00 2001 From: Qadora <110588924+MuhammadQadora@users.noreply.github.com> Date: Thu, 26 Sep 2024 16:02:54 +0300 Subject: [PATCH 23/27] Update falkordb.py --- falkordb/falkordb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/falkordb/falkordb.py b/falkordb/falkordb.py index 2763940..b8a1aa1 100644 --- a/falkordb/falkordb.py +++ b/falkordb/falkordb.py @@ -123,7 +123,7 @@ def __init__( if Is_Sentinel(conn): self.sentinel, self.service_name = Sentinel_Conn(conn, ssl) - conn = self.sentinel.master_for(self.service_name, ssl=ssl,retry=retry, socket_connect_timeout=socket_connect_timeout) + conn = self.sentinel.master_for(self.service_name, ssl=ssl,retry=retry) if Is_Cluster(conn): conn = Cluster_Conn( From 343f0c03e855e90fe76e82f28cc3b47a4768f180 Mon Sep 17 00:00:00 2001 From: Qadora <110588924+MuhammadQadora@users.noreply.github.com> Date: Sun, 29 Sep 2024 17:38:29 +0300 Subject: [PATCH 24/27] Update falkordb.py --- falkordb/falkordb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/falkordb/falkordb.py b/falkordb/falkordb.py index b8a1aa1..376b86e 100644 --- a/falkordb/falkordb.py +++ b/falkordb/falkordb.py @@ -123,7 +123,7 @@ def __init__( if Is_Sentinel(conn): self.sentinel, self.service_name = Sentinel_Conn(conn, ssl) - conn = self.sentinel.master_for(self.service_name, ssl=ssl,retry=retry) + conn = self.sentinel.master_for(self.service_name, ssl=ssl,retry=retry, retry_on_error=retry_on_error) if Is_Cluster(conn): conn = Cluster_Conn( From a43db2eea4fc879bf98c74c275d12c4cf7a8cef7 Mon Sep 17 00:00:00 2001 From: Qadora <110588924+MuhammadQadora@users.noreply.github.com> Date: Sun, 13 Oct 2024 12:19:59 +0300 Subject: [PATCH 25/27] Update falkordb.py --- falkordb/falkordb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/falkordb/falkordb.py b/falkordb/falkordb.py index 376b86e..c4b801f 100644 --- a/falkordb/falkordb.py +++ b/falkordb/falkordb.py @@ -123,7 +123,7 @@ def __init__( if Is_Sentinel(conn): self.sentinel, self.service_name = Sentinel_Conn(conn, ssl) - conn = self.sentinel.master_for(self.service_name, ssl=ssl,retry=retry, retry_on_error=retry_on_error) + conn = self.sentinel.master_for(self.service_name, retry=retry, retry_on_error=retry_on_error) if Is_Cluster(conn): conn = Cluster_Conn( From 674c65172015fa4ea6c6d6c468cf72bc73d09753 Mon Sep 17 00:00:00 2001 From: Qadora <110588924+MuhammadQadora@users.noreply.github.com> Date: Sun, 13 Oct 2024 13:30:45 +0300 Subject: [PATCH 26/27] Update falkordb.py --- falkordb/falkordb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/falkordb/falkordb.py b/falkordb/falkordb.py index c4b801f..beb2d41 100644 --- a/falkordb/falkordb.py +++ b/falkordb/falkordb.py @@ -123,7 +123,7 @@ def __init__( if Is_Sentinel(conn): self.sentinel, self.service_name = Sentinel_Conn(conn, ssl) - conn = self.sentinel.master_for(self.service_name, retry=retry, retry_on_error=retry_on_error) + conn = self.sentinel.master_for(self.service_name, ssl, retry=retry, retry_on_error=retry_on_error) if Is_Cluster(conn): conn = Cluster_Conn( From 4c485b401fd3ee975a152b71e15be28e458e4d55 Mon Sep 17 00:00:00 2001 From: Qadora <110588924+MuhammadQadora@users.noreply.github.com> Date: Sun, 13 Oct 2024 13:36:47 +0300 Subject: [PATCH 27/27] Update falkordb.py --- falkordb/falkordb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/falkordb/falkordb.py b/falkordb/falkordb.py index beb2d41..2ec3a26 100644 --- a/falkordb/falkordb.py +++ b/falkordb/falkordb.py @@ -123,7 +123,7 @@ def __init__( if Is_Sentinel(conn): self.sentinel, self.service_name = Sentinel_Conn(conn, ssl) - conn = self.sentinel.master_for(self.service_name, ssl, retry=retry, retry_on_error=retry_on_error) + conn = self.sentinel.master_for(self.service_name, ssl=ssl , retry=retry, retry_on_error=retry_on_error) if Is_Cluster(conn): conn = Cluster_Conn(