@@ -12,12 +12,15 @@ def from_zip_sdist(zf: ZipFile) -> bytes:
1212 """
1313 requires = [f for f in zf .namelist () if f .endswith ("/requires.txt" )]
1414 requires .sort (key = len )
15+ if not requires :
16+ return b""
17+
1518 data = zf .read (requires [0 ])
1619 assert data is not None
17- requires , extras = convert_sdist_requires (data .decode ("utf-8" ))
20+ requires_lines , extras = convert_sdist_requires (data .decode ("utf-8" ))
1821
1922 buf : list [str ] = []
20- for req in requires :
23+ for req in requires_lines :
2124 buf .append (f"Requires-Dist: { req } \n " )
2225 for extra in sorted (extras ):
2326 buf .append (f"Provides-Extra: { extra } \n " )
@@ -27,6 +30,9 @@ def from_zip_sdist(zf: ZipFile) -> bytes:
2730def basic_metadata_from_zip_sdist (zf : ZipFile ) -> BasicMetadata :
2831 requires = [f for f in zf .namelist () if f .endswith ("/requires.txt" )]
2932 requires .sort (key = len )
33+ if not requires :
34+ return BasicMetadata ((), frozenset ())
35+
3036 data = zf .read (requires [0 ])
3137 assert data is not None
3238 return BasicMetadata .from_sdist_pkg_info_and_requires (b"" , data )
@@ -39,14 +45,16 @@ def from_tar_sdist(tf: TarFile) -> bytes:
3945 # XXX Why do ZipFile and TarFile not have a common interface ?!
4046 requires = [f for f in tf .getnames () if f .endswith ("/requires.txt" )]
4147 requires .sort (key = len )
48+ if not requires :
49+ return b""
4250
4351 fo = tf .extractfile (requires [0 ])
4452 assert fo is not None
4553
46- requires , extras = convert_sdist_requires (fo .read ().decode ("utf-8" ))
54+ requires_lines , extras = convert_sdist_requires (fo .read ().decode ("utf-8" ))
4755
4856 buf : list [str ] = []
49- for req in requires :
57+ for req in requires_lines :
5058 buf .append (f"Requires-Dist: { req } \n " )
5159 for extra in sorted (extras ):
5260 buf .append (f"Provides-Extra: { extra } \n " )
@@ -57,6 +65,8 @@ def basic_metadata_from_tar_sdist(tf: TarFile) -> BasicMetadata:
5765 # XXX Why do ZipFile and TarFile not have a common interface ?!
5866 requires = [f for f in tf .getnames () if f .endswith ("/requires.txt" )]
5967 requires .sort (key = len )
68+ if not requires :
69+ return BasicMetadata ((), frozenset ())
6070
6171 fo = tf .extractfile (requires [0 ])
6272 assert fo is not None
0 commit comments