1
- # The following comment should be removed at some point in the future.
2
- # mypy: strict-optional=False
3
-
4
1
import functools
5
2
import logging
6
3
import os
@@ -244,6 +241,7 @@ def supports_pyproject_editable(self) -> bool:
244
241
245
242
@property
246
243
def specifier (self ) -> SpecifierSet :
244
+ assert self .req is not None
247
245
return self .req .specifier
248
246
249
247
@property
@@ -257,7 +255,8 @@ def is_pinned(self) -> bool:
257
255
258
256
For example, some-package==1.2 is pinned; some-package>1.2 is not.
259
257
"""
260
- specifiers = self .specifier
258
+ assert self .req is not None
259
+ specifiers = self .req .specifier
261
260
return len (specifiers ) == 1 and next (iter (specifiers )).operator in {"==" , "===" }
262
261
263
262
def match_markers (self , extras_requested : Optional [Iterable [str ]] = None ) -> bool :
@@ -305,6 +304,7 @@ def hashes(self, trust_internet: bool = True) -> Hashes:
305
304
else :
306
305
link = None
307
306
if link and link .hash :
307
+ assert link .hash_name is not None
308
308
good_hashes .setdefault (link .hash_name , []).append (link .hash )
309
309
return Hashes (good_hashes )
310
310
@@ -314,6 +314,7 @@ def from_path(self) -> Optional[str]:
314
314
return None
315
315
s = str (self .req )
316
316
if self .comes_from :
317
+ comes_from : Optional [str ]
317
318
if isinstance (self .comes_from , str ):
318
319
comes_from = self .comes_from
319
320
else :
@@ -345,7 +346,7 @@ def ensure_build_location(
345
346
346
347
# When parallel builds are enabled, add a UUID to the build directory
347
348
# name so multiple builds do not interfere with each other.
348
- dir_name : str = canonicalize_name (self .name )
349
+ dir_name : str = canonicalize_name (self .req . name )
349
350
if parallel_builds :
350
351
dir_name = f"{ dir_name } _{ uuid .uuid4 ().hex } "
351
352
@@ -388,6 +389,7 @@ def _set_requirement(self) -> None:
388
389
)
389
390
390
391
def warn_on_mismatching_name (self ) -> None :
392
+ assert self .req is not None
391
393
metadata_name = canonicalize_name (self .metadata ["Name" ])
392
394
if canonicalize_name (self .req .name ) == metadata_name :
393
395
# Everything is fine.
@@ -457,6 +459,7 @@ def is_wheel_from_cache(self) -> bool:
457
459
# Things valid for sdists
458
460
@property
459
461
def unpacked_source_directory (self ) -> str :
462
+ assert self .source_dir , f"No source dir for { self } "
460
463
return os .path .join (
461
464
self .source_dir , self .link and self .link .subdirectory_fragment or ""
462
465
)
@@ -543,7 +546,7 @@ def prepare_metadata(self) -> None:
543
546
Under PEP 517 and PEP 660, call the backend hook to prepare the metadata.
544
547
Under legacy processing, call setup.py egg-info.
545
548
"""
546
- assert self .source_dir
549
+ assert self .source_dir , f"No source dir for { self } "
547
550
details = self .name or f"from { self .link } "
548
551
549
552
if self .use_pep517 :
@@ -592,18 +595,20 @@ def get_dist(self) -> BaseDistribution:
592
595
if self .metadata_directory :
593
596
return get_directory_distribution (self .metadata_directory )
594
597
elif self .local_file_path and self .is_wheel :
598
+ assert self .req is not None
595
599
return get_wheel_distribution (
596
- FilesystemWheel (self .local_file_path ), canonicalize_name (self .name )
600
+ FilesystemWheel (self .local_file_path ),
601
+ canonicalize_name (self .req .name ),
597
602
)
598
603
raise AssertionError (
599
604
f"InstallRequirement { self } has no metadata directory and no wheel: "
600
605
f"can't make a distribution."
601
606
)
602
607
603
608
def assert_source_matches_version (self ) -> None :
604
- assert self .source_dir
609
+ assert self .source_dir , f"No source dir for { self } "
605
610
version = self .metadata ["version" ]
606
- if self .req .specifier and version not in self .req .specifier :
611
+ if self .req and self . req .specifier and version not in self .req .specifier :
607
612
logger .warning (
608
613
"Requested %s, but installing version %s" ,
609
614
self ,
@@ -696,9 +701,10 @@ def _clean_zip_name(name: str, prefix: str) -> str:
696
701
name = name .replace (os .path .sep , "/" )
697
702
return name
698
703
704
+ assert self .req is not None
699
705
path = os .path .join (parentdir , path )
700
706
name = _clean_zip_name (path , rootdir )
701
- return self .name + "/" + name
707
+ return self .req . name + "/" + name
702
708
703
709
def archive (self , build_dir : Optional [str ]) -> None :
704
710
"""Saves archive to provided build_dir.
@@ -777,8 +783,9 @@ def install(
777
783
use_user_site : bool = False ,
778
784
pycompile : bool = True ,
779
785
) -> None :
786
+ assert self .req is not None
780
787
scheme = get_scheme (
781
- self .name ,
788
+ self .req . name ,
782
789
user = use_user_site ,
783
790
home = home ,
784
791
root = root ,
@@ -792,7 +799,7 @@ def install(
792
799
prefix = prefix ,
793
800
home = home ,
794
801
use_user_site = use_user_site ,
795
- name = self .name ,
802
+ name = self .req . name ,
796
803
setup_py_path = self .setup_py_path ,
797
804
isolated = self .isolated ,
798
805
build_env = self .build_env ,
@@ -805,7 +812,7 @@ def install(
805
812
assert self .local_file_path
806
813
807
814
install_wheel (
808
- self .name ,
815
+ self .req . name ,
809
816
self .local_file_path ,
810
817
scheme = scheme ,
811
818
req_description = str (self .req ),
0 commit comments