From f87833a389d48808cdf7ca539efa42c5e3112edc Mon Sep 17 00:00:00 2001 From: Arun Babu Neelicattu Date: Thu, 16 Apr 2020 20:04:03 +0200 Subject: [PATCH 1/4] vendors: cleanup unused dependencies --- poetry/core/_vendor/attr/__init__.pyi | 278 ---- poetry/core/_vendor/attr/_version_info.pyi | 9 - poetry/core/_vendor/attr/converters.pyi | 12 - poetry/core/_vendor/attr/exceptions.pyi | 15 - poetry/core/_vendor/attr/filters.pyi | 5 - poetry/core/_vendor/attr/validators.pyi | 66 - poetry/core/_vendor/backports/__init__.py | 6 - .../backports/configparser/__init__.py | 1473 ----------------- .../_vendor/backports/configparser/helpers.py | 274 --- poetry/core/_vendor/configparser.LICENSE | 7 - poetry/core/_vendor/configparser.py | 61 - poetry/core/_vendor/contextlib2.LICENSE.txt | 122 -- poetry/core/_vendor/contextlib2.py | 518 ------ poetry/core/_vendor/enum34.LICENSE | 32 + poetry/core/_vendor/glob2/LICENSE | 27 - poetry/core/_vendor/glob2/__init__.py | 5 - poetry/core/_vendor/glob2/compat.py | 167 -- poetry/core/_vendor/glob2/fnmatch.py | 141 -- poetry/core/_vendor/glob2/impl.py | 216 --- .../core/_vendor/importlib_metadata/LICENSE | 13 - .../_vendor/importlib_metadata/__init__.py | 541 ------ .../_vendor/importlib_metadata/_compat.py | 143 -- .../importlib_metadata/docs/__init__.py | 0 .../importlib_metadata/docs/changelog.rst | 227 --- .../_vendor/importlib_metadata/docs/conf.py | 182 -- .../_vendor/importlib_metadata/docs/index.rst | 54 - .../_vendor/importlib_metadata/docs/using.rst | 259 --- .../importlib_metadata/tests/__init__.py | 0 .../importlib_metadata/tests/data/__init__.py | 0 .../tests/data/example-21.12-py3-none-any.whl | Bin 1455 -> 0 bytes .../importlib_metadata/tests/fixtures.py | 200 --- .../importlib_metadata/tests/test_api.py | 176 -- .../tests/test_integration.py | 22 - .../importlib_metadata/tests/test_main.py | 224 --- .../importlib_metadata/tests/test_zip.py | 70 - poetry/core/_vendor/pkginfo/LICENSE.txt | 21 - poetry/core/_vendor/pkginfo/__init__.py | 9 - poetry/core/_vendor/pkginfo/_compat.py | 34 - poetry/core/_vendor/pkginfo/bdist.py | 39 - poetry/core/_vendor/pkginfo/commandline.py | 232 --- poetry/core/_vendor/pkginfo/develop.py | 46 - poetry/core/_vendor/pkginfo/distribution.py | 147 -- poetry/core/_vendor/pkginfo/index.py | 15 - poetry/core/_vendor/pkginfo/installed.py | 54 - poetry/core/_vendor/pkginfo/sdist.py | 75 - poetry/core/_vendor/pkginfo/tests/__init__.py | 36 - .../core/_vendor/pkginfo/tests/test_bdist.py | 60 - .../_vendor/pkginfo/tests/test_commandline.py | 350 ---- .../_vendor/pkginfo/tests/test_develop.py | 27 - .../pkginfo/tests/test_distribution.py | 404 ----- .../core/_vendor/pkginfo/tests/test_index.py | 76 - .../_vendor/pkginfo/tests/test_installed.py | 138 -- .../core/_vendor/pkginfo/tests/test_sdist.py | 142 -- .../core/_vendor/pkginfo/tests/test_utils.py | 176 -- .../core/_vendor/pkginfo/tests/test_wheel.py | 96 -- poetry/core/_vendor/pkginfo/utils.py | 62 - poetry/core/_vendor/pkginfo/wheel.py | 62 - poetry/core/_vendor/pyrsistent/__init__.pyi | 213 --- poetry/core/_vendor/pyrsistent/typing.pyi | 292 ---- poetry/core/_vendor/typing.LICENSE | 254 --- poetry/core/_vendor/vendor.txt | 9 +- poetry/core/_vendor/zipp.LICENSE | 7 - poetry/core/_vendor/zipp.py | 286 ---- poetry/core/masonry/builders/builder.py | 58 +- poetry/core/packages/directory_dependency.py | 9 - poetry/core/packages/file_dependency.py | 9 - poetry/core/utils/_compat.py | 10 - pyproject.toml | 2 +- vendors/poetry.lock | 32 +- vendors/pyproject.toml | 10 - 70 files changed, 71 insertions(+), 8966 deletions(-) delete mode 100644 poetry/core/_vendor/attr/__init__.pyi delete mode 100644 poetry/core/_vendor/attr/_version_info.pyi delete mode 100644 poetry/core/_vendor/attr/converters.pyi delete mode 100644 poetry/core/_vendor/attr/exceptions.pyi delete mode 100644 poetry/core/_vendor/attr/filters.pyi delete mode 100644 poetry/core/_vendor/attr/validators.pyi delete mode 100644 poetry/core/_vendor/backports/__init__.py delete mode 100644 poetry/core/_vendor/backports/configparser/__init__.py delete mode 100644 poetry/core/_vendor/backports/configparser/helpers.py delete mode 100644 poetry/core/_vendor/configparser.LICENSE delete mode 100644 poetry/core/_vendor/configparser.py delete mode 100644 poetry/core/_vendor/contextlib2.LICENSE.txt delete mode 100644 poetry/core/_vendor/contextlib2.py create mode 100644 poetry/core/_vendor/enum34.LICENSE delete mode 100644 poetry/core/_vendor/glob2/LICENSE delete mode 100644 poetry/core/_vendor/glob2/__init__.py delete mode 100644 poetry/core/_vendor/glob2/compat.py delete mode 100644 poetry/core/_vendor/glob2/fnmatch.py delete mode 100644 poetry/core/_vendor/glob2/impl.py delete mode 100644 poetry/core/_vendor/importlib_metadata/LICENSE delete mode 100644 poetry/core/_vendor/importlib_metadata/__init__.py delete mode 100644 poetry/core/_vendor/importlib_metadata/_compat.py delete mode 100644 poetry/core/_vendor/importlib_metadata/docs/__init__.py delete mode 100644 poetry/core/_vendor/importlib_metadata/docs/changelog.rst delete mode 100644 poetry/core/_vendor/importlib_metadata/docs/conf.py delete mode 100644 poetry/core/_vendor/importlib_metadata/docs/index.rst delete mode 100644 poetry/core/_vendor/importlib_metadata/docs/using.rst delete mode 100644 poetry/core/_vendor/importlib_metadata/tests/__init__.py delete mode 100644 poetry/core/_vendor/importlib_metadata/tests/data/__init__.py delete mode 100644 poetry/core/_vendor/importlib_metadata/tests/data/example-21.12-py3-none-any.whl delete mode 100644 poetry/core/_vendor/importlib_metadata/tests/fixtures.py delete mode 100644 poetry/core/_vendor/importlib_metadata/tests/test_api.py delete mode 100644 poetry/core/_vendor/importlib_metadata/tests/test_integration.py delete mode 100644 poetry/core/_vendor/importlib_metadata/tests/test_main.py delete mode 100644 poetry/core/_vendor/importlib_metadata/tests/test_zip.py delete mode 100644 poetry/core/_vendor/pkginfo/LICENSE.txt delete mode 100644 poetry/core/_vendor/pkginfo/__init__.py delete mode 100644 poetry/core/_vendor/pkginfo/_compat.py delete mode 100644 poetry/core/_vendor/pkginfo/bdist.py delete mode 100644 poetry/core/_vendor/pkginfo/commandline.py delete mode 100644 poetry/core/_vendor/pkginfo/develop.py delete mode 100644 poetry/core/_vendor/pkginfo/distribution.py delete mode 100644 poetry/core/_vendor/pkginfo/index.py delete mode 100644 poetry/core/_vendor/pkginfo/installed.py delete mode 100644 poetry/core/_vendor/pkginfo/sdist.py delete mode 100644 poetry/core/_vendor/pkginfo/tests/__init__.py delete mode 100644 poetry/core/_vendor/pkginfo/tests/test_bdist.py delete mode 100644 poetry/core/_vendor/pkginfo/tests/test_commandline.py delete mode 100644 poetry/core/_vendor/pkginfo/tests/test_develop.py delete mode 100644 poetry/core/_vendor/pkginfo/tests/test_distribution.py delete mode 100644 poetry/core/_vendor/pkginfo/tests/test_index.py delete mode 100644 poetry/core/_vendor/pkginfo/tests/test_installed.py delete mode 100644 poetry/core/_vendor/pkginfo/tests/test_sdist.py delete mode 100644 poetry/core/_vendor/pkginfo/tests/test_utils.py delete mode 100644 poetry/core/_vendor/pkginfo/tests/test_wheel.py delete mode 100644 poetry/core/_vendor/pkginfo/utils.py delete mode 100644 poetry/core/_vendor/pkginfo/wheel.py delete mode 100644 poetry/core/_vendor/pyrsistent/__init__.pyi delete mode 100644 poetry/core/_vendor/pyrsistent/typing.pyi delete mode 100644 poetry/core/_vendor/typing.LICENSE delete mode 100644 poetry/core/_vendor/zipp.LICENSE delete mode 100644 poetry/core/_vendor/zipp.py diff --git a/poetry/core/_vendor/attr/__init__.pyi b/poetry/core/_vendor/attr/__init__.pyi deleted file mode 100644 index 38f16f06b..000000000 --- a/poetry/core/_vendor/attr/__init__.pyi +++ /dev/null @@ -1,278 +0,0 @@ -from typing import ( - Any, - Callable, - Dict, - Generic, - List, - Optional, - Sequence, - Mapping, - Tuple, - Type, - TypeVar, - Union, - overload, -) - -# `import X as X` is required to make these public -from . import exceptions as exceptions -from . import filters as filters -from . import converters as converters -from . import validators as validators - -from ._version_info import VersionInfo - -__version__: str -__version_info__: VersionInfo -__title__: str -__description__: str -__url__: str -__uri__: str -__author__: str -__email__: str -__license__: str -__copyright__: str - -_T = TypeVar("_T") -_C = TypeVar("_C", bound=type) - -_ValidatorType = Callable[[Any, Attribute[_T], _T], Any] -_ConverterType = Callable[[Any], _T] -_FilterType = Callable[[Attribute[_T], _T], bool] -_ReprType = Callable[[Any], str] -_ReprArgType = Union[bool, _ReprType] -# FIXME: in reality, if multiple validators are passed they must be in a list or tuple, -# but those are invariant and so would prevent subtypes of _ValidatorType from working -# when passed in a list or tuple. -_ValidatorArgType = Union[_ValidatorType[_T], Sequence[_ValidatorType[_T]]] - -# _make -- - -NOTHING: object - -# NOTE: Factory lies about its return type to make this possible: `x: List[int] = Factory(list)` -# Work around mypy issue #4554 in the common case by using an overload. -@overload -def Factory(factory: Callable[[], _T]) -> _T: ... -@overload -def Factory( - factory: Union[Callable[[Any], _T], Callable[[], _T]], - takes_self: bool = ..., -) -> _T: ... - -class Attribute(Generic[_T]): - name: str - default: Optional[_T] - validator: Optional[_ValidatorType[_T]] - repr: _ReprArgType - cmp: bool - eq: bool - order: bool - hash: Optional[bool] - init: bool - converter: Optional[_ConverterType[_T]] - metadata: Dict[Any, Any] - type: Optional[Type[_T]] - kw_only: bool - -# NOTE: We had several choices for the annotation to use for type arg: -# 1) Type[_T] -# - Pros: Handles simple cases correctly -# - Cons: Might produce less informative errors in the case of conflicting TypeVars -# e.g. `attr.ib(default='bad', type=int)` -# 2) Callable[..., _T] -# - Pros: Better error messages than #1 for conflicting TypeVars -# - Cons: Terrible error messages for validator checks. -# e.g. attr.ib(type=int, validator=validate_str) -# -> error: Cannot infer function type argument -# 3) type (and do all of the work in the mypy plugin) -# - Pros: Simple here, and we could customize the plugin with our own errors. -# - Cons: Would need to write mypy plugin code to handle all the cases. -# We chose option #1. - -# `attr` lies about its return type to make the following possible: -# attr() -> Any -# attr(8) -> int -# attr(validator=) -> Whatever the callable expects. -# This makes this type of assignments possible: -# x: int = attr(8) -# -# This form catches explicit None or no default but with no other arguments returns Any. -@overload -def attrib( - default: None = ..., - validator: None = ..., - repr: _ReprArgType = ..., - cmp: Optional[bool] = ..., - hash: Optional[bool] = ..., - init: bool = ..., - metadata: Optional[Mapping[Any, Any]] = ..., - type: None = ..., - converter: None = ..., - factory: None = ..., - kw_only: bool = ..., - eq: Optional[bool] = ..., - order: Optional[bool] = ..., -) -> Any: ... - -# This form catches an explicit None or no default and infers the type from the other arguments. -@overload -def attrib( - default: None = ..., - validator: Optional[_ValidatorArgType[_T]] = ..., - repr: _ReprArgType = ..., - cmp: Optional[bool] = ..., - hash: Optional[bool] = ..., - init: bool = ..., - metadata: Optional[Mapping[Any, Any]] = ..., - type: Optional[Type[_T]] = ..., - converter: Optional[_ConverterType[_T]] = ..., - factory: Optional[Callable[[], _T]] = ..., - kw_only: bool = ..., - eq: Optional[bool] = ..., - order: Optional[bool] = ..., -) -> _T: ... - -# This form catches an explicit default argument. -@overload -def attrib( - default: _T, - validator: Optional[_ValidatorArgType[_T]] = ..., - repr: _ReprArgType = ..., - cmp: Optional[bool] = ..., - hash: Optional[bool] = ..., - init: bool = ..., - metadata: Optional[Mapping[Any, Any]] = ..., - type: Optional[Type[_T]] = ..., - converter: Optional[_ConverterType[_T]] = ..., - factory: Optional[Callable[[], _T]] = ..., - kw_only: bool = ..., - eq: Optional[bool] = ..., - order: Optional[bool] = ..., -) -> _T: ... - -# This form covers type=non-Type: e.g. forward references (str), Any -@overload -def attrib( - default: Optional[_T] = ..., - validator: Optional[_ValidatorArgType[_T]] = ..., - repr: _ReprArgType = ..., - cmp: Optional[bool] = ..., - hash: Optional[bool] = ..., - init: bool = ..., - metadata: Optional[Mapping[Any, Any]] = ..., - type: object = ..., - converter: Optional[_ConverterType[_T]] = ..., - factory: Optional[Callable[[], _T]] = ..., - kw_only: bool = ..., - eq: Optional[bool] = ..., - order: Optional[bool] = ..., -) -> Any: ... -@overload -def attrs( - maybe_cls: _C, - these: Optional[Dict[str, Any]] = ..., - repr_ns: Optional[str] = ..., - repr: bool = ..., - cmp: Optional[bool] = ..., - hash: Optional[bool] = ..., - init: bool = ..., - slots: bool = ..., - frozen: bool = ..., - weakref_slot: bool = ..., - str: bool = ..., - auto_attribs: bool = ..., - kw_only: bool = ..., - cache_hash: bool = ..., - auto_exc: bool = ..., - eq: Optional[bool] = ..., - order: Optional[bool] = ..., -) -> _C: ... -@overload -def attrs( - maybe_cls: None = ..., - these: Optional[Dict[str, Any]] = ..., - repr_ns: Optional[str] = ..., - repr: bool = ..., - cmp: Optional[bool] = ..., - hash: Optional[bool] = ..., - init: bool = ..., - slots: bool = ..., - frozen: bool = ..., - weakref_slot: bool = ..., - str: bool = ..., - auto_attribs: bool = ..., - kw_only: bool = ..., - cache_hash: bool = ..., - auto_exc: bool = ..., - eq: Optional[bool] = ..., - order: Optional[bool] = ..., -) -> Callable[[_C], _C]: ... - -# TODO: add support for returning NamedTuple from the mypy plugin -class _Fields(Tuple[Attribute[Any], ...]): - def __getattr__(self, name: str) -> Attribute[Any]: ... - -def fields(cls: type) -> _Fields: ... -def fields_dict(cls: type) -> Dict[str, Attribute[Any]]: ... -def validate(inst: Any) -> None: ... - -# TODO: add support for returning a proper attrs class from the mypy plugin -# we use Any instead of _CountingAttr so that e.g. `make_class('Foo', [attr.ib()])` is valid -def make_class( - name: str, - attrs: Union[List[str], Tuple[str, ...], Dict[str, Any]], - bases: Tuple[type, ...] = ..., - repr_ns: Optional[str] = ..., - repr: bool = ..., - cmp: Optional[bool] = ..., - hash: Optional[bool] = ..., - init: bool = ..., - slots: bool = ..., - frozen: bool = ..., - weakref_slot: bool = ..., - str: bool = ..., - auto_attribs: bool = ..., - kw_only: bool = ..., - cache_hash: bool = ..., - auto_exc: bool = ..., - eq: Optional[bool] = ..., - order: Optional[bool] = ..., -) -> type: ... - -# _funcs -- - -# TODO: add support for returning TypedDict from the mypy plugin -# FIXME: asdict/astuple do not honor their factory args. waiting on one of these: -# https://github.com/python/mypy/issues/4236 -# https://github.com/python/typing/issues/253 -def asdict( - inst: Any, - recurse: bool = ..., - filter: Optional[_FilterType[Any]] = ..., - dict_factory: Type[Mapping[Any, Any]] = ..., - retain_collection_types: bool = ..., -) -> Dict[str, Any]: ... - -# TODO: add support for returning NamedTuple from the mypy plugin -def astuple( - inst: Any, - recurse: bool = ..., - filter: Optional[_FilterType[Any]] = ..., - tuple_factory: Type[Sequence[Any]] = ..., - retain_collection_types: bool = ..., -) -> Tuple[Any, ...]: ... -def has(cls: type) -> bool: ... -def assoc(inst: _T, **changes: Any) -> _T: ... -def evolve(inst: _T, **changes: Any) -> _T: ... - -# _config -- - -def set_run_validators(run: bool) -> None: ... -def get_run_validators() -> bool: ... - -# aliases -- - -s = attributes = attrs -ib = attr = attrib -dataclass = attrs # Technically, partial(attrs, auto_attribs=True) ;) diff --git a/poetry/core/_vendor/attr/_version_info.pyi b/poetry/core/_vendor/attr/_version_info.pyi deleted file mode 100644 index 45ced0863..000000000 --- a/poetry/core/_vendor/attr/_version_info.pyi +++ /dev/null @@ -1,9 +0,0 @@ -class VersionInfo: - @property - def year(self) -> int: ... - @property - def minor(self) -> int: ... - @property - def micro(self) -> int: ... - @property - def releaselevel(self) -> str: ... diff --git a/poetry/core/_vendor/attr/converters.pyi b/poetry/core/_vendor/attr/converters.pyi deleted file mode 100644 index 63b2a3866..000000000 --- a/poetry/core/_vendor/attr/converters.pyi +++ /dev/null @@ -1,12 +0,0 @@ -from typing import TypeVar, Optional, Callable, overload -from . import _ConverterType - -_T = TypeVar("_T") - -def optional( - converter: _ConverterType[_T] -) -> _ConverterType[Optional[_T]]: ... -@overload -def default_if_none(default: _T) -> _ConverterType[_T]: ... -@overload -def default_if_none(*, factory: Callable[[], _T]) -> _ConverterType[_T]: ... diff --git a/poetry/core/_vendor/attr/exceptions.pyi b/poetry/core/_vendor/attr/exceptions.pyi deleted file mode 100644 index 736fde2e1..000000000 --- a/poetry/core/_vendor/attr/exceptions.pyi +++ /dev/null @@ -1,15 +0,0 @@ -from typing import Any - -class FrozenInstanceError(AttributeError): - msg: str = ... - -class AttrsAttributeNotFoundError(ValueError): ... -class NotAnAttrsClassError(ValueError): ... -class DefaultAlreadySetError(RuntimeError): ... -class UnannotatedAttributeError(RuntimeError): ... -class PythonTooOldError(RuntimeError): ... - -class NotCallableError(TypeError): - msg: str = ... - value: Any = ... - def __init__(self, msg: str, value: Any) -> None: ... diff --git a/poetry/core/_vendor/attr/filters.pyi b/poetry/core/_vendor/attr/filters.pyi deleted file mode 100644 index 68368fe2b..000000000 --- a/poetry/core/_vendor/attr/filters.pyi +++ /dev/null @@ -1,5 +0,0 @@ -from typing import Union, Any -from . import Attribute, _FilterType - -def include(*what: Union[type, Attribute[Any]]) -> _FilterType[Any]: ... -def exclude(*what: Union[type, Attribute[Any]]) -> _FilterType[Any]: ... diff --git a/poetry/core/_vendor/attr/validators.pyi b/poetry/core/_vendor/attr/validators.pyi deleted file mode 100644 index 9a22abb19..000000000 --- a/poetry/core/_vendor/attr/validators.pyi +++ /dev/null @@ -1,66 +0,0 @@ -from typing import ( - Container, - List, - Union, - TypeVar, - Type, - Any, - Optional, - Tuple, - Iterable, - Mapping, - Callable, - Match, - AnyStr, - overload, -) -from . import _ValidatorType - -_T = TypeVar("_T") -_T1 = TypeVar("_T1") -_T2 = TypeVar("_T2") -_T3 = TypeVar("_T3") -_I = TypeVar("_I", bound=Iterable) -_K = TypeVar("_K") -_V = TypeVar("_V") -_M = TypeVar("_M", bound=Mapping) - -# To be more precise on instance_of use some overloads. -# If there are more than 3 items in the tuple then we fall back to Any -@overload -def instance_of(type: Type[_T]) -> _ValidatorType[_T]: ... -@overload -def instance_of(type: Tuple[Type[_T]]) -> _ValidatorType[_T]: ... -@overload -def instance_of( - type: Tuple[Type[_T1], Type[_T2]] -) -> _ValidatorType[Union[_T1, _T2]]: ... -@overload -def instance_of( - type: Tuple[Type[_T1], Type[_T2], Type[_T3]] -) -> _ValidatorType[Union[_T1, _T2, _T3]]: ... -@overload -def instance_of(type: Tuple[type, ...]) -> _ValidatorType[Any]: ... -def provides(interface: Any) -> _ValidatorType[Any]: ... -def optional( - validator: Union[_ValidatorType[_T], List[_ValidatorType[_T]]] -) -> _ValidatorType[Optional[_T]]: ... -def in_(options: Container[_T]) -> _ValidatorType[_T]: ... -def and_(*validators: _ValidatorType[_T]) -> _ValidatorType[_T]: ... -def matches_re( - regex: AnyStr, - flags: int = ..., - func: Optional[ - Callable[[AnyStr, AnyStr, int], Optional[Match[AnyStr]]] - ] = ..., -) -> _ValidatorType[AnyStr]: ... -def deep_iterable( - member_validator: _ValidatorType[_T], - iterable_validator: Optional[_ValidatorType[_I]] = ..., -) -> _ValidatorType[_I]: ... -def deep_mapping( - key_validator: _ValidatorType[_K], - value_validator: _ValidatorType[_V], - mapping_validator: Optional[_ValidatorType[_M]] = ..., -) -> _ValidatorType[_M]: ... -def is_callable() -> _ValidatorType[_T]: ... diff --git a/poetry/core/_vendor/backports/__init__.py b/poetry/core/_vendor/backports/__init__.py deleted file mode 100644 index 1fc3c62e8..000000000 --- a/poetry/core/_vendor/backports/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -# A Python "namespace package" http://www.python.org/dev/peps/pep-0382/ -# This always goes inside of a namespace package's __init__.py - -from pkgutil import extend_path - -__path__ = extend_path(__path__, __name__) diff --git a/poetry/core/_vendor/backports/configparser/__init__.py b/poetry/core/_vendor/backports/configparser/__init__.py deleted file mode 100644 index 3bcbd4bc6..000000000 --- a/poetry/core/_vendor/backports/configparser/__init__.py +++ /dev/null @@ -1,1473 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# flake8: noqa - -"""Configuration file parser. - -A configuration file consists of sections, lead by a "[section]" header, -and followed by "name: value" entries, with continuations and such in -the style of RFC 822. - -Intrinsic defaults can be specified by passing them into the -ConfigParser constructor as a dictionary. - -class: - -ConfigParser -- responsible for parsing a list of - configuration files, and managing the parsed database. - - methods: - - __init__(defaults=None, dict_type=_default_dict, allow_no_value=False, - delimiters=('=', ':'), comment_prefixes=('#', ';'), - inline_comment_prefixes=None, strict=True, - empty_lines_in_values=True, default_section='DEFAULT', - interpolation=, converters=): - Create the parser. When `defaults' is given, it is initialized into the - dictionary or intrinsic defaults. The keys must be strings, the values - must be appropriate for %()s string interpolation. - - When `dict_type' is given, it will be used to create the dictionary - objects for the list of sections, for the options within a section, and - for the default values. - - When `delimiters' is given, it will be used as the set of substrings - that divide keys from values. - - When `comment_prefixes' is given, it will be used as the set of - substrings that prefix comments in empty lines. Comments can be - indented. - - When `inline_comment_prefixes' is given, it will be used as the set of - substrings that prefix comments in non-empty lines. - - When `strict` is True, the parser won't allow for any section or option - duplicates while reading from a single source (file, string or - dictionary). Default is True. - - When `empty_lines_in_values' is False (default: True), each empty line - marks the end of an option. Otherwise, internal empty lines of - a multiline option are kept as part of the value. - - When `allow_no_value' is True (default: False), options without - values are accepted; the value presented for these is None. - - When `default_section' is given, the name of the special section is - named accordingly. By default it is called ``"DEFAULT"`` but this can - be customized to point to any other valid section name. Its current - value can be retrieved using the ``parser_instance.default_section`` - attribute and may be modified at runtime. - - When `interpolation` is given, it should be an Interpolation subclass - instance. It will be used as the handler for option value - pre-processing when using getters. RawConfigParser objects don't do - any sort of interpolation, whereas ConfigParser uses an instance of - BasicInterpolation. The library also provides a ``zc.buildbot`` - inspired ExtendedInterpolation implementation. - - When `converters` is given, it should be a dictionary where each key - represents the name of a type converter and each value is a callable - implementing the conversion from string to the desired datatype. Every - converter gets its corresponding get*() method on the parser object and - section proxies. - - sections() - Return all the configuration section names, sans DEFAULT. - - has_section(section) - Return whether the given section exists. - - has_option(section, option) - Return whether the given option exists in the given section. - - options(section) - Return list of configuration options for the named section. - - read(filenames, encoding=None) - Read and parse the iterable of named configuration files, given by - name. A single filename is also allowed. Non-existing files - are ignored. Return list of successfully read files. - - read_file(f, filename=None) - Read and parse one configuration file, given as a file object. - The filename defaults to f.name; it is only used in error - messages (if f has no `name' attribute, the string `' is used). - - read_string(string) - Read configuration from a given string. - - read_dict(dictionary) - Read configuration from a dictionary. Keys are section names, - values are dictionaries with keys and values that should be present - in the section. If the used dictionary type preserves order, sections - and their keys will be added in order. Values are automatically - converted to strings. - - get(section, option, raw=False, vars=None, fallback=_UNSET) - Return a string value for the named option. All % interpolations are - expanded in the return values, based on the defaults passed into the - constructor and the DEFAULT section. Additional substitutions may be - provided using the `vars' argument, which must be a dictionary whose - contents override any pre-existing defaults. If `option' is a key in - `vars', the value from `vars' is used. - - getint(section, options, raw=False, vars=None, fallback=_UNSET) - Like get(), but convert value to an integer. - - getfloat(section, options, raw=False, vars=None, fallback=_UNSET) - Like get(), but convert value to a float. - - getboolean(section, options, raw=False, vars=None, fallback=_UNSET) - Like get(), but convert value to a boolean (currently case - insensitively defined as 0, false, no, off for False, and 1, true, - yes, on for True). Returns False or True. - - items(section=_UNSET, raw=False, vars=None) - If section is given, return a list of tuples with (name, value) for - each option in the section. Otherwise, return a list of tuples with - (section_name, section_proxy) for each section, including DEFAULTSECT. - - remove_section(section) - Remove the given file section and all its options. - - remove_option(section, option) - Remove the given option from the given section. - - set(section, option, value) - Set the given option. - - write(fp, space_around_delimiters=True) - Write the configuration state in .ini format. If - `space_around_delimiters' is True (the default), delimiters - between keys and values are surrounded by spaces. -""" - -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function -from __future__ import unicode_literals - -try: - from collections.abc import MutableMapping -except ImportError: - from collections import MutableMapping -import functools -import io -import itertools -import os -import re -import sys -import warnings - -from poetry.core._vendor.backports.configparser.helpers import OrderedDict as _default_dict -from poetry.core._vendor.backports.configparser.helpers import ChainMap as _ChainMap -from poetry.core._vendor.backports.configparser.helpers import from_none, open, str, PY2 -from poetry.core._vendor.backports.configparser.helpers import PathLike, fspath -from poetry.core._vendor.backports.configparser.helpers import MutableMapping - -__all__ = [ - "NoSectionError", - "DuplicateOptionError", - "DuplicateSectionError", - "NoOptionError", - "InterpolationError", - "InterpolationDepthError", - "InterpolationMissingOptionError", - "InterpolationSyntaxError", - "ParsingError", - "MissingSectionHeaderError", - "ConfigParser", - "SafeConfigParser", - "RawConfigParser", - "Interpolation", - "BasicInterpolation", - "ExtendedInterpolation", - "LegacyInterpolation", - "SectionProxy", - "ConverterMapping", - "DEFAULTSECT", - "MAX_INTERPOLATION_DEPTH", -] - -DEFAULTSECT = "DEFAULT" - -MAX_INTERPOLATION_DEPTH = 10 - - -# exception classes -class Error(Exception): - """Base class for ConfigParser exceptions.""" - - def __init__(self, msg=''): - self.message = msg - Exception.__init__(self, msg) - - def __repr__(self): - return self.message - - __str__ = __repr__ - - -class NoSectionError(Error): - """Raised when no section matches a requested option.""" - - def __init__(self, section): - Error.__init__(self, 'No section: %r' % (section,)) - self.section = section - self.args = (section,) - - -class DuplicateSectionError(Error): - """Raised when a section is repeated in an input source. - - Possible repetitions that raise this exception are: multiple creation - using the API or in strict parsers when a section is found more than once - in a single input file, string or dictionary. - """ - - def __init__(self, section, source=None, lineno=None): - msg = [repr(section), " already exists"] - if source is not None: - message = ["While reading from ", repr(source)] - if lineno is not None: - message.append(" [line {0:2d}]".format(lineno)) - message.append(": section ") - message.extend(msg) - msg = message - else: - msg.insert(0, "Section ") - Error.__init__(self, "".join(msg)) - self.section = section - self.source = source - self.lineno = lineno - self.args = (section, source, lineno) - - -class DuplicateOptionError(Error): - """Raised by strict parsers when an option is repeated in an input source. - - Current implementation raises this exception only when an option is found - more than once in a single file, string or dictionary. - """ - - def __init__(self, section, option, source=None, lineno=None): - msg = [repr(option), " in section ", repr(section), " already exists"] - if source is not None: - message = ["While reading from ", repr(source)] - if lineno is not None: - message.append(" [line {0:2d}]".format(lineno)) - message.append(": option ") - message.extend(msg) - msg = message - else: - msg.insert(0, "Option ") - Error.__init__(self, "".join(msg)) - self.section = section - self.option = option - self.source = source - self.lineno = lineno - self.args = (section, option, source, lineno) - - -class NoOptionError(Error): - """A requested option was not found.""" - - def __init__(self, option, section): - Error.__init__(self, "No option %r in section: %r" % (option, section)) - self.option = option - self.section = section - self.args = (option, section) - - -class InterpolationError(Error): - """Base class for interpolation-related exceptions.""" - - def __init__(self, option, section, msg): - Error.__init__(self, msg) - self.option = option - self.section = section - self.args = (option, section, msg) - - -class InterpolationMissingOptionError(InterpolationError): - """A string substitution required a setting which was not available.""" - - def __init__(self, option, section, rawval, reference): - msg = ( - "Bad value substitution: option {0!r} in section {1!r} contains " - "an interpolation key {2!r} which is not a valid option name. " - "Raw value: {3!r}".format(option, section, reference, rawval) - ) - InterpolationError.__init__(self, option, section, msg) - self.reference = reference - self.args = (option, section, rawval, reference) - - -class InterpolationSyntaxError(InterpolationError): - """Raised when the source text contains invalid syntax. - - Current implementation raises this exception when the source text into - which substitutions are made does not conform to the required syntax. - """ - - -class InterpolationDepthError(InterpolationError): - """Raised when substitutions are nested too deeply.""" - - def __init__(self, option, section, rawval): - msg = ( - "Recursion limit exceeded in value substitution: option {0!r} " - "in section {1!r} contains an interpolation key which " - "cannot be substituted in {2} steps. Raw value: {3!r}" - "".format(option, section, MAX_INTERPOLATION_DEPTH, rawval) - ) - InterpolationError.__init__(self, option, section, msg) - self.args = (option, section, rawval) - - -class ParsingError(Error): - """Raised when a configuration file does not follow legal syntax.""" - - def __init__(self, source=None, filename=None): - # Exactly one of `source'/`filename' arguments has to be given. - # `filename' kept for compatibility. - if filename and source: - raise ValueError( - "Cannot specify both `filename' and `source'. " "Use `source'." - ) - elif not filename and not source: - raise ValueError("Required argument `source' not given.") - elif filename: - source = filename - Error.__init__(self, 'Source contains parsing errors: %r' % source) - self.source = source - self.errors = [] - self.args = (source,) - - @property - def filename(self): - """Deprecated, use `source'.""" - warnings.warn( - "The 'filename' attribute will be removed in future versions. " - "Use 'source' instead.", - DeprecationWarning, - stacklevel=2, - ) - return self.source - - @filename.setter - def filename(self, value): - """Deprecated, user `source'.""" - warnings.warn( - "The 'filename' attribute will be removed in future versions. " - "Use 'source' instead.", - DeprecationWarning, - stacklevel=2, - ) - self.source = value - - def append(self, lineno, line): - self.errors.append((lineno, line)) - self.message += '\n\t[line %2d]: %s' % (lineno, line) - - -class MissingSectionHeaderError(ParsingError): - """Raised when a key-value pair is found before any section header.""" - - def __init__(self, filename, lineno, line): - Error.__init__( - self, - 'File contains no section headers.\nfile: %r, line: %d\n%r' - % (filename, lineno, line), - ) - self.source = filename - self.lineno = lineno - self.line = line - self.args = (filename, lineno, line) - - -# Used in parser getters to indicate the default behaviour when a specific -# option is not found it to raise an exception. Created to enable `None' as -# a valid fallback value. -_UNSET = object() - - -class Interpolation(object): - """Dummy interpolation that passes the value through with no changes.""" - - def before_get(self, parser, section, option, value, defaults): - return value - - def before_set(self, parser, section, option, value): - return value - - def before_read(self, parser, section, option, value): - return value - - def before_write(self, parser, section, option, value): - return value - - -class BasicInterpolation(Interpolation): - """Interpolation as implemented in the classic ConfigParser. - - The option values can contain format strings which refer to other values in - the same section, or values in the special default section. - - For example: - - something: %(dir)s/whatever - - would resolve the "%(dir)s" to the value of dir. All reference - expansions are done late, on demand. If a user needs to use a bare % in - a configuration file, she can escape it by writing %%. Other % usage - is considered a user error and raises `InterpolationSyntaxError'.""" - - _KEYCRE = re.compile(r"%\(([^)]+)\)s") - - def before_get(self, parser, section, option, value, defaults): - L = [] - self._interpolate_some(parser, option, L, value, section, defaults, 1) - return ''.join(L) - - def before_set(self, parser, section, option, value): - tmp_value = value.replace('%%', '') # escaped percent signs - tmp_value = self._KEYCRE.sub('', tmp_value) # valid syntax - if '%' in tmp_value: - raise ValueError( - "invalid interpolation syntax in %r at " - "position %d" % (value, tmp_value.find('%')) - ) - return value - - def _interpolate_some(self, parser, option, accum, rest, section, map, depth): - rawval = parser.get(section, option, raw=True, fallback=rest) - if depth > MAX_INTERPOLATION_DEPTH: - raise InterpolationDepthError(option, section, rawval) - while rest: - p = rest.find("%") - if p < 0: - accum.append(rest) - return - if p > 0: - accum.append(rest[:p]) - rest = rest[p:] - # p is no longer used - c = rest[1:2] - if c == "%": - accum.append("%") - rest = rest[2:] - elif c == "(": - m = self._KEYCRE.match(rest) - if m is None: - raise InterpolationSyntaxError( - option, - section, - "bad interpolation variable reference %r" % rest, - ) - var = parser.optionxform(m.group(1)) - rest = rest[m.end() :] - try: - v = map[var] - except KeyError: - raise from_none( - InterpolationMissingOptionError(option, section, rawval, var) - ) - if "%" in v: - self._interpolate_some( - parser, option, accum, v, section, map, depth + 1 - ) - else: - accum.append(v) - else: - raise InterpolationSyntaxError( - option, - section, - "'%%' must be followed by '%%' or '(', " "found: %r" % (rest,), - ) - - -class ExtendedInterpolation(Interpolation): - """Advanced variant of interpolation, supports the syntax used by - `zc.buildout'. Enables interpolation between sections.""" - - _KEYCRE = re.compile(r"\$\{([^}]+)\}") - - def before_get(self, parser, section, option, value, defaults): - L = [] - self._interpolate_some(parser, option, L, value, section, defaults, 1) - return ''.join(L) - - def before_set(self, parser, section, option, value): - tmp_value = value.replace('$$', '') # escaped dollar signs - tmp_value = self._KEYCRE.sub('', tmp_value) # valid syntax - if '$' in tmp_value: - raise ValueError( - "invalid interpolation syntax in %r at " - "position %d" % (value, tmp_value.find('$')) - ) - return value - - def _interpolate_some(self, parser, option, accum, rest, section, map, depth): - rawval = parser.get(section, option, raw=True, fallback=rest) - if depth > MAX_INTERPOLATION_DEPTH: - raise InterpolationDepthError(option, section, rawval) - while rest: - p = rest.find("$") - if p < 0: - accum.append(rest) - return - if p > 0: - accum.append(rest[:p]) - rest = rest[p:] - # p is no longer used - c = rest[1:2] - if c == "$": - accum.append("$") - rest = rest[2:] - elif c == "{": - m = self._KEYCRE.match(rest) - if m is None: - raise InterpolationSyntaxError( - option, - section, - "bad interpolation variable reference %r" % rest, - ) - path = m.group(1).split(':') - rest = rest[m.end() :] - sect = section - opt = option - try: - if len(path) == 1: - opt = parser.optionxform(path[0]) - v = map[opt] - elif len(path) == 2: - sect = path[0] - opt = parser.optionxform(path[1]) - v = parser.get(sect, opt, raw=True) - else: - raise InterpolationSyntaxError( - option, section, "More than one ':' found: %r" % (rest,) - ) - except (KeyError, NoSectionError, NoOptionError): - raise from_none( - InterpolationMissingOptionError( - option, section, rawval, ":".join(path) - ) - ) - if "$" in v: - self._interpolate_some( - parser, - opt, - accum, - v, - sect, - dict(parser.items(sect, raw=True)), - depth + 1, - ) - else: - accum.append(v) - else: - raise InterpolationSyntaxError( - option, - section, - "'$' must be followed by '$' or '{', " "found: %r" % (rest,), - ) - - -class LegacyInterpolation(Interpolation): - """Deprecated interpolation used in old versions of ConfigParser. - Use BasicInterpolation or ExtendedInterpolation instead.""" - - _KEYCRE = re.compile(r"%\(([^)]*)\)s|.") - - def before_get(self, parser, section, option, value, vars): - rawval = value - depth = MAX_INTERPOLATION_DEPTH - while depth: # Loop through this until it's done - depth -= 1 - if value and "%(" in value: - replace = functools.partial(self._interpolation_replace, parser=parser) - value = self._KEYCRE.sub(replace, value) - try: - value = value % vars - except KeyError as e: - raise from_none( - InterpolationMissingOptionError( - option, section, rawval, e.args[0] - ) - ) - else: - break - if value and "%(" in value: - raise InterpolationDepthError(option, section, rawval) - return value - - def before_set(self, parser, section, option, value): - return value - - @staticmethod - def _interpolation_replace(match, parser): - s = match.group(1) - if s is None: - return match.group() - else: - return "%%(%s)s" % parser.optionxform(s) - - -class RawConfigParser(MutableMapping): - """ConfigParser that does not do interpolation.""" - - # Regular expressions for parsing section headers and options - _SECT_TMPL = r""" - \[ # [ - (?P
[^]]+) # very permissive! - \] # ] - """ - _OPT_TMPL = r""" - (?P