Skip to content

Commit

Permalink
Reworked mypy typing, removed definitions of OptionalType, DictType, …
Browse files Browse the repository at this point in the history
…and IterableType
  • Loading branch information
ptmcg committed Apr 11, 2022
1 parent e401cf8 commit 564692e
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 72 deletions.
11 changes: 11 additions & 0 deletions CHANGES
Expand Up @@ -2,6 +2,17 @@
Change Log
==========

Version 3.0.9 - (in development)
---------------
- To address mypy confusion of pyparsing.Optional and typing.Optional
resulting in `error: "_SpecialForm" not callable` message
reported in issue #365, fixed the import in exceptions.py. Nice
sleuthing by Iwan Aucamp and Dominic Davis-Foster, thank you!
(Removed definitions of OptionalType, DictType, and IterableType
and replaced them with typing.Optional, typing.Dict, and
typing.Iterable throughout.)


Version 3.0.8 -
---------------
- API CHANGE: modified pyproject.toml to require Python version
Expand Down
4 changes: 2 additions & 2 deletions pyparsing/__init__.py
Expand Up @@ -128,8 +128,8 @@ def __repr__(self):
)


__version_info__ = version_info(3, 0, 8, "final", 0)
__version_time__ = "09 Apr 2022 23:29 UTC"
__version_info__ = version_info(3, 0, 9, "final", 0)
__version_time__ = "11 Apr 2022 12:52 UTC"
__version__ = __version_info__.__version__
__versionTime__ = __version_time__
__author__ = "Paul McGuire <ptmcg.gm+pyparsing@gmail.com>"
Expand Down
90 changes: 46 additions & 44 deletions pyparsing/core.py
Expand Up @@ -2,9 +2,8 @@
# core.py
#
import os
import typing
from typing import (
Optional as OptionalType,
Iterable as IterableType,
NamedTuple,
Union,
Callable,
Expand All @@ -14,7 +13,6 @@
List,
TextIO,
Set,
Dict as DictType,
Sequence,
)
from abc import ABC, abstractmethod
Expand Down Expand Up @@ -192,7 +190,7 @@ def enable_all_warnings() -> None:


def _should_enable_warnings(
cmd_line_warn_options: IterableType[str], warn_env_var: OptionalType[str]
cmd_line_warn_options: typing.Iterable[str], warn_env_var: typing.Optional[str]
) -> bool:
enable = bool(warn_env_var)
for warn_opt in cmd_line_warn_options:
Expand Down Expand Up @@ -404,7 +402,7 @@ class ParserElement(ABC):

DEFAULT_WHITE_CHARS: str = " \n\t\r"
verbose_stacktrace: bool = False
_literalStringClass: OptionalType[type] = None
_literalStringClass: typing.Optional[type] = None

@staticmethod
def set_default_whitespace_chars(chars: str) -> None:
Expand Down Expand Up @@ -450,13 +448,13 @@ def inline_literals_using(cls: type) -> None:
ParserElement._literalStringClass = cls

class DebugActions(NamedTuple):
debug_try: OptionalType[DebugStartAction]
debug_match: OptionalType[DebugSuccessAction]
debug_fail: OptionalType[DebugExceptionAction]
debug_try: typing.Optional[DebugStartAction]
debug_match: typing.Optional[DebugSuccessAction]
debug_fail: typing.Optional[DebugExceptionAction]

def __init__(self, savelist: bool = False):
self.parseAction: List[ParseAction] = list()
self.failAction: OptionalType[ParseFailAction] = None
self.failAction: typing.Optional[ParseFailAction] = None
self.customName = None
self._defaultName = None
self.resultsName = None
Expand Down Expand Up @@ -895,7 +893,7 @@ def can_parse_next(self, instring: str, loc: int) -> bool:

# cache for left-recursion in Forward references
recursion_lock = RLock()
recursion_memos: DictType[
recursion_memos: typing.Dict[
Tuple[int, "Forward", bool], Tuple[int, Union[ParseResults, Exception]]
] = {}

Expand Down Expand Up @@ -985,7 +983,7 @@ def disable_memoization() -> None:

@staticmethod
def enable_left_recursion(
cache_size_limit: OptionalType[int] = None, *, force=False
cache_size_limit: typing.Optional[int] = None, *, force=False
) -> None:
"""
Enables "bounded recursion" parsing, which allows for both direct and indirect
Expand Down Expand Up @@ -1953,12 +1951,12 @@ def run_tests(
self,
tests: Union[str, List[str]],
parse_all: bool = True,
comment: OptionalType[Union["ParserElement", str]] = "#",
comment: typing.Optional[Union["ParserElement", str]] = "#",
full_dump: bool = True,
print_results: bool = True,
failure_tests: bool = False,
post_parse: Callable[[str, ParseResults], str] = None,
file: OptionalType[TextIO] = None,
file: typing.Optional[TextIO] = None,
with_line_numbers: bool = False,
*,
parseAll: bool = True,
Expand Down Expand Up @@ -2385,11 +2383,11 @@ class Keyword(Token):
def __init__(
self,
match_string: str = "",
ident_chars: OptionalType[str] = None,
ident_chars: typing.Optional[str] = None,
caseless: bool = False,
*,
matchString: str = "",
identChars: OptionalType[str] = None,
identChars: typing.Optional[str] = None,
):
super().__init__()
identChars = identChars or ident_chars
Expand Down Expand Up @@ -2513,10 +2511,10 @@ class CaselessKeyword(Keyword):
def __init__(
self,
match_string: str = "",
ident_chars: OptionalType[str] = None,
ident_chars: typing.Optional[str] = None,
*,
matchString: str = "",
identChars: OptionalType[str] = None,
identChars: typing.Optional[str] = None,
):
identChars = identChars or ident_chars
match_string = matchString or match_string
Expand Down Expand Up @@ -2680,17 +2678,17 @@ class Word(Token):
def __init__(
self,
init_chars: str = "",
body_chars: OptionalType[str] = None,
body_chars: typing.Optional[str] = None,
min: int = 1,
max: int = 0,
exact: int = 0,
as_keyword: bool = False,
exclude_chars: OptionalType[str] = None,
exclude_chars: typing.Optional[str] = None,
*,
initChars: OptionalType[str] = None,
bodyChars: OptionalType[str] = None,
initChars: typing.Optional[str] = None,
bodyChars: typing.Optional[str] = None,
asKeyword: bool = False,
excludeChars: OptionalType[str] = None,
excludeChars: typing.Optional[str] = None,
):
initChars = initChars or init_chars
bodyChars = bodyChars or body_chars
Expand Down Expand Up @@ -2872,10 +2870,10 @@ def __init__(
self,
charset: str,
as_keyword: bool = False,
exclude_chars: OptionalType[str] = None,
exclude_chars: typing.Optional[str] = None,
*,
asKeyword: bool = False,
excludeChars: OptionalType[str] = None,
excludeChars: typing.Optional[str] = None,
):
asKeyword = asKeyword or as_keyword
excludeChars = excludeChars or exclude_chars
Expand Down Expand Up @@ -3088,18 +3086,18 @@ class QuotedString(Token):
def __init__(
self,
quote_char: str = "",
esc_char: OptionalType[str] = None,
esc_quote: OptionalType[str] = None,
esc_char: typing.Optional[str] = None,
esc_quote: typing.Optional[str] = None,
multiline: bool = False,
unquote_results: bool = True,
end_quote_char: OptionalType[str] = None,
end_quote_char: typing.Optional[str] = None,
convert_whitespace_escapes: bool = True,
*,
quoteChar: str = "",
escChar: OptionalType[str] = None,
escQuote: OptionalType[str] = None,
escChar: typing.Optional[str] = None,
escQuote: typing.Optional[str] = None,
unquoteResults: bool = True,
endQuoteChar: OptionalType[str] = None,
endQuoteChar: typing.Optional[str] = None,
convertWhitespaceEscapes: bool = True,
):
super().__init__()
Expand Down Expand Up @@ -3600,7 +3598,7 @@ class ParseExpression(ParserElement):
post-processing parsed tokens.
"""

def __init__(self, exprs: IterableType[ParserElement], savelist: bool = False):
def __init__(self, exprs: typing.Iterable[ParserElement], savelist: bool = False):
super().__init__(savelist)
self.exprs: List[ParserElement]
if isinstance(exprs, _generatorType):
Expand Down Expand Up @@ -3782,7 +3780,9 @@ def __init__(self, *args, **kwargs):
def _generateDefaultName(self):
return "-"

def __init__(self, exprs_arg: IterableType[ParserElement], savelist: bool = True):
def __init__(
self, exprs_arg: typing.Iterable[ParserElement], savelist: bool = True
):
exprs: List[ParserElement] = list(exprs_arg)
if exprs and Ellipsis in exprs:
tmp = []
Expand Down Expand Up @@ -3926,7 +3926,7 @@ class Or(ParseExpression):
[['123'], ['3.1416'], ['789']]
"""

def __init__(self, exprs: IterableType[ParserElement], savelist: bool = False):
def __init__(self, exprs: typing.Iterable[ParserElement], savelist: bool = False):
super().__init__(exprs, savelist)
if self.exprs:
self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs)
Expand Down Expand Up @@ -4081,7 +4081,7 @@ class MatchFirst(ParseExpression):
print(number.search_string("123 3.1416 789")) # Better -> [['123'], ['3.1416'], ['789']]
"""

def __init__(self, exprs: IterableType[ParserElement], savelist: bool = False):
def __init__(self, exprs: typing.Iterable[ParserElement], savelist: bool = False):
super().__init__(exprs, savelist)
if self.exprs:
self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs)
Expand Down Expand Up @@ -4232,7 +4232,7 @@ class Each(ParseExpression):
- size: 20
"""

def __init__(self, exprs: IterableType[ParserElement], savelist: bool = True):
def __init__(self, exprs: typing.Iterable[ParserElement], savelist: bool = True):
super().__init__(exprs, savelist)
if self.exprs:
self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs)
Expand Down Expand Up @@ -4619,7 +4619,7 @@ class PrecededBy(ParseElementEnhance):
"""

def __init__(
self, expr: Union[ParserElement, str], retreat: OptionalType[int] = None
self, expr: Union[ParserElement, str], retreat: typing.Optional[int] = None
):
super().__init__(expr)
self.expr = self.expr().leave_whitespace()
Expand Down Expand Up @@ -4758,9 +4758,9 @@ class _MultipleMatch(ParseElementEnhance):
def __init__(
self,
expr: ParserElement,
stop_on: OptionalType[Union[ParserElement, str]] = None,
stop_on: typing.Optional[Union[ParserElement, str]] = None,
*,
stopOn: OptionalType[Union[ParserElement, str]] = None,
stopOn: typing.Optional[Union[ParserElement, str]] = None,
):
super().__init__(expr)
stopOn = stopOn or stop_on
Expand Down Expand Up @@ -4879,9 +4879,9 @@ class ZeroOrMore(_MultipleMatch):
def __init__(
self,
expr: ParserElement,
stop_on: OptionalType[Union[ParserElement, str]] = None,
stop_on: typing.Optional[Union[ParserElement, str]] = None,
*,
stopOn: OptionalType[Union[ParserElement, str]] = None,
stopOn: typing.Optional[Union[ParserElement, str]] = None,
):
super().__init__(expr, stopOn=stopOn or stop_on)
self.mayReturnEmpty = True
Expand Down Expand Up @@ -5046,7 +5046,7 @@ def __init__(
other: Union[ParserElement, str],
include: bool = False,
ignore: bool = None,
fail_on: OptionalType[Union[ParserElement, str]] = None,
fail_on: typing.Optional[Union[ParserElement, str]] = None,
*,
failOn: Union[ParserElement, str] = None,
):
Expand Down Expand Up @@ -5143,7 +5143,7 @@ class Forward(ParseElementEnhance):
parser created using ``Forward``.
"""

def __init__(self, other: OptionalType[Union[ParserElement, str]] = None):
def __init__(self, other: typing.Optional[Union[ParserElement, str]] = None):
self.caller_frame = traceback.extract_stack(limit=2)[0]
super().__init__(other, savelist=False)
self.lshift_line = None
Expand Down Expand Up @@ -5395,7 +5395,7 @@ def __init__(
join_string: str = "",
adjacent: bool = True,
*,
joinString: OptionalType[str] = None,
joinString: typing.Optional[str] = None,
):
super().__init__(expr)
joinString = joinString if joinString is not None else join_string
Expand Down Expand Up @@ -5795,7 +5795,9 @@ def autoname_elements() -> None:

# build list of built-in expressions, for future reference if a global default value
# gets updated
_builtin_exprs = [v for v in vars().values() if isinstance(v, ParserElement)]
_builtin_exprs: List[ParserElement] = [
v for v in vars().values() if isinstance(v, ParserElement)
]

# backward compatibility names
tokenMap = token_map
Expand Down

0 comments on commit 564692e

Please sign in to comment.