Add SKU-scoped PChome rescore pilot
All checks were successful
CD Pipeline / deploy (push) Successful in 1m4s
All checks were successful
CD Pipeline / deploy (push) Successful in 1m4s
This commit is contained in:
@@ -514,6 +514,7 @@ def fetch_match_attempt_rescore_rows(
|
||||
source: str = "pchome",
|
||||
statuses: Sequence[str] = DEFAULT_RESCAN_STATUSES,
|
||||
reason_filter: str | None = None,
|
||||
skus: Sequence[str] | None = None,
|
||||
limit: int = 100,
|
||||
latest_sku_only: bool = True,
|
||||
) -> list[dict[str, Any]]:
|
||||
@@ -525,6 +526,8 @@ def fetch_match_attempt_rescore_rows(
|
||||
already moved to a newer review state.
|
||||
"""
|
||||
status_values = tuple(status for status in statuses if status) or DEFAULT_RESCAN_STATUSES
|
||||
sku_values = tuple(str(sku).strip() for sku in (skus or ()) if str(sku).strip())
|
||||
sku_predicate = "AND sku IN :skus" if sku_values else ""
|
||||
|
||||
if latest_sku_only:
|
||||
reason_predicate = "AND diagnostic_codes::text LIKE :reason_filter" if (
|
||||
@@ -576,6 +579,7 @@ def fetch_match_attempt_rescore_rows(
|
||||
WHERE rn = 1
|
||||
AND attempt_status IN :statuses
|
||||
{reason_predicate}
|
||||
{sku_predicate}
|
||||
ORDER BY attempted_at DESC{nulls_last}
|
||||
LIMIT :limit
|
||||
""").bindparams(bindparam("statuses", expanding=True))
|
||||
@@ -602,6 +606,7 @@ def fetch_match_attempt_rescore_rows(
|
||||
WHERE source = :source
|
||||
AND attempt_status IN :statuses
|
||||
{reason_predicate}
|
||||
{sku_predicate}
|
||||
ORDER BY sku, best_competitor_product_id, attempted_at DESC NULLS LAST, id DESC
|
||||
LIMIT :limit
|
||||
""").bindparams(bindparam("statuses", expanding=True))
|
||||
@@ -633,6 +638,7 @@ def fetch_match_attempt_rescore_rows(
|
||||
WHERE source = :source
|
||||
AND attempt_status IN :statuses
|
||||
{reason_predicate}
|
||||
{sku_predicate}
|
||||
)
|
||||
SELECT *
|
||||
FROM ranked
|
||||
@@ -640,6 +646,8 @@ def fetch_match_attempt_rescore_rows(
|
||||
ORDER BY attempted_at DESC
|
||||
LIMIT :limit
|
||||
""").bindparams(bindparam("statuses", expanding=True))
|
||||
if sku_values:
|
||||
sql = sql.bindparams(bindparam("skus", expanding=True))
|
||||
|
||||
params = {
|
||||
"source": source,
|
||||
@@ -648,6 +656,8 @@ def fetch_match_attempt_rescore_rows(
|
||||
}
|
||||
if reason_filter:
|
||||
params["reason_filter"] = f"%{reason_filter}%"
|
||||
if sku_values:
|
||||
params["skus"] = sku_values
|
||||
|
||||
return [dict(row) for row in conn.execute(sql, params).mappings().all()]
|
||||
|
||||
@@ -658,6 +668,7 @@ def build_match_attempt_rescore_audit(
|
||||
source: str = "pchome",
|
||||
statuses: Sequence[str] = DEFAULT_RESCAN_STATUSES,
|
||||
reason_filter: str | None = None,
|
||||
skus: Sequence[str] | None = None,
|
||||
limit: int = 100,
|
||||
min_score: float = MIN_MATCH_SCORE,
|
||||
sample_limit: int = 20,
|
||||
@@ -669,6 +680,7 @@ def build_match_attempt_rescore_audit(
|
||||
source=source,
|
||||
statuses=statuses,
|
||||
reason_filter=reason_filter,
|
||||
skus=skus,
|
||||
limit=limit,
|
||||
latest_sku_only=latest_sku_only,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user