Source code for litestar_queues.namespace

"""Runtime namespace rendering for package-owned identifiers."""

import re
from dataclasses import dataclass

from litestar_queues.exceptions import QueueConfigurationError

__all__ = ("DEFAULT_NAMESPACE", "QueueNamespace")

DEFAULT_NAMESPACE = "litestar_queues"
_NAMESPACE_PATTERN = re.compile(r"^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$")


[docs] @dataclass(frozen=True, slots=True) class QueueNamespace: """Validated root for package-owned runtime identifiers.""" root: str = DEFAULT_NAMESPACE def __post_init__(self) -> None: """Reject roots that cannot render consistently across target formats.""" if not _NAMESPACE_PATTERN.fullmatch(self.root): msg = ( "QueueConfig.namespace must start with a lowercase letter and contain only " "lowercase letters, digits, and single underscores between non-empty segments." ) raise QueueConfigurationError(msg)
[docs] def metric(self, *parts: str) -> str: """Render an OpenTelemetry or Prometheus identifier.""" return self._join(".", self.root, *parts)
[docs] def logger(self, *parts: str) -> str: """Render a runtime logger name.""" return self._join(".", self.root, *parts)
[docs] def channel(self, *parts: str) -> str: """Render a pub/sub or event channel.""" return self._join(":", self.root, *parts)
[docs] def key(self, *parts: str) -> str: """Render a storage key.""" return self._join(":", self.root, *parts)
[docs] def database_channel(self, *parts: str) -> str: """Render a database notification channel.""" return self._join("_", self.root, *parts)
[docs] def registration(self, *parts: str) -> str: """Render a Litestar state, dependency, or route registration.""" root = "queue" if self.is_default else self.root return self._join("_", root, *parts)
[docs] def environment(self, *parts: str) -> str: """Render an environment-variable name.""" return self._join("_", self.root.upper(), *(part.upper() for part in parts))
[docs] def resource(self, *parts: str) -> str: """Render a process, thread, or filesystem resource name.""" root = self.root.replace("_", "-") return self._join("-", root, *(part.replace("_", "-") for part in parts))
[docs] def coordination(self, *parts: str) -> str: """Render a distributed coordination name with legacy compatibility.""" root = "queue" if self.is_default else self.root.replace("_", "-") return self._join("-", root, *(part.replace("_", "-") for part in parts))
[docs] def package_task(self, *parts: str) -> str: """Render a package-owned built-in task name with legacy compatibility.""" if self.is_default: return self._join(".", *parts) return self.metric(*parts)
@property def is_default(self) -> bool: """Return whether this root is the compatibility namespace.""" return self.root == DEFAULT_NAMESPACE @staticmethod def _join(separator: str, *parts: str) -> str: if not parts or any(not part for part in parts): msg = "Namespace identifier parts must be non-empty strings." raise QueueConfigurationError(msg) return separator.join(parts)