"""Redis key conventions and queue abstractions.""" # --- Key prefixes --- PREFIX = "stonks" # Distributed locks LOCK_PREFIX = f"{PREFIX}:lock" # Rate limit counters RATE_LIMIT_PREFIX = f"{PREFIX}:ratelimit" # Job queues QUEUE_PREFIX = f"{PREFIX}:queue" # Dedupe markers DEDUPE_PREFIX = f"{PREFIX}:dedupe" # Cache CACHE_PREFIX = f"{PREFIX}:cache" # Retry backoff state RETRY_PREFIX = f"{PREFIX}:retry" def lock_key(resource: str) -> str: return f"{LOCK_PREFIX}:{resource}" def rate_limit_key(source: str, window: str) -> str: return f"{RATE_LIMIT_PREFIX}:{source}:{window}" def queue_key(queue_name: str) -> str: return f"{QUEUE_PREFIX}:{queue_name}" def dedupe_key(content_hash: str) -> str: return f"{DEDUPE_PREFIX}:{content_hash}" def cache_key(namespace: str, key: str) -> str: return f"{CACHE_PREFIX}:{namespace}:{key}" def retry_key(job_id: str) -> str: return f"{RETRY_PREFIX}:{job_id}" # Dead-letter queues DLQ_PREFIX = f"{PREFIX}:dlq" def dlq_key(queue_name: str) -> str: """Return the dead-letter queue key for a given source queue.""" return f"{DLQ_PREFIX}:{queue_name}" # --- Queue names --- QUEUE_INGESTION = "ingestion" QUEUE_PARSING = "parsing" QUEUE_EXTRACTION = "extraction" QUEUE_AGGREGATION = "aggregation" QUEUE_RECOMMENDATION = "recommendation" QUEUE_LAKE_PUBLISH = "lake_publish" QUEUE_TRADE = "trade" QUEUE_BROKER = "broker_orders" QUEUE_MACRO_CLASSIFICATION = "macro_classification"