U e^eSZ@sddlZddlZddlZddlZddlZddlZddlZddlmZddlm Z ddlm Z ddl m Z ddl Z ddlmZmZddlmZmZddlmZGd d d Ze jd d ZdddZddZddZdddZGdddZGdddeZGdddeZdS)N) defaultdict)partialwraps)iglob)DistutilsOptionErrorDistutilsFileError) LegacyVersionparse) SpecifierSetc@s eZdZdZddZddZdS) StaticModulez0 Attempt to load the module by the name c CsLtj|}t|j}|}W5QRXt|}t| t |` dSN) importlibutil find_specopenoriginreadastr varsupdatelocalsself)rnamespecstrmsrcmoduler9/tmp/pip-install-kjbsd5ow/setuptools/setuptools/config.py__init__s    zStaticModule.__init__c sXztfdd|jjDWStk rR}ztdjft|W5d}~XYnXdS)Nc3sH|]@}t|tjr|jD](}t|tjr|jkrt|jVqqdSr ) isinstancerZAssigntargetsNameid literal_evalvalue).0Z statementtargetattrrr #s  z+StaticModule.__getattr__..z#{self.name} has no attribute {attr})nextrbody ExceptionAttributeErrorformatr)rr*err)r __getattr__!s   zStaticModule.__getattr__N)__name__ __module__ __qualname____doc__r r2rrrrr sr c cs,ztjd|dVW5tj|XdS)zH Add path to front of sys.path for the duration of the context. rN)syspathremoveinsert)r8rrr patch_path0s r;Fc Csddlm}m}tj|}tj|s4td|t}t tj |zJ|}|rb| ng}||krx| ||j ||dt||j|d}W5t |Xt|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_errors)Zsetuptools.distr<r=osr8abspathisfilergetcwdchdirdirnamefind_config_filesappendparse_config_filesparse_configurationcommand_optionsconfiguration_to_dict) filepathZ find_othersr?r<r=Zcurrent_directorydistr>handlersrrrread_configuration<s&      rOcCs.djft}tt||}t|||}|S)z Given a target object and option key, get that option from the target object, either through a get_{key} method or from an attribute directly. z get_{key})r0r functoolsrgetattr) target_objkeyZ getter_nameZ by_attributegetterrrr _get_optionis rUcCs<tt}|D]*}|jD]}t|j|}|||j|<qq |S)zReturns configuration data gathered by given handlers as a dict. :param list[ConfigHandler] handlers: Handlers list, usually from parse_configuration() :rtype: dict )rdict set_optionsrUrRsection_prefix)rNZ config_dicthandleroptionr&rrrrKus   rKcCs6t|||}|t|j|||j}|||fS)aPerforms additional parsing of configuration options for a distribution. Returns a list of used option handlers. :param Distribution distribution: :param dict command_options: :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: list )ConfigOptionsHandlerr ConfigMetadataHandlermetadata package_dir) distributionrJr?optionsmetarrrrIs rIc@seZdZdZdZiZd'ddZeddZdd Z e d(d d Z e d)d dZ e ddZ e ddZe ddZe ddZeddZeddZe d*ddZe ddZe d+dd Zd!d"Zd#d$Zd%d&ZdS), ConfigHandlerz1Handles metadata supplied in configuration files.NFcCs^i}|j}|D].\}}||s&q||dd}|||<q||_||_||_g|_dS)N.) rXitems startswithreplacestripr?rRsectionsrW)rrRr`r?rirX section_namesection_optionsrrrr s  zConfigHandler.__init__cCstd|jjdS).Metadata item name to parser function mapping.z!%s must provide .parsers propertyN)NotImplementedError __class__r3)rrrrparserss zConfigHandler.parsersc Cst}|j}|j||}t|||}||kr6t||r>dSd}|j|}|rz ||}Wn tk r~d}|jszYnX|rdSt|d|d}|dkrt |||n|||j |dS)NFTzset_%s) tuplerRaliasesgetrQKeyErrorror.r?setattrrWrG) rZ option_namer&unknownrRZ current_valueZ skip_optionparsersetterrrr __setitem__s0   zConfigHandler.__setitem__,cCs8t|tr|Sd|kr |}n ||}dd|DS)zRepresents value as a list. Value is split either by separator (defaults to comma) or by lines. :param value: :param separator: List items separator character. :rtype: list  cSsg|]}|r|qSr)rh)r'chunkrrr sz-ConfigHandler._parse_list..)r!list splitlinessplit)clsr& separatorrrr _parse_lists   zConfigHandler._parse_listc sjd}|j|d}g}|D]Jtfdd|DrZ|tddttjDq|q|S)aEquivalent to _parse_list() but expands any glob patterns using glob(). However, unlike with glob() calls, the results remain relative paths. :param value: :param separator: List items separator character. :rtype: list )*?[]{}rc3s|]}|kVqdSr r)r'charr&rrr+sz1ConfigHandler._parse_list_glob..css |]}tj|tVqdSr )r@r8relpathrCr'r8rrrr+s) ranyextendsortedrr@r8rArG)rr&rZglob_charactersvaluesZexpanded_valuesrrr_parse_list_globs    zConfigHandler._parse_list_globcCsPd}i}||D]8}||\}}}||kr:td||||<q|S)zPRepresents value as a dict. :param value: :rtype: dict =z(Unable to parse option value to dict: %s)r partitionrrh)rr&rresultlinerSsepvalrrr _parse_dict szConfigHandler._parse_dictcCs|}|dkS)zQRepresents value as boolean. :param value: :rtype: bool )1trueyes)lower)rr&rrr _parse_bool3szConfigHandler._parse_boolcsfdd}|S)zReturns a parser function to make sure field inputs are not files. Parses a value after getting the key so error messages are more informative. :param key: :rtype: callable cs d}||rtd|S)Nfile:zCOnly strings are accepted for the {0} field, files are not accepted)rf ValueErrorr0)r&Zexclude_directiverSrrrvIs z3ConfigHandler._exclude_files_parser..parserr)rrSrvrrr_exclude_files_parser=s z#ConfigHandler._exclude_files_parsercs\d}t|ts|S||s |S|t|d}dd|dD}dfdd|DS)aORepresents value as a string, allowing including text from nearest files using `file:` directive. Directive is sandboxed and won't reach anything outside directory with setup.py. Examples: file: README.rst, CHANGELOG.md, src/file.txt :param str value: :rtype: str rNcss|]}tj|VqdSr )r@r8rArhrrrrr+ksz,ConfigHandler._parse_file..ryrzc3s.|]&}|stj|r|VqdS)TN) _assert_localr@r8rB _read_filerrrrr+ls  )r!strrflenrjoin)rr&Zinclude_directiverZ filepathsrrr _parse_fileTs  zConfigHandler._parse_filecCs|tstd|dS)Nz#`file:` directive can not access %s)rfr@rCr)rLrrrrrszConfigHandler._assert_localc Cs.tj|dd}|W5QRSQRXdS)Nzutf-8)encoding)iorr)rLfrrrrwszConfigHandler._read_filec Csd}||s|S||dd}|}d|}|p@d}t}|r|d|kr||d}|dd} t | dkrtj t| d}| d}q|}nd|krtj t|d}t |Dzt t ||WW5QRStk rt|} YnXW5QRXt | |S)zRepresents value as a module attribute. Examples: attr: package.attr attr: package.module.attr :param str value: :rtype: str zattr:rcrdr r/)rfrgrhrpoprr@rCrsplitrr8r;rQr r.r import_module) rr&r^Zattr_directiveZ attrs_path attr_name module_name parent_pathZ custom_pathpartsrrrr _parse_attr|s0         zConfigHandler._parse_attrcsfdd}|S)zReturns parser function to represents value as a list. Parses a value applying given methods one after another. :param parse_methods: :rtype: callable cs|}D] }||}q|Sr r)r&parsedmethod parse_methodsrrr s z1ConfigHandler._get_parser_compound..parser)rrr rrr_get_parser_compounds z"ConfigHandler._get_parser_compoundcCs6i}|pdd}|D]\}\}}||||<q|S)zParses section options into a dictionary. Optionally applies a given parser to values. :param dict section_options: :param callable values_parser: :rtype: dict cSs|Sr r)rrrrz6ConfigHandler._parse_section_to_dict..)re)rrkZ values_parserr&rS_rrrr_parse_section_to_dicts  z$ConfigHandler._parse_section_to_dictc Cs<|D].\}\}}z |||<Wqtk r4YqXqdS)zQParses configuration file section. :param dict section_options: N)rers)rrkrrr&rrr parse_sections  zConfigHandler.parse_sectioncCsb|jD]R\}}d}|r"d|}t|d|ddd}|dkrTtd|j|f||q dS)zTParses configuration file items from one or more related sections. rcz_%szparse_section%srd__Nz0Unsupported distribution option section: [%s.%s])rirerQrgrrX)rrjrkZmethod_postfixZsection_parser_methodrrrr s zConfigHandler.parsecstfdd}|S)zthis function will wrap around parameters that are deprecated :param msg: deprecation message :param warning_class: class of warning exception to be raised :param func: function to be wrapped around cst||Sr )warningswarn)argskwargsfuncmsg warning_classrrconfig_handlers z@ConfigHandler._deprecated_config_handler..config_handlerr)rrrrrrrr_deprecated_config_handlersz(ConfigHandler._deprecated_config_handler)F)ry)ry)N)N)r3r4r5r6rXrqr propertyrorx classmethodrrrrrr staticmethodrrrrrrr rrrrrrbs@  &         -   rbcsHeZdZdZdddddZdZdfd d Zed d Zd dZ Z S)r\r]url description classifiers platforms)Z home_pagesummary classifierplatformFNcstt||||||_dSr )superr\r r^)rrRr`r?r^rnrrr s  zConfigMetadataHandler.__init__cCs^|j}|j}|j}|j}|||||dt|||||d||ddt||||j|d S)rlz[The requires parameter is deprecated, please use install_requires for runtime dependencies.license license_filezDThe license_file parameter is deprecated, use license_files instead.) rkeywordsprovidesrequires obsoletesrrrZ license_filesrlong_descriptionversionZ project_urls)rrrrrDeprecationWarningr_parse_version)r parse_listZ parse_file parse_dictZexclude_files_parserrrrros4 zConfigMetadataHandler.parserscCs||}||krB|}tt|tr>d}t|jft|S|||j }t |r^|}t|t st |drd tt |}nd|}|S)zSParses `version` option value. :param value: :rtype: str zCVersion loaded from {value} does not comply with PEP 440: {version}__iter__rdz%s)rrhr!r r rr0rrr^callablerhasattrrmap)rr&rtmplrrrr?s    z$ConfigMetadataHandler._parse_version)FN) r3r4r5rXrqZ strict_moder rror __classcell__rrrrr\s !r\c@sdeZdZdZeddZddZddZdd Zd d Z d d Z ddZ ddZ ddZ ddZdS)r[r`cCsN|j}t|jdd}|j}|j}|j}|||||||||||j|j|t|dS)rl;r)Zzip_safeZinclude_package_datar^scriptsZeager_resourcesZdependency_linksZnamespace_packagesZinstall_requiresZsetup_requiresZ tests_requirepackages entry_points py_modulesZpython_requirescmdclass)rrrr_parse_cmdclass_parse_packagesrr )rrZparse_list_semicolonZ parse_boolrZparse_cmdclassrrrrogs*zConfigOptionsHandler.parserscs$ddfdd||DS)NcSs8|d}||dd}|d|}t|}t||S)Nrdr)rfind __import__rQ)Zqualified_class_nameidx class_namepkg_namerrrr resolve_classs   z;ConfigOptionsHandler._parse_cmdclass..resolve_classcsi|]\}}||qSrrr'kvrrr sz8ConfigOptionsHandler._parse_cmdclass..)rre)rr&rrrrs z$ConfigOptionsHandler._parse_cmdclasscCsjddg}|}||kr"||S||dk}||jdi}|rTddlm}n ddlm}|f|S)zTParses `packages` option value. :param value: :rtype: list zfind:zfind_namespace:rz packages.findr)find_namespace_packages) find_packages)rhrparse_section_packages__findrirr setuptoolsrr)rr&Zfind_directivesZ trimmed_valueZfindns find_kwargsrrrrrs    z$ConfigOptionsHandler._parse_packagescsT|||j}dddgtfdd|D}|d}|dk rP|d|d<|S)zParses `packages.find` configuration file section. To be used in conjunction with _parse_packages(). :param dict section_options: whereincludeexcludecs$g|]\}}|kr|r||fqSrrrZ valid_keysrrr|szEConfigOptionsHandler.parse_section_packages__find..Nr)rrrVrerr)rrkZ section_datarrrrrrs   z1ConfigOptionsHandler.parse_section_packages__findcCs|||j}||d<dS)z`Parses `entry_points` configuration file section. :param dict section_options: rN)rrrrkrrrrparse_section_entry_pointssz/ConfigOptionsHandler.parse_section_entry_pointscCs.|||j}|d}|r*||d<|d=|S)Nrrc)rrrr)rrkrrootrrr_parse_package_datas  z(ConfigOptionsHandler._parse_package_datacCs|||d<dS)z`Parses `package_data` configuration file section. :param dict section_options: package_dataNr rrkrrrparse_section_package_datasz/ConfigOptionsHandler.parse_section_package_datacCs|||d<dS)zhParses `exclude_package_data` configuration file section. :param dict section_options: Zexclude_package_dataNr r rrr"parse_section_exclude_package_datasz7ConfigOptionsHandler.parse_section_exclude_package_datacCs"t|jdd}||||d<dS)zbParses `extras_require` configuration file section. :param dict section_options: rrZextras_requireN)rrr)rrkrrrrparse_section_extras_requires z1ConfigOptionsHandler.parse_section_extras_requirecCs(|||j}dd|D|d<dS)z^Parses `data_files` configuration file section. :param dict section_options: cSsg|]\}}||fqSrrrrrrr|szAConfigOptionsHandler.parse_section_data_files.. data_filesN)rrrerrrrparse_section_data_filessz-ConfigOptionsHandler.parse_section_data_filesN)r3r4r5rXrrorrrrr r rrrrrrrr[cs    r[)FF)F) rrr@r7rrPr collectionsrrrglobr contextlibdistutils.errorsrrZ#setuptools.extern.packaging.versionr r Z&setuptools.extern.packaging.specifiersr r contextmanagerr;rOrUrKrIrbr\r[rrrrs4      -  c_