�
_�dHf � � � d Z ddlZddlZddlZddlmZ ddlmZ ddlmZ ddlm Z m
Z
mZmZm
Z
mZmZmZmZmZmZmZ ddlmZmZ dd lmZ dd
lmZmZ ddlmZ ddl m!Z!m"Z" dd
l#m$Z$ ddl%m&Z& e rddl'm(Z( ddl)m*Z* ee+ejX f Z-ededef f Z. ede.f Z/ eded �� Z0 d8de-de1fd�Z2ddde-ddfd�Z3 d9ddde-dee- de4ded f
d�Z5d e0d!e+fd"�Z6d#ed de1fd$�Z7 d:d%dd&e/ded' fd(�Z8d)e+d*e+d+e9fd,�Z: G d-� d.e
e0 � Z; G d/� d0e;d1 � Z< G d2� d3e;d � Z= G d4� d5e$� Z> G d6� d7e$� Z?y);a<
Load setuptools configuration from ``setup.cfg`` files.
**API will be made private in the future**
To read project metadata, consider using
``build.util.project_wheel_metadata`` (https://pypi.org/project/build/).
For simple scenarios, you can also try parsing the file directly
with the help of ``configparser``.
� N)�defaultdict)�partial��wraps)�
TYPE_CHECKING�Callable�Any�Dict�Generic�Iterable�List�Optional�Set�Tuple�TypeVar�Union� )� FileError�OptionError)�default_environment)�InvalidRequirement�Requirement)�SpecifierSet)�InvalidVersion�Version)�SetuptoolsDeprecationWarning� )�expand)�DistributionMetadata��Distribution�str�Target)r! r )�bound�filepath�returnc �v � ddl m} |� }|r|j � ng }t || ||� }t |� S )a, Read given configuration file and returns options from it as a dict.
:param str|unicode filepath: Path to configuration file
to get options from.
:param bool find_others: Whether to search for other configuration files
which could be on in various places.
:param bool ignore_option_errors: Whether to silently ignore
options, values of which could not be resolved (e.g. due to exceptions
in directives such as file:, attr:, etc.).
If False exceptions are propagated as expected.
:rtype: dict
r r )�setuptools.distr! �find_config_files�_apply�configuration_to_dict)r% �find_others�ignore_option_errorsr! �dist� filenames�handlerss �</usr/lib/python3/dist-packages/setuptools/config/setupcfg.py�read_configurationr2 8 s< |