Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

utils.py 1.1KB

123456789101112131415161718192021222324252627282930313233
  1. from collections.abc import Iterable, Sequence
  2. from typing import Any
  3. import orjson
  4. from .segment_group import SegmentGroup
  5. from .segments import ArrayFileSegment, FileSegment, Segment
  6. def to_selector(node_id: str, name: str, paths: Iterable[str] = ()) -> Sequence[str]:
  7. selectors = [node_id, name]
  8. if paths:
  9. selectors.extend(paths)
  10. return selectors
  11. def segment_orjson_default(o: Any):
  12. """Default function for orjson serialization of Segment types"""
  13. if isinstance(o, ArrayFileSegment):
  14. return [v.model_dump() for v in o.value]
  15. elif isinstance(o, FileSegment):
  16. return o.value.model_dump()
  17. elif isinstance(o, SegmentGroup):
  18. return [segment_orjson_default(seg) for seg in o.value]
  19. elif isinstance(o, Segment):
  20. return o.value
  21. raise TypeError(f"Object of type {type(o).__name__} is not JSON serializable")
  22. def dumps_with_segments(obj: Any, ensure_ascii: bool = False) -> str:
  23. """JSON dumps with segment support using orjson"""
  24. option = orjson.OPT_NON_STR_KEYS
  25. return orjson.dumps(obj, default=segment_orjson_default, option=option).decode("utf-8")