3 vhVF @ s d dl mZmZ d dlZd dlZd dlZd dlmZ d dlm Z d dl mZ d dlm Z mZ d dlmZmZ d dlmZ dd dZdd ZdddZG dd deZG dd deZG dd deZdS ) )absolute_importunicode_literalsN)defaultdict)partial) import_module)DistutilsOptionErrorDistutilsFileError) LegacyVersionparse)string_typesFc C s ddl m}m} tjj| } tjj| s4td| tj }tj tjj | zJ| }|rb|j ng }| |krx|j| |j ||d t||j|d}W dtj | X 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 )Distribution _Distributionz%Configuration file %s does not exist.) filenames)ignore_option_errorsN)Zsetuptools.distr r ospathabspathisfiler getcwdchdirdirnameZfind_config_filesappendZparse_config_filesparse_configurationcommand_optionsconfiguration_to_dict) filepathZfind_othersr r r Zcurrent_directoryZdistr handlers r /usr/lib/python3.6/config.pyread_configuration s$ r c C sl t t}x^| D ]V}|j}|j}xD|jD ]:}t|d| d}|dkrNt||}n| }||| |<