o ca@s\dZddlZddlZddlZddlmZddZddZd d Z d d Z d dZ ddZ dS)z2 Tools for converting old- to new-style metadata. N) read_pkg_infocCsRt|ddr d|jSg}|jD] \}}|||q|s dSddt|S)zFReturn the version specifier for a requirement in PEP 345/566 fashion.urlNz @ z (%s),)getattrrspecsappendjoinsorted) requirement requires_distopverr0/usr/lib/python3/dist-packages/wheel/metadata.pyrequires_to_requires_dist s  rccsP|D]"}tj|}t|}dt|j}|rd|}|j||VqdS)z=Yield Requires-Dist: strings for parsed requirements strings.rz[%s]N) pkg_resources Requirementparserr r extras project_name) requirementsreqparsed_requirementspecrrrrconvert_requirementss rccs|D]D\}}d}|pd}d|vr|dd\}}t|}|r5d|fV|r/d|d}|d|7}|r;d|}t|D] }d ||fVq?qd S) a, Convert requirements from a setup()-style dictionary to ('Requires-Dist', 'requirement') and ('Provides-Extra', 'extra') tuples. extras_require is a dictionary of {extra: [requirements]} as passed to setup(), using the empty extra {'': [requirements]} to hold install_requires. r:rProvides-Extra(z) and z extra == '%s'z ; Requires-DistN)itemssplitr safe_extrar)extras_requireextradepends conditionnew_reqrrrgenerate_requirements%s$     r)c Cst|}|dd|d=|d=tj|d}tj|r^t| }|}Wdn1s0wYtt |ddd }|D]\}}t ||iD]\} } | | f| vr\| || <qLqB|d } | rn| t||d =|S) zN Convert .egg-info directory with PKG-INFO to the Metadata 2.1 format zMetadata-Versionz2.1rr z requires.txtNcSs |dpdS)Nrrr)xrrrPs z%pkginfo_to_metadata..)key Description)rreplace_headerospathr existsopenreadr rsplit_sectionsr)r! set_payloaddedent_description) egg_info_path pkginfo_pathpkg_info requires_path requires_filerequiresparsed_requirementsr%reqsr,value descriptionrrrpkginfo_to_metadataAs.      rAcCsX||}|}t|ts*|D]}|d|kr)|dddd}|Sq|S)zs