reflex/reflex/constants/route.py
2024-12-13 12:37:34 -08:00

77 lines
2.1 KiB
Python

"""Route constants."""
import re
from types import SimpleNamespace
class RouteArgType(SimpleNamespace):
"""Type of dynamic route arg extracted from URI route."""
# Typecast to str is needed for Enum to work.
SINGLE = str("arg_single")
LIST = str("arg_list")
# the name of the backend var containing path and client information
ROUTER = "router"
ROUTER_DATA = "router_data"
class RouteVar(SimpleNamespace):
"""Names of variables used in the router_data dict stored in State."""
CLIENT_IP = "ip"
CLIENT_TOKEN = "token"
HEADERS = "headers"
PATH = "pathname"
ORIGIN = "asPath"
SESSION_ID = "sid"
QUERY = "query"
COOKIE = "cookie"
# This subset of router_data is included in chained on_load events.
ROUTER_DATA_INCLUDE = {RouteVar.PATH, RouteVar.ORIGIN, RouteVar.QUERY}
class RouteRegex(SimpleNamespace):
"""Regex used for extracting route args in route."""
ARG = re.compile(r"\[(?!\.)([^\[\]]+)\]")
# group return the catchall pattern (i.e. "[[..slug]]")
CATCHALL = re.compile(r"(\[?\[\.{3}(?![0-9]).*\]?\])")
# group return the arg name (i.e. "slug")
STRICT_CATCHALL = re.compile(r"\[\.{3}([a-zA-Z_][\w]*)\]")
# group return the arg name (i.e. "slug") (optional arg can be empty)
OPT_CATCHALL = re.compile(r"\[\[\.{3}([a-zA-Z_][\w]*)\]\]")
SINGLE_SEGMENT = "__SINGLE_SEGMENT__"
DOUBLE_SEGMENT = "__DOUBLE_SEGMENT__"
SINGLE_CATCHALL_SEGMENT = "__SINGLE_CATCHALL_SEGMENT__"
DOUBLE_CATCHALL_SEGMENT = "__DOUBLE_CATCHALL_SEGMENT__"
class DefaultPage(SimpleNamespace):
"""Default page constants."""
# The default title to show for Reflex apps.
TITLE = "{} | {}"
# The default description to show for Reflex apps.
DESCRIPTION = ""
# The default image to show for Reflex apps.
IMAGE = "favicon.ico"
# The default meta list to show for Reflex apps.
META_LIST = []
# 404 variables
class Page404(SimpleNamespace):
"""Page 404 constants."""
SLUG = "404"
TITLE = "404 - Not Found"
IMAGE = "favicon.ico"
DESCRIPTION = "The page was not found"
ROUTE_NOT_FOUND = "routeNotFound"