"""列头 facet 上下文:剥离当前列自身过滤键(Excel 语义)。""" from __future__ import annotations import re from typing import Dict, Iterable, MutableMapping, Optional, Set def _camel_to_snake(name: str) -> str: s1 = re.sub("(.)([A-Z][a-z]+)", r"\1_\2", name) return re.sub("([a-z0-9])([A-Z])", r"\1_\2", s1).lower() def keys_for_facet_field( field: str, *, extra_keys: Optional[Iterable[str]] = None ) -> Set[str]: f = (field or "").strip() snake = _camel_to_snake(f) if f else "" keys = {f, f"{f}In", snake, f"{snake}_in"} if extra_keys: keys.update(k for k in extra_keys if k) return {k for k in keys if k} def strip_simple_facet_self_params( params: MutableMapping[str, object], field: str, *, extra_keys: Optional[Iterable[str]] = None, ) -> Dict[str, object]: """去掉当前 facet 列对应过滤键与元数据,返回新 dict。""" out = {k: v for k, v in params.items() if v not in (None, "")} for key in keys_for_facet_field(field, extra_keys=extra_keys): out.pop(key, None) for meta in ("field", "keyword", "limit"): out.pop(meta, None) return out