| 123456789101112131415161718192021222324252627282930313233343536 |
- """列头 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
|