Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add optional redis caching #26

Merged
merged 12 commits into from
Feb 19, 2024
Prev Previous commit
Next Next commit
Add logic to use a redis db client
  • Loading branch information
syeopite committed Feb 14, 2024
commit e9bf358dcc42011bfaab95df1769b1d1b02b3ed3
13 changes: 10 additions & 3 deletions config.example.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,14 @@
# real_ip_header =
# proxies_count =

# Controls redis cache options
# Ignore to disable the cache
#
# [cache]
# # url =

# Controls behaviors pertaining to the way Priviblur requests Tumblr
[priviblur_backend]
# [priviblur_backend]
# # Timeout for requests to Tumblr's API
# main_response_timeout = 10

Expand All @@ -31,7 +37,7 @@
#
# Use Python's numerical logging levels
# https://docs.python.org/3/howto/logging.html#logging-levels
[logging]
# [logging]
# # Sanic (Server)'s logging level'
# sanic_logging_level = 30

Expand All @@ -41,6 +47,7 @@
# # Priviblur extractor's logging level
# priviblur_extractor_logging_level = 20

[misc]

# [misc]
# # Enable sanic's dev mode
# dev_mode = false
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ multidict==6.0.5
npf_renderer==0.12.0
orjson==3.9.13
PyYAML==6.0.1
redis==5.0.1
sanic==23.12.1
sanic-ext==23.12.0
sanic-routing==23.12.0
Expand Down
5 changes: 4 additions & 1 deletion src/config/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

from typing import NamedTuple

from . import deployment, priviblur_backend, logging_config, misc
from . import deployment, priviblur_backend, cache_config, logging_config, misc


class PriviblurConfig(NamedTuple):
Expand All @@ -21,6 +21,7 @@ class PriviblurConfig(NamedTuple):

deployment: deployment.DeploymentConfig
backend: priviblur_backend.PriviblurBackendConfig
cache: cache_config.CacheConfig
logging: logging_config.LoggingConfig
misc: misc.MiscellaneousConfig

Expand All @@ -43,12 +44,14 @@ def load_config(path : str):

deployment_config_values = config.get("deployment", {})
backend_config_values = config.get("priviblur_backend", {})
cache_config_values = config.get("cache", {})
logging_config_values = config.get("logging", {})
miscellaneous_config_values = config.get("misc", {})

return PriviblurConfig(
deployment=deployment.DeploymentConfig(**deployment_config_values),
backend=priviblur_backend.PriviblurBackendConfig(**backend_config_values),
cache=cache_config.CacheConfig(**cache_config_values),
logging=logging_config.LoggingConfig(**logging_config_values),
misc=misc.MiscellaneousConfig(**miscellaneous_config_values)
)
Expand Down
10 changes: 10 additions & 0 deletions src/config/cache_config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from typing import NamedTuple, Optional

class CacheConfig(NamedTuple):
"""NamedTuple that stores configuration values relating to the redis cache

Attributes:
url: to connect to the redis instance
"""

url: Optional[str] = None
13 changes: 9 additions & 4 deletions src/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,12 @@
import gettext
import copy

import sanic
import aiohttp
import orjson
import sanic_ext
import sanic.response
from sanic import Sanic
import babel.numbers
import babel.dates
import redis.asyncio
from npf_renderer import VERSION as NPF_RENDERER_VERSION

from . import routes, priviblur_extractor
Expand All @@ -28,7 +27,7 @@
config = load_config(os.environ.get("PRIVIBLUR_CONFIG_LOCATION", "./config.toml"))

LOG_CONFIG = setup_logging.setup_logging(config.logging)
app = Sanic("Priviblur", loads=orjson.loads, dumps=orjson.dumps, env_prefix="PRIVIBLUR_", log_config=LOG_CONFIG)
app = sanic.Sanic("Priviblur", loads=orjson.loads, dumps=orjson.dumps, env_prefix="PRIVIBLUR_", log_config=LOG_CONFIG)


if config.deployment.forwarded_secret and not app.config.FORWARDED_SECRET:
Expand Down Expand Up @@ -136,6 +135,12 @@ def create_image_client(url, timeout):
timeout=aiohttp.ClientTimeout(priviblur_backend.main_response_timeout)
)

# Initialize database
if cache_url := app.ctx.PRIVIBLUR_CONFIG.cache.url:
app.ctx.CacheDB = redis.from_url(cache_url, protocol=3, decode_responses=True)
else:
app.ctx.CacheDB = None

# Add additional jinja filters and functions


Expand Down