mirror of https://github.com/python/cpython
gh-117348: restore import time performance of configparser (#117703)
Reduces import time by over 50% (10431µs vs 4350µs on Apple M3 Pro).
This commit is contained in:
parent
c99d374fc7
commit
9c93b7402b
|
@ -143,17 +143,18 @@ ConfigParser -- responsible for parsing a list of
|
|||
between keys and values are surrounded by spaces.
|
||||
"""
|
||||
|
||||
from collections.abc import MutableMapping
|
||||
# Do not import dataclasses; overhead is unacceptable (gh-117703)
|
||||
|
||||
from collections.abc import Iterable, MutableMapping
|
||||
from collections import ChainMap as _ChainMap
|
||||
import contextlib
|
||||
from dataclasses import dataclass, field
|
||||
import functools
|
||||
import io
|
||||
import itertools
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
from typing import Iterable
|
||||
import types
|
||||
|
||||
__all__ = ("NoSectionError", "DuplicateOptionError", "DuplicateSectionError",
|
||||
"NoOptionError", "InterpolationError", "InterpolationDepthError",
|
||||
|
@ -538,21 +539,18 @@ class ExtendedInterpolation(Interpolation):
|
|||
"found: %r" % (rest,))
|
||||
|
||||
|
||||
@dataclass
|
||||
class _ReadState:
|
||||
elements_added : set[str] = field(default_factory=set)
|
||||
elements_added : set[str]
|
||||
cursect : dict[str, str] | None = None
|
||||
sectname : str | None = None
|
||||
optname : str | None = None
|
||||
lineno : int = 0
|
||||
indent_level : int = 0
|
||||
errors : list[ParsingError] = field(default_factory=list)
|
||||
errors : list[ParsingError]
|
||||
|
||||
|
||||
@dataclass
|
||||
class _Prefixes:
|
||||
full : Iterable[str]
|
||||
inline : Iterable[str]
|
||||
def __init__(self):
|
||||
self.elements_added = set()
|
||||
self.errors = list()
|
||||
|
||||
|
||||
class _Line(str):
|
||||
|
@ -560,7 +558,7 @@ class _Line(str):
|
|||
def __new__(cls, val, *args, **kwargs):
|
||||
return super().__new__(cls, val)
|
||||
|
||||
def __init__(self, val, prefixes: _Prefixes):
|
||||
def __init__(self, val, prefixes):
|
||||
self.prefixes = prefixes
|
||||
|
||||
@functools.cached_property
|
||||
|
@ -653,7 +651,7 @@ class RawConfigParser(MutableMapping):
|
|||
else:
|
||||
self._optcre = re.compile(self._OPT_TMPL.format(delim=d),
|
||||
re.VERBOSE)
|
||||
self._prefixes = _Prefixes(
|
||||
self._prefixes = types.SimpleNamespace(
|
||||
full=tuple(comment_prefixes or ()),
|
||||
inline=tuple(inline_comment_prefixes or ()),
|
||||
)
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Largely restored import time performance of configparser by avoiding
|
||||
dataclasses.
|
Loading…
Reference in New Issue