]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Adds support for database number specification
authorTrenton H <797416+stumpylog@users.noreply.github.com>
Fri, 2 Dec 2022 21:54:15 +0000 (13:54 -0800)
committerTrenton H <797416+stumpylog@users.noreply.github.com>
Sat, 3 Dec 2022 16:39:32 +0000 (08:39 -0800)
src/paperless/settings.py
src/paperless/tests/test_settings.py

index eef7344da86bc42f18131a059718c3ba3da3e695..3271ae7e6f2916087d02a9c362adb02d79b8a7f5 100644 (file)
@@ -83,12 +83,21 @@ def _parse_redis_url(env_redis: Optional[str]) -> Tuple[str]:
     if "unix" in env_redis.lower():
         # channels_redis socket format, looks like:
         # "unix:///path/to/redis.sock"
-        return (f"redis+socket:{path}", env_redis)
+        if "?db=" in env_redis:
+            path, number = path.split("?db=")
+            return (f"redis+socket:{path}?virtual_host={number}", env_redis)
+        else:
+            return (f"redis+socket:{path}", env_redis)
 
     elif "+socket" in env_redis.lower():
         # celery socket style, looks like:
         # "redis+socket:///path/to/redis.sock"
-        return (env_redis, f"unix:{path}")
+        if "?virtual_host=" in env_redis:
+            # Virtual host (aka db number)
+            path, number = path.split("?virtual_host=")
+            return (env_redis, f"unix:{path}?db={number}")
+        else:
+            return (env_redis, f"unix:{path}")
 
     # Not a socket
     return (env_redis, env_redis)
index fa839299fad5ec97a57bd02c3a19eb9cb28113e6..346f2d098a45251907e60af424da6134b554e11b 100644 (file)
@@ -97,7 +97,9 @@ class TestIgnoreDateParsing(TestCase):
         """
 
         for input, expected in [
+            # Nothing is set
             (None, ("redis://localhost:6379", "redis://localhost:6379")),
+            # celery style
             (
                 "redis+socket:///run/redis/redis.sock",
                 (
@@ -105,6 +107,7 @@ class TestIgnoreDateParsing(TestCase):
                     "unix:///run/redis/redis.sock",
                 ),
             ),
+            # redis-py / channels-redis style
             (
                 "unix:///run/redis/redis.sock",
                 (
@@ -112,6 +115,22 @@ class TestIgnoreDateParsing(TestCase):
                     "unix:///run/redis/redis.sock",
                 ),
             ),
+            # celery style with db
+            (
+                "redis+socket:///run/redis/redis.sock?virtual_host=5",
+                (
+                    "redis+socket:///run/redis/redis.sock?virtual_host=5",
+                    "unix:///run/redis/redis.sock?db=5",
+                ),
+            ),
+            # redis-py / channels-redis style with db
+            (
+                "unix:///run/redis/redis.sock?db=10",
+                (
+                    "redis+socket:///run/redis/redis.sock?virtual_host=10",
+                    "unix:///run/redis/redis.sock?db=10",
+                ),
+            ),
         ]:
             result = _parse_redis_url(input)
             self.assertTupleEqual(expected, result)