diff options
| author | 2026-04-28 10:45:41 +0200 | |
|---|---|---|
| committer | 2026-04-28 10:45:41 +0200 | |
| commit | b8d5952b83e7601c5df646efd976879f0dbd30c2 (patch) | |
| tree | 6366e383f6fc484e96a7e618015374561452d841 | |
| parent | d93199684f159d59ef62e4c90d16516f6fd9526e (diff) | |
| download | server-2.2.1.tar.gz server-2.2.1.tar.bz2 server-2.2.1.zip | |
Fixed issue with the redis proxy queue not working due to enqueing on the wrong queuev2.2.1
| -rw-r--r-- | pyproject.toml | 2 | ||||
| -rw-r--r-- | ttun_server/proxy_queue.py | 2 | ||||
| -rw-r--r-- | ttun_server/redis.py | 14 | ||||
| -rw-r--r-- | ttun_server/websockets.py | 6 | ||||
| -rw-r--r-- | uv.lock | 43 |
5 files changed, 49 insertions, 18 deletions
diff --git a/pyproject.toml b/pyproject.toml index 28f6fed..a3c3c03 100644 --- a/pyproject.toml +++ b/pyproject.toml | |||
| @@ -5,5 +5,5 @@ requires-python = ">=3.14" | |||
| 5 | dependencies = [ | 5 | dependencies = [ |
| 6 | "starlette~=1.0.0", | 6 | "starlette~=1.0.0", |
| 7 | "uvicorn[standard]~=0.44.0", | 7 | "uvicorn[standard]~=0.44.0", |
| 8 | "redis~=7.4.0", | 8 | "redis[hiredis]~=7.4.0", |
| 9 | ] | 9 | ] |
diff --git a/ttun_server/proxy_queue.py b/ttun_server/proxy_queue.py index c6c8067..cfa0f3c 100644 --- a/ttun_server/proxy_queue.py +++ b/ttun_server/proxy_queue.py | |||
| @@ -109,7 +109,7 @@ class RedisProxyQueue(BaseProxyQueue): | |||
| 109 | async def enqueue(self, message: Message): | 109 | async def enqueue(self, message: Message): |
| 110 | await RedisConnectionPool \ | 110 | await RedisConnectionPool \ |
| 111 | .get_connection() \ | 111 | .get_connection() \ |
| 112 | .publish(self.identifier, json.dumps(message)) | 112 | .publish(f'request_{self.identifier}', json.dumps(message)) |
| 113 | 113 | ||
| 114 | async def dequeue(self) -> Message: | 114 | async def dequeue(self) -> Message: |
| 115 | message = await self.wait_for_message() | 115 | message = await self.wait_for_message() |
diff --git a/ttun_server/redis.py b/ttun_server/redis.py index 18fbca2..fb9ff81 100644 --- a/ttun_server/redis.py +++ b/ttun_server/redis.py | |||
| @@ -1,19 +1,13 @@ | |||
| 1 | import asyncio | ||
| 2 | import os | 1 | import os |
| 3 | from asyncio import get_running_loop | ||
| 4 | 2 | ||
| 5 | from redis.asyncio import ConnectionPool, Redis | 3 | from redis.asyncio import ConnectionPool, Redis |
| 6 | 4 | ||
| 7 | 5 | ||
| 8 | class RedisConnectionPool: | 6 | class RedisConnectionPool: |
| 9 | instance: 'RedisConnectionPool' = None | 7 | _pool: ConnectionPool | None = None |
| 10 | |||
| 11 | def __init__(self): | ||
| 12 | self.pool = ConnectionPool.from_url(os.environ.get('REDIS_URL')) | ||
| 13 | 8 | ||
| 14 | @classmethod | 9 | @classmethod |
| 15 | def get_connection(cls) -> Redis: | 10 | def get_connection(cls) -> Redis: |
| 16 | if cls.instance is None: | 11 | if cls._pool is None: |
| 17 | cls.instance = RedisConnectionPool() | 12 | cls._pool = ConnectionPool.from_url(os.environ.get('REDIS_URL')) |
| 18 | 13 | return Redis(connection_pool=cls._pool) \ No newline at end of file | |
| 19 | return Redis(connection_pool=cls.instance.pool) | ||
diff --git a/ttun_server/websockets.py b/ttun_server/websockets.py index 0800cbc..f80359f 100644 --- a/ttun_server/websockets.py +++ b/ttun_server/websockets.py | |||
| @@ -46,7 +46,7 @@ class WebsocketProxy(WebSocketEndpoint): | |||
| 46 | else: | 46 | else: |
| 47 | yield | 47 | yield |
| 48 | except AssertionError: | 48 | except AssertionError: |
| 49 | pass | 49 | yield None |
| 50 | 50 | ||
| 51 | async def listen_for_messages(self, websocket: WebSocket): | 51 | async def listen_for_messages(self, websocket: WebSocket): |
| 52 | [subdomain, *_] = websocket.url.hostname.split('.') | 52 | [subdomain, *_] = websocket.url.hostname.split('.') |
| @@ -74,9 +74,7 @@ class WebsocketProxy(WebSocketEndpoint): | |||
| 74 | ) | 74 | ) |
| 75 | 75 | ||
| 76 | async with self.proxy(websocket, message) as m: | 76 | async with self.proxy(websocket, message) as m: |
| 77 | type = WebsocketMessageType(m['type']) | 77 | if m is not None and WebsocketMessageType(m['type']) == WebsocketMessageType.ack: |
| 78 | |||
| 79 | if type == WebsocketMessageType.ack: | ||
| 80 | await super().on_connect(websocket) | 78 | await super().on_connect(websocket) |
| 81 | 79 | ||
| 82 | self.websocket_listen_task = asyncio.create_task(self.listen_for_messages(websocket)) | 80 | self.websocket_listen_task = asyncio.create_task(self.listen_for_messages(websocket)) |
| @@ -45,6 +45,40 @@ wheels = [ | |||
| 45 | ] | 45 | ] |
| 46 | 46 | ||
| 47 | [[package]] | 47 | [[package]] |
| 48 | name = "hiredis" | ||
| 49 | version = "3.3.1" | ||
| 50 | source = { registry = "https://pypi.org/simple" } | ||
| 51 | sdist = { url = "https://files.pythonhosted.org/packages/97/d6/9bef6dc3052c168c93fbf7e6c0f2b12c45f0f741a2d30fd919096774343a/hiredis-3.3.1.tar.gz", hash = "sha256:da6f0302360e99d32bc2869772692797ebadd536e1b826d0103c72ba49d38698", size = 89101, upload-time = "2026-03-16T15:21:08.092Z" } | ||
| 52 | wheels = [ | ||
| 53 | { url = "https://files.pythonhosted.org/packages/03/72/0450d6b449da58120c5497346eb707738f8f67b9e60c28a8ef90133fc81f/hiredis-3.3.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:439f9a5cc8f9519ce208a24cdebfa0440fef26aa682a40ba2c92acb10a53f5e0", size = 82112, upload-time = "2026-03-16T15:20:02.865Z" }, | ||
| 54 | { url = "https://files.pythonhosted.org/packages/22/c0/0be33a29bcd463e6cbb0282515dd4d0cdfe33c30c7afc6d4d8c460e23266/hiredis-3.3.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3724f0e58c6ff76fd683429945491de71324ab1bc0ad943a8d68cb0932d24075", size = 46238, upload-time = "2026-03-16T15:20:03.896Z" }, | ||
| 55 | { url = "https://files.pythonhosted.org/packages/62/f2/f999854bfaf3bcbee0f797f24706c182ecfaca825f6a582f6281a6aa97e0/hiredis-3.3.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:29fe35e3c6fe03204e75c86514f452591957a1e06b05d86e10d795455b71c355", size = 41891, upload-time = "2026-03-16T15:20:04.939Z" }, | ||
| 56 | { url = "https://files.pythonhosted.org/packages/f2/c8/cd9ab90fec3a301d864d8ab6167aea387add8e2287969d89cbcd45d6b0e0/hiredis-3.3.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d42f3a13290f89191568fc113d95a3d2c8759cdd8c3672f021d8b7436f909e75", size = 170485, upload-time = "2026-03-16T15:20:06.284Z" }, | ||
| 57 | { url = "https://files.pythonhosted.org/packages/ac/9a/1ddf9ea236a292963146cbaf6722abeb9d503ca47d821267bb8b3b81c4f7/hiredis-3.3.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2afc675b831f7552da41116fffffca4340f387dc03f56d6ec0c7895ab0b59a10", size = 182030, upload-time = "2026-03-16T15:20:07.857Z" }, | ||
| 58 | { url = "https://files.pythonhosted.org/packages/d4/b8/e070a1dbf8a1bbb8814baa0b00836fbe3f10c7af8e11f942cc739c64e062/hiredis-3.3.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4106201cd052d9eabe3cb7b5a24b0fe37307792bda4fcb3cf6ddd72f697828e8", size = 180543, upload-time = "2026-03-16T15:20:09.096Z" }, | ||
| 59 | { url = "https://files.pythonhosted.org/packages/0d/bb/b5f4f98e44626e2446cd8a52ce6cb1fc1c99786b6e2db3bf09cea97b90cd/hiredis-3.3.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8887bf0f31e4b550bd988c8863b527b6587d200653e9375cd91eea2b944b7424", size = 172356, upload-time = "2026-03-16T15:20:10.245Z" }, | ||
| 60 | { url = "https://files.pythonhosted.org/packages/ef/93/73a77b54ba94e82f76d02563c588d8a062513062675f483a033a43015f2c/hiredis-3.3.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1ac7697365dbe45109273b34227fee6826b276ead9a4a007e0877e1d3f0fcf21", size = 166433, upload-time = "2026-03-16T15:20:11.789Z" }, | ||
| 61 | { url = "https://files.pythonhosted.org/packages/f3/c2/1b2dcbe5dc53a46a8cb05bed67d190a7e30bad2ad1f727ebe154dfeededd/hiredis-3.3.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2b6da6e07359107c653a809b3cff2d9ccaeedbafe33c6f16434aef6f53ce4a2b", size = 177220, upload-time = "2026-03-16T15:20:12.991Z" }, | ||
| 62 | { url = "https://files.pythonhosted.org/packages/02/09/f4314cf096552568b5ea785ceb60c424771f4d35a76c410ad39d258f74bc/hiredis-3.3.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:ce334915f5d31048f76a42c607bf26687cf045eb1bc852b7340f09729c6a64fc", size = 170475, upload-time = "2026-03-16T15:20:14.519Z" }, | ||
| 63 | { url = "https://files.pythonhosted.org/packages/b1/2e/3f56e438efc8fc27ed4a3dbad58c0280061466473ec35d8f86c90c841a84/hiredis-3.3.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ee11fd431f83d8a5b29d370b9d79a814d3218d30113bdcd44657e9bdf715fc92", size = 167913, upload-time = "2026-03-16T15:20:15.672Z" }, | ||
| 64 | { url = "https://files.pythonhosted.org/packages/56/34/053e5ee91d6dc478faac661996d1fd4886c5acb7a1b5ac30e7d3c794bb51/hiredis-3.3.1-cp314-cp314-win32.whl", hash = "sha256:e0356561b4a97c83b9ee3de657a41b8d1a1781226853adaf47b550bb988fda6f", size = 21167, upload-time = "2026-03-16T15:20:17.013Z" }, | ||
| 65 | { url = "https://files.pythonhosted.org/packages/ea/33/06776c641d17881a9031e337e81b3b934c38c2adbb83c85062d6b5f83b72/hiredis-3.3.1-cp314-cp314-win_amd64.whl", hash = "sha256:80aba5f85d6227faee628ae28d1c3b69c661806a0636548ac56c68782606454f", size = 23000, upload-time = "2026-03-16T15:20:17.966Z" }, | ||
| 66 | { url = "https://files.pythonhosted.org/packages/dd/5a/94f9a505b2ff5376d4a05fb279b69d89bafa7219dd33f6944026e3e56f80/hiredis-3.3.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:907f7b5501a534030738f0f27459a612d2266fd0507b007bb8f3e6de08167920", size = 83039, upload-time = "2026-03-16T15:20:19.316Z" }, | ||
| 67 | { url = "https://files.pythonhosted.org/packages/93/ae/d3752a8f03a1fca43d402389d2a2d234d3db54c4d1f07f26c1041ca3c5de/hiredis-3.3.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:de94b409f49eb6a588ebdd5872e826caec417cd77c17af0fb94f2128427f1a2a", size = 46703, upload-time = "2026-03-16T15:20:20.401Z" }, | ||
| 68 | { url = "https://files.pythonhosted.org/packages/9f/76/e32c868a2fa23cd82bacaffd38649d938173244a0e717ec1c0c76874dbdd/hiredis-3.3.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:79cd03e7ff550c17758a7520bf437c156d3d4c8bb74214deeafa69cda49c85a4", size = 42379, upload-time = "2026-03-16T15:20:21.705Z" }, | ||
| 69 | { url = "https://files.pythonhosted.org/packages/c9/f6/d687d36a74ce6cf448826cf2e8edfc1eb37cc965308f74eb696aa97c69df/hiredis-3.3.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6ffa7ba2e2da1f806f3181b9730b3e87ba9dbfec884806725d4584055ba3faa6", size = 180311, upload-time = "2026-03-16T15:20:23.037Z" }, | ||
| 70 | { url = "https://files.pythonhosted.org/packages/db/ac/f520dc0066a62a15aa920c7dd0a2028c213f4862d5f901409ae92ee5d785/hiredis-3.3.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ee37fe8cf081b72dea72f96a0ee604f492ec02252eb77dc26ff6eec3f997b580", size = 190488, upload-time = "2026-03-16T15:20:24.357Z" }, | ||
| 71 | { url = "https://files.pythonhosted.org/packages/4d/f5/ae10fff82d0f291e90c41bf10a5d6543a96aae00cccede01bf2b6f7e178d/hiredis-3.3.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:9bfdeff778d3f7ff449ca5922ab773899e7d31e26a576028b06a5e9cf0ed8c34", size = 189210, upload-time = "2026-03-16T15:20:25.51Z" }, | ||
| 72 | { url = "https://files.pythonhosted.org/packages/0f/8f/5be4344e542aa8d349a03d05486c59d9ca26f69c749d11e114bf34b84d50/hiredis-3.3.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:027ce4fabfeff5af5b9869d5524770877f9061d118bc36b85703ae3faf5aad8e", size = 180971, upload-time = "2026-03-16T15:20:26.631Z" }, | ||
| 73 | { url = "https://files.pythonhosted.org/packages/41/a2/29e230226ec2a31f13f8a832fbafe366e263f3b090553ebe49bb4581a7bd/hiredis-3.3.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:dcea8c3f53674ae68e44b12e853b844a1d315250ca6677b11ec0c06aff85e86c", size = 175314, upload-time = "2026-03-16T15:20:27.848Z" }, | ||
| 74 | { url = "https://files.pythonhosted.org/packages/89/2e/bf241707ad86b9f3ebfbc7ab89e19d5ec243ff92ca77644a383622e8740b/hiredis-3.3.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0b5ff2f643f4b452b0597b7fe6aa35d398cb31d8806801acfafb1558610ea2aa", size = 185652, upload-time = "2026-03-16T15:20:29.364Z" }, | ||
| 75 | { url = "https://files.pythonhosted.org/packages/d0/c1/b39170d8bcccd01febd45af4ac6b43ff38e134a868e2ec167a82a036fb35/hiredis-3.3.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:3586c8a5f56d34b9dddaaa9e76905f31933cac267251006adf86ec0eef7d0400", size = 179033, upload-time = "2026-03-16T15:20:30.549Z" }, | ||
| 76 | { url = "https://files.pythonhosted.org/packages/b7/3a/4fe39a169115434f911abff08ff485b9b6201c168500e112b3f6a8110c0a/hiredis-3.3.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a110d19881ca78a88583d3b07231e7c6864864f5f1f3491b638863ea45fa8708", size = 176126, upload-time = "2026-03-16T15:20:31.958Z" }, | ||
| 77 | { url = "https://files.pythonhosted.org/packages/44/99/c1d0b0bc4f9e9150e24beb0dca2e186e32d5e749d0022e0d26453749ed51/hiredis-3.3.1-cp314-cp314t-win32.whl", hash = "sha256:98fd5b39410e9d69e10e90d0330e35650becaa5dd2548f509b9598f1f3c6124d", size = 22028, upload-time = "2026-03-16T15:20:33.33Z" }, | ||
| 78 | { url = "https://files.pythonhosted.org/packages/35/d6/191e6741addc97bcf5e755661f8c82f0fd0aa35f07ece56e858da689b57e/hiredis-3.3.1-cp314-cp314t-win_amd64.whl", hash = "sha256:ab1f646ff531d70bfd25f01e60708dfa3d105eb458b7dedd9fe9a443039fd809", size = 23811, upload-time = "2026-03-16T15:20:34.292Z" }, | ||
| 79 | ] | ||
| 80 | |||
| 81 | [[package]] | ||
| 48 | name = "httptools" | 82 | name = "httptools" |
| 49 | version = "0.7.1" | 83 | version = "0.7.1" |
| 50 | source = { registry = "https://pypi.org/simple" } | 84 | source = { registry = "https://pypi.org/simple" } |
| @@ -112,6 +146,11 @@ wheels = [ | |||
| 112 | { url = "https://files.pythonhosted.org/packages/74/3a/95deec7db1eb53979973ebd156f3369a72732208d1391cd2e5d127062a32/redis-7.4.0-py3-none-any.whl", hash = "sha256:a9c74a5c893a5ef8455a5adb793a31bb70feb821c86eccb62eebef5a19c429ec", size = 409772, upload-time = "2026-03-24T09:14:35.968Z" }, | 146 | { url = "https://files.pythonhosted.org/packages/74/3a/95deec7db1eb53979973ebd156f3369a72732208d1391cd2e5d127062a32/redis-7.4.0-py3-none-any.whl", hash = "sha256:a9c74a5c893a5ef8455a5adb793a31bb70feb821c86eccb62eebef5a19c429ec", size = 409772, upload-time = "2026-03-24T09:14:35.968Z" }, |
| 113 | ] | 147 | ] |
| 114 | 148 | ||
| 149 | [package.optional-dependencies] | ||
| 150 | hiredis = [ | ||
| 151 | { name = "hiredis" }, | ||
| 152 | ] | ||
| 153 | |||
| 115 | [[package]] | 154 | [[package]] |
| 116 | name = "starlette" | 155 | name = "starlette" |
| 117 | version = "1.0.0" | 156 | version = "1.0.0" |
| @@ -129,14 +168,14 @@ name = "ttun-server" | |||
| 129 | version = "0.1.0" | 168 | version = "0.1.0" |
| 130 | source = { virtual = "." } | 169 | source = { virtual = "." } |
| 131 | dependencies = [ | 170 | dependencies = [ |
| 132 | { name = "redis" }, | 171 | { name = "redis", extra = ["hiredis"] }, |
| 133 | { name = "starlette" }, | 172 | { name = "starlette" }, |
| 134 | { name = "uvicorn", extra = ["standard"] }, | 173 | { name = "uvicorn", extra = ["standard"] }, |
| 135 | ] | 174 | ] |
| 136 | 175 | ||
| 137 | [package.metadata] | 176 | [package.metadata] |
| 138 | requires-dist = [ | 177 | requires-dist = [ |
| 139 | { name = "redis", specifier = "~=7.4.0" }, | 178 | { name = "redis", extras = ["hiredis"], specifier = "~=7.4.0" }, |
| 140 | { name = "starlette", specifier = "~=1.0.0" }, | 179 | { name = "starlette", specifier = "~=1.0.0" }, |
| 141 | { name = "uvicorn", extras = ["standard"], specifier = "~=0.44.0" }, | 180 | { name = "uvicorn", extras = ["standard"], specifier = "~=0.44.0" }, |
| 142 | ] | 181 | ] |
