| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- """
- Compatibility helpers for supporting pyparsing v2 and v3 APIs.
- """
- from __future__ import annotations
- from typing import Callable, Dict, Type, cast
- import pyparsing
- ParseResults = pyparsing.ParseResults
- ParserElement = pyparsing.ParserElement
- _RAW_VERSION = getattr(pyparsing, "__version__", "0")
- try:
- PYPARSING_MAJOR_VERSION = int(_RAW_VERSION.split(".", 1)[0])
- except (TypeError, ValueError):
- PYPARSING_MAJOR_VERSION = 0
- PYPARSING_V3 = PYPARSING_MAJOR_VERSION >= 3
- _ParserFactory = Callable[..., ParserElement]
- _ParserTransform = Callable[..., ParserElement]
- DelimitedList: _ParserFactory
- original_text_for: _ParserTransform
- rest_of_line: ParserElement
- if PYPARSING_V3:
- DelimitedList = pyparsing.DelimitedList
- original_text_for = pyparsing.original_text_for
- rest_of_line = pyparsing.rest_of_line
- else:
- DelimitedList = pyparsing.delimitedList
- original_text_for = pyparsing.originalTextFor
- rest_of_line = pyparsing.restOfLine
- def _alias_instance_method(klass: Type[object], new_name: str, old_name: str) -> None:
- if hasattr(klass, new_name) or not hasattr(klass, old_name):
- return
- def _method(self: object, *args: object, **kwargs: object) -> object:
- # Resolve old_name on self so subclass overrides are preserved.
- method = cast(Callable[..., object], getattr(self, old_name))
- return method(*args, **kwargs)
- setattr(klass, new_name, _method)
- def _alias_static_method(klass: Type[object], new_name: str, old_name: str) -> None:
- if hasattr(klass, new_name) or not hasattr(klass, old_name):
- return
- old_method = cast(Callable[..., object], getattr(klass, old_name))
- def _method(*args: object, **kwargs: object) -> object:
- return old_method(*args, **kwargs)
- setattr(klass, new_name, staticmethod(_method))
- _alias_instance_method(ParserElement, "set_parse_action", "setParseAction")
- _alias_instance_method(ParserElement, "add_parse_action", "addParseAction")
- _alias_instance_method(ParserElement, "leave_whitespace", "leaveWhitespace")
- _alias_instance_method(ParserElement, "set_name", "setName")
- _alias_instance_method(ParserElement, "set_results_name", "setResultsName")
- _alias_instance_method(ParserElement, "parse_with_tabs", "parseWithTabs")
- _alias_instance_method(ParserElement, "search_string", "searchString")
- _alias_static_method(
- ParserElement,
- "set_default_whitespace_chars",
- "setDefaultWhitespaceChars",
- )
- if not hasattr(ParserElement, "parse_string"):
- def _parse_string(
- self: ParserElement,
- instring: str,
- parse_all: bool = False,
- *,
- parseAll: bool = False,
- ) -> ParseResults:
- if parseAll:
- parse_all = parseAll
- parser = cast(Callable[..., ParseResults], getattr(self, "parseString"))
- return parser(instring, parseAll=parse_all)
- setattr(ParserElement, "parse_string", _parse_string)
- _alias_instance_method(ParseResults, "as_list", "asList")
- def combine_join_kwargs(value: str) -> Dict[str, str]:
- if PYPARSING_V3:
- return {"join_string": value}
- return {"joinString": value}
|