Utilities for the Litestar framework.
Source Code: https://github.com/Alurith/litestar-utils
This package include some utilities I generaly use in my projects:
- Timing Middleware: Basic timing for each request
- Slugify: Basic slugify function with customizable options
- HTTPS Redirect Middleware: Redirect all the incoming requests from
httporwstohttpsorwss.
$ pip install litestar-utilsor
$ poetry add litestar-utilsUse the create_timing_middleware function to create the middleware, the only required argument is emit.
emit must be a callable that accept 2 arguments a Request and a float
from litestar import Litestar, get
from litestar_utils import create_timing_middleware
@get("/")
async def hello_world() -> str:
return "Hello, world!"
@get("/base", exclude_timing=True)
async def base_all() -> str:
return "All your base are belong to us"
app = Litestar(
[hello_world, base_all],
middleware=[create_timing_middleware(emit=print)],
)Use the SlugifyOptions class to customize the behaviour.
class SlugifyOptions(BaseModel):
collapse_whitespace: bool = True
disallowed_characters: str = r"[^\w\s-]"
separator: str = "-"
replacements: List = []Simple example:
from litestar_utils import slugify, SlugifyOptions
expected = "this-is-easy"
input_string = "this is easy"
assert slugify(input_string) == expectedDon't collaps whitespaces (default to True):
from litestar_utils import slugify, SlugifyOptions
expected = "should--not---collapse----whitespaces"
input_string = " should not collapse whitespaces "
options = SlugifyOptions(collapse_whitespace=False)
assert slugify(input_string, options=options) == expectedCustom separator (default to -):
from litestar_utils import slugify, SlugifyOptions
expected = "this.is.easy"
input_string = "this is easy"
options = SlugifyOptions(separator=".")
assert slugify(input_string, options=options) == expectedReplacements:
from litestar_utils import slugify, SlugifyOptions
expected = "emailatexmapledotcom"
input_string = "[email protected]"
options = SlugifyOptions(replacements=[("@", "at"), [".", "dot"]])
assert slugify(input_string, options=options) == expectedUse the HTTPSRedirectMiddleware middleware to redirect all the incoming requests from http or ws to https or wss.
Ported from starlette HTTPSRedirectMiddleware
from litestar import Litestar, get
from litestar_utils import HTTPSRedirectMiddleware
@get("/")
async def hello_world() -> str:
return "Hello, world!"
@get("/base", exclude_timing=True)
async def base_all() -> str:
return "All your base are belong to us"
app = Litestar(
[hello_world, base_all],
middleware=[HTTPSRedirectMiddleware],
)