feat: resolve/pick accounts by login_id or label
All checks were successful
技能自动化发布 / release (push) Successful in 11s
All checks were successful
技能自动化发布 / release (push) Successful in 11s
This commit is contained in:
@@ -229,6 +229,26 @@ def get_account_by_id(account_id) -> Optional[dict]:
|
||||
conn.close()
|
||||
|
||||
|
||||
def _append_human_ref_filters(
|
||||
conditions: list[str],
|
||||
params: list,
|
||||
*,
|
||||
login_id: Optional[str] = None,
|
||||
label: Optional[str] = None,
|
||||
table_alias: str = "",
|
||||
) -> None:
|
||||
"""Optional case-insensitive exact match on login_id / account_label."""
|
||||
prefix = f"{table_alias}." if table_alias else ""
|
||||
lid = (login_id or "").strip()
|
||||
if lid:
|
||||
conditions.append(f"LOWER({prefix}login_id) = LOWER(?)")
|
||||
params.append(lid)
|
||||
lab = (label or "").strip()
|
||||
if lab:
|
||||
conditions.append(f"LOWER({prefix}account_label) = LOWER(?)")
|
||||
params.append(lab)
|
||||
|
||||
|
||||
def find_accounts(
|
||||
platform_key: Optional[str] = None,
|
||||
environment: Optional[str] = None,
|
||||
@@ -236,6 +256,8 @@ def find_accounts(
|
||||
role: Optional[str] = None,
|
||||
status: Optional[str] = None,
|
||||
provider_code: Optional[str] = None,
|
||||
login_id: Optional[str] = None,
|
||||
label: Optional[str] = None,
|
||||
limit: int = 200,
|
||||
) -> list[dict]:
|
||||
"""Find accounts by optional filters. Returns list of dicts."""
|
||||
@@ -263,6 +285,9 @@ def find_accounts(
|
||||
if provider_code:
|
||||
conditions.append("provider_code = ?")
|
||||
params.append(provider_code)
|
||||
_append_human_ref_filters(
|
||||
conditions, params, login_id=login_id, label=label
|
||||
)
|
||||
|
||||
where = ""
|
||||
if conditions:
|
||||
@@ -289,6 +314,8 @@ def count_active_accounts(
|
||||
environment: Optional[str] = None,
|
||||
tenant_id: Optional[str] = None,
|
||||
role: Optional[str] = None,
|
||||
login_id: Optional[str] = None,
|
||||
label: Optional[str] = None,
|
||||
) -> int:
|
||||
"""Count active accounts matching filters (ignores lease occupancy)."""
|
||||
conn = get_conn()
|
||||
@@ -306,6 +333,9 @@ def count_active_accounts(
|
||||
if role:
|
||||
conditions.append("role = ?")
|
||||
params.append(role)
|
||||
_append_human_ref_filters(
|
||||
conditions, params, login_id=login_id, label=label
|
||||
)
|
||||
where = " AND ".join(conditions)
|
||||
cur.execute(f"SELECT COUNT(*) FROM accounts WHERE {where}", params)
|
||||
row = cur.fetchone()
|
||||
@@ -319,6 +349,8 @@ def find_account_ids(
|
||||
environment: Optional[str] = None,
|
||||
tenant_id: Optional[str] = None,
|
||||
role: Optional[str] = None,
|
||||
login_id: Optional[str] = None,
|
||||
label: Optional[str] = None,
|
||||
) -> list[int]:
|
||||
"""Return account IDs matching filters, excluding those with active leases."""
|
||||
conn = get_conn()
|
||||
@@ -336,6 +368,9 @@ def find_account_ids(
|
||||
if role:
|
||||
conditions.append("a.role = ?")
|
||||
params.append(role)
|
||||
_append_human_ref_filters(
|
||||
conditions, params, login_id=login_id, label=label, table_alias="a"
|
||||
)
|
||||
|
||||
# Exclude accounts with active non-expired leases
|
||||
now = _now_unix()
|
||||
|
||||
Reference in New Issue
Block a user