workspace
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
[build-system]
|
||||
requires = ["hatchling"]
|
||||
build-backend = "hatchling.build"
|
||||
|
||||
[project]
|
||||
name = "surugaya-common"
|
||||
version = "0.1.0"
|
||||
description = "Shared contracts (Redis keys, future models) for jp_surugaya services"
|
||||
requires-python = ">=3.12"
|
||||
dependencies = [
|
||||
"pydantic>=2.0.0,<3.0.0",
|
||||
"redis>=5.0.0,<6.0.0",
|
||||
]
|
||||
|
||||
[tool.hatch.build.targets.wheel]
|
||||
packages = ["src/surugaya_common"]
|
||||
|
||||
# NOTE (deferred): redis pin here intentionally matches the API service (<6).
|
||||
# The worker's redis==8 requirement is NOT introduced in this increment, so there
|
||||
# is no conflict to resolve yet. Do not add fastapi/playwright/opencv/numpy/
|
||||
# pyautogui/pillow here — surugaya_common must stay light.
|
||||
@@ -0,0 +1,5 @@
|
||||
"""Shared contracts for jp_surugaya services (Redis keys, future models)."""
|
||||
|
||||
from surugaya_common import redis_keys
|
||||
|
||||
__all__ = ["redis_keys"]
|
||||
@@ -0,0 +1,80 @@
|
||||
"""Centralized Redis key contract shared across jp_surugaya services.
|
||||
|
||||
Single source of truth for every Redis key schema. Helper functions reproduce
|
||||
the EXACT literals currently produced inline by the API service so behaviour is
|
||||
byte-for-byte identical after refactoring.
|
||||
|
||||
Current literals (as of this extraction):
|
||||
purchase task stream : jp_surugaya_purchase_task[_dev]
|
||||
trade delay zset : jp_surugaya_trade_delay[_dev]:{node_id}
|
||||
trade hash : jp_surugaya_trade
|
||||
trade pending dedup : jp_surugaya_trade_pending:{trade_code}
|
||||
trade fetch stream : jp_surugaya_trade_fetch
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
# --- Base key constants (no suffixes applied) -------------------------------
|
||||
|
||||
PURCHASE_TASK_STREAM: str = "jp_surugaya_purchase_task"
|
||||
TRADE_DELAY_ZSET: str = "jp_surugaya_trade_delay"
|
||||
TRADE_HASH: str = "jp_surugaya_trade"
|
||||
TRADE_PENDING_PREFIX: str = "jp_surugaya_trade_pending"
|
||||
TRADE_FETCH_STREAM: str = "jp_surugaya_trade_fetch"
|
||||
|
||||
# Suffix appended to dev-mode keys.
|
||||
_DEV_SUFFIX: str = "_dev"
|
||||
|
||||
|
||||
def _is_dev(is_dev: object) -> bool:
|
||||
"""Normalize the dev flag.
|
||||
|
||||
The API passes payload.is_dev which is the string "1" for dev mode.
|
||||
Accepts the raw string flag ("1"), a bool, or anything truthy-comparable
|
||||
while preserving the exact original semantics (is_dev == "1").
|
||||
"""
|
||||
if isinstance(is_dev, str):
|
||||
return is_dev == "1"
|
||||
return bool(is_dev)
|
||||
|
||||
|
||||
def purchase_task_stream(is_dev: object = None) -> str:
|
||||
"""Redis Stream key for the purchase task queue.
|
||||
|
||||
Reproduces:
|
||||
"jp_surugaya_purchase_task_dev" if is_dev == "1" else "jp_surugaya_purchase_task"
|
||||
"""
|
||||
if _is_dev(is_dev):
|
||||
return f"{PURCHASE_TASK_STREAM}{_DEV_SUFFIX}"
|
||||
return PURCHASE_TASK_STREAM
|
||||
|
||||
|
||||
def trade_delay_zset(node_id: object, is_dev: object = None) -> str:
|
||||
"""Redis Sorted Set key for delayed trade monitoring, scoped by node_id.
|
||||
|
||||
Reproduces:
|
||||
base = "jp_surugaya_trade_delay_dev" if is_dev == "1" else "jp_surugaya_trade_delay"
|
||||
base + f":{node_id}"
|
||||
"""
|
||||
base = TRADE_DELAY_ZSET
|
||||
if _is_dev(is_dev):
|
||||
base = f"{base}{_DEV_SUFFIX}"
|
||||
return f"{base}:{node_id}"
|
||||
|
||||
|
||||
def trade_hash() -> str:
|
||||
"""Redis Hash key storing trade order details keyed by trade_code."""
|
||||
return TRADE_HASH
|
||||
|
||||
|
||||
def trade_pending_key(trade_code: object) -> str:
|
||||
"""TTL dedup key for a pending trade fetch.
|
||||
|
||||
Reproduces: f"jp_surugaya_trade_pending:{trade_code}"
|
||||
"""
|
||||
return f"{TRADE_PENDING_PREFIX}:{trade_code}"
|
||||
|
||||
|
||||
def trade_fetch_stream() -> str:
|
||||
"""Redis Stream key for trade fetch tasks."""
|
||||
return TRADE_FETCH_STREAM
|
||||
Reference in New Issue
Block a user