From f8fc5813fe246937e64bc5a34450cc7988d91180 Mon Sep 17 00:00:00 2001 From: zion Date: Sun, 21 Sep 2025 05:43:39 +0600 Subject: [PATCH] add complex chaining example using pipelines with builder pattern --- docs/examples/pipeline_examples.ipynb | 61 +++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/docs/examples/pipeline_examples.ipynb b/docs/examples/pipeline_examples.ipynb index 36ce31d708..72cdab9e38 100644 --- a/docs/examples/pipeline_examples.ipynb +++ b/docs/examples/pipeline_examples.ipynb @@ -156,6 +156,67 @@ "pipe.set(\"a\", \"a value\").set(\"b\", \"b value\").get(\"a\").execute()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here's a slightly more advanced example for chaining complex operations using the builder pattern." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from dataclasses import dataclass\n", + "from typing import Optional\n", + "\n", + "@dataclass\n", + "class User:\n", + " email: str\n", + " username: Optional[str] = None\n", + "\n", + "@dataclass\n", + "class Post:\n", + " title: str\n", + " body: str\n", + " author: Optional[str] = None\n", + "\n", + "class RedisRepository:\n", + " def __init__(self):\n", + " self.pipeline = r.pipeline()\n", + "\n", + " def add_user(self, user: User):\n", + " if not user.username:\n", + " user.username = user.email.split(\"@\")[0]\n", + " self.pipeline.hset(f\"user:{user.username}\", mapping={\"username\": user.username, \"email\": user.email})\n", + " return self\n", + " \n", + " def add_post(self, post: Post):\n", + " self.pipeline.hset(f\"post:#{post.title}#\", mapping={\"title\": post.title, \"body\": post.body, \"author\": post.author})\n", + " if post.author:\n", + " self.pipeline.sadd(f\"user:{post.author}:posts\", f\"post:#{post.title}#\")\n", + " return self\n", + "\n", + " def add_follow(self, follower: str, following: str):\n", + " self.pipeline.sadd(f\"user:{follower}:following\", following)\n", + " self.pipeline.sadd(f\"user:{following}:followers\", follower)\n", + " return self\n", + "\n", + " def execute(self):\n", + " return self.pipeline.execute()\n", + "\n", + "pipe = RedisRepository()\n", + "results = (pipe\n", + " .add_user(User(email=\"alice@example.com\"))\n", + " .add_user(User(email=\"bob@example.com\"))\n", + " .add_follow(\"alice\", \"bob\")\n", + " .add_post(Post(title=\"Hello World\", body=\"I'm using Redis!\", author=\"alice\"))\n", + " .execute()\n", + ")" + ] + }, { "cell_type": "markdown", "metadata": {},