Spaces:
Runtime error
Runtime error
| # https://redis.io/docs/clients/python/ | |
| from redis import Redis | |
| from dotenv import load_dotenv | |
| from uuid import uuid4 | |
| load_dotenv(".env") | |
| import os | |
| import json | |
| from redis.commands.json.path import Path | |
| from typing import TypedDict, List, Tuple, Optional | |
| class User(TypedDict): | |
| username: str | |
| uid: str | |
| class Chat(TypedDict): | |
| patient: str | |
| messages: List[Tuple[str, str]] | |
| def get_client() -> Redis: | |
| client = Redis( | |
| host=os.environ["REDIS_HOST"], | |
| port=os.environ["REDIS_PORT"], | |
| password=os.environ["REDIS_PASSWORD"], | |
| ssl=os.environ.get("REDIS_USE_SSL", "True") == "True", | |
| decode_responses=True | |
| ) | |
| return client | |
| def create_user(client: Redis, user: User): | |
| maybe_user = get_user_by_username(client, user["username"]) | |
| if not maybe_user: | |
| uid = uuid4() | |
| user["uid"] = str(uid) | |
| client.json().set(f"user:by-uid:{uid}", "$", user, nx=True) | |
| client.set(f"user:uuid:by-username:{user['username']}", str(uid), nx=True) | |
| client.json().set(f"chats:by-user-uid:{uid}", "$", []) | |
| else: | |
| print(f"User already existed with username={user['username']}") | |
| def get_user_by_username(client: Redis, username: str) -> Optional[User]: | |
| uid = client.get(f"user:uuid:by-username:{username}") | |
| user = client.json().get(f"user:by-uid:{uid}", "$") | |
| if user: | |
| user = user[0] | |
| return user | |
| def get_user_chat_by_uid(client: Redis, uid: str) -> List[Chat]: | |
| chats = client.json().get(f"chats:by-user-uid:{uid}", "$")[0] | |
| return chats | |
| def add_chat_by_uid(client: Redis, chat: Chat, uid: str): | |
| client.json().arrappend(f"chats:by-user-uid:{uid}", "$", chat) | |
| if __name__ == "__main__": | |
| client = get_client() | |
| user = User(username="foo", uid="afa03747-a9ce-4200-964c-7816ec381fa9") | |
| chat = Chat(patient="foo", messages=[("a", "b"), ("c", "d")]) | |
| create_user(client, user) | |
| user = get_user_by_username(client, user['username']) | |
| print("user", user) | |
| add_chat_by_uid(client, chat, user['uid']) | |
| chats = get_user_chat_by_uid(client, user['uid']) | |
| print(chats) | |