27
27
import time
28
28
import re
29
29
import types
30
- from typing import Protocol
30
+ from typing import List , Protocol
31
31
import zipfile
32
32
import zipimport
33
33
import warnings
85
85
require = None
86
86
working_set = None
87
87
add_activation_listener = None
88
- resources_stream = None
89
88
cleanup_resources = None
90
- resource_dir = None
91
89
resource_stream = None
92
90
set_extraction_path = None
93
91
resource_isdir = None
@@ -491,19 +489,6 @@ def compatible_platforms(provided, required):
491
489
return False
492
490
493
491
494
- def run_script (dist_spec , script_name ):
495
- """Locate distribution `dist_spec` and run its `script_name` script"""
496
- ns = sys ._getframe (1 ).f_globals
497
- name = ns ['__name__' ]
498
- ns .clear ()
499
- ns ['__name__' ] = name
500
- require (dist_spec )[0 ].run_script (script_name , ns )
501
-
502
-
503
- # backward compatibility
504
- run_main = run_script
505
-
506
-
507
492
def get_distribution (dist ):
508
493
"""Return a current distribution object for a Requirement or string"""
509
494
if isinstance (dist , str ):
@@ -531,7 +516,7 @@ def get_entry_info(dist, group, name):
531
516
532
517
533
518
class IMetadataProvider (Protocol ):
534
- def has_metadata (self , name ):
519
+ def has_metadata (self , name ) -> bool :
535
520
"""Does the package's distribution contain the named metadata?"""
536
521
537
522
def get_metadata (self , name ):
@@ -543,7 +528,7 @@ def get_metadata_lines(self, name):
543
528
Leading and trailing whitespace is stripped from each line, and lines
544
529
with ``#`` as the first non-blank character are omitted."""
545
530
546
- def metadata_isdir (self , name ):
531
+ def metadata_isdir (self , name ) -> bool :
547
532
"""Is the named metadata a directory? (like ``os.path.isdir()``)"""
548
533
549
534
def metadata_listdir (self , name ):
@@ -566,8 +551,8 @@ def get_resource_stream(self, manager, resource_name):
566
551
567
552
`manager` must be an ``IResourceManager``"""
568
553
569
- def get_resource_string (self , manager , resource_name ):
570
- """Return a string containing the contents of `resource_name`
554
+ def get_resource_string (self , manager , resource_name ) -> bytes :
555
+ """Return the contents of `resource_name` as :obj:`bytes `
571
556
572
557
`manager` must be an ``IResourceManager``"""
573
558
@@ -1203,8 +1188,8 @@ def resource_stream(self, package_or_requirement, resource_name):
1203
1188
self , resource_name
1204
1189
)
1205
1190
1206
- def resource_string (self , package_or_requirement , resource_name ):
1207
- """Return specified resource as a string """
1191
+ def resource_string (self , package_or_requirement , resource_name ) -> bytes :
1192
+ """Return specified resource as :obj:`bytes` """
1208
1193
return get_provider (package_or_requirement ).get_resource_string (
1209
1194
self , resource_name
1210
1195
)
@@ -1339,7 +1324,7 @@ def set_extraction_path(self, path):
1339
1324
1340
1325
self .extraction_path = path
1341
1326
1342
- def cleanup_resources (self , force = False ):
1327
+ def cleanup_resources (self , force = False ) -> List [ str ] :
1343
1328
"""
1344
1329
Delete all extracted resource files and directories, returning a list
1345
1330
of the file and directory names that could not be successfully removed.
@@ -1351,6 +1336,7 @@ def cleanup_resources(self, force=False):
1351
1336
directory used for extractions.
1352
1337
"""
1353
1338
# XXX
1339
+ return []
1354
1340
1355
1341
1356
1342
def get_default_cache ():
@@ -1479,7 +1465,7 @@ def get_resource_filename(self, manager, resource_name):
1479
1465
def get_resource_stream (self , manager , resource_name ):
1480
1466
return io .BytesIO (self .get_resource_string (manager , resource_name ))
1481
1467
1482
- def get_resource_string (self , manager , resource_name ):
1468
+ def get_resource_string (self , manager , resource_name ) -> bytes :
1483
1469
return self ._get (self ._fn (self .module_path , resource_name ))
1484
1470
1485
1471
def has_resource (self , resource_name ):
@@ -1488,9 +1474,9 @@ def has_resource(self, resource_name):
1488
1474
def _get_metadata_path (self , name ):
1489
1475
return self ._fn (self .egg_info , name )
1490
1476
1491
- def has_metadata (self , name ):
1477
+ def has_metadata (self , name ) -> bool :
1492
1478
if not self .egg_info :
1493
- return self . egg_info
1479
+ return False
1494
1480
1495
1481
path = self ._get_metadata_path (name )
1496
1482
return self ._has (path )
@@ -1514,8 +1500,8 @@ def get_metadata_lines(self, name):
1514
1500
def resource_isdir (self , resource_name ):
1515
1501
return self ._isdir (self ._fn (self .module_path , resource_name ))
1516
1502
1517
- def metadata_isdir (self , name ):
1518
- return self .egg_info and self ._isdir (self ._fn (self .egg_info , name ))
1503
+ def metadata_isdir (self , name ) -> bool :
1504
+ return bool ( self .egg_info and self ._isdir (self ._fn (self .egg_info , name ) ))
1519
1505
1520
1506
def resource_listdir (self , resource_name ):
1521
1507
return self ._listdir (self ._fn (self .module_path , resource_name ))
@@ -1554,12 +1540,12 @@ def run_script(self, script_name, namespace):
1554
1540
script_code = compile (script_text , script_filename , 'exec' )
1555
1541
exec (script_code , namespace , namespace )
1556
1542
1557
- def _has (self , path ):
1543
+ def _has (self , path ) -> bool :
1558
1544
raise NotImplementedError (
1559
1545
"Can't perform this operation for unregistered loader type"
1560
1546
)
1561
1547
1562
- def _isdir (self , path ):
1548
+ def _isdir (self , path ) -> bool :
1563
1549
raise NotImplementedError (
1564
1550
"Can't perform this operation for unregistered loader type"
1565
1551
)
@@ -1649,7 +1635,7 @@ def _validate_resource_path(path):
1649
1635
DeprecationWarning ,
1650
1636
)
1651
1637
1652
- def _get (self , path ):
1638
+ def _get (self , path ) -> bytes :
1653
1639
if hasattr (self .loader , 'get_data' ):
1654
1640
return self .loader .get_data (path )
1655
1641
raise NotImplementedError (
@@ -1694,10 +1680,10 @@ def _set_egg(self, path):
1694
1680
class DefaultProvider (EggProvider ):
1695
1681
"""Provides access to package resources in the filesystem"""
1696
1682
1697
- def _has (self , path ):
1683
+ def _has (self , path ) -> bool :
1698
1684
return os .path .exists (path )
1699
1685
1700
- def _isdir (self , path ):
1686
+ def _isdir (self , path ) -> bool :
1701
1687
return os .path .isdir (path )
1702
1688
1703
1689
def _listdir (self , path ):
@@ -1706,7 +1692,7 @@ def _listdir(self, path):
1706
1692
def get_resource_stream (self , manager , resource_name ):
1707
1693
return open (self ._fn (self .module_path , resource_name ), 'rb' )
1708
1694
1709
- def _get (self , path ):
1695
+ def _get (self , path ) -> bytes :
1710
1696
with open (path , 'rb' ) as stream :
1711
1697
return stream .read ()
1712
1698
@@ -1731,8 +1717,8 @@ class EmptyProvider(NullProvider):
1731
1717
1732
1718
_isdir = _has = lambda self , path : False
1733
1719
1734
- def _get (self , path ):
1735
- return ''
1720
+ def _get (self , path ) -> bytes :
1721
+ return b ''
1736
1722
1737
1723
def _listdir (self , path ):
1738
1724
return []
@@ -1939,11 +1925,11 @@ def _index(self):
1939
1925
self ._dirindex = ind
1940
1926
return ind
1941
1927
1942
- def _has (self , fspath ):
1928
+ def _has (self , fspath ) -> bool :
1943
1929
zip_path = self ._zipinfo_name (fspath )
1944
1930
return zip_path in self .zipinfo or zip_path in self ._index ()
1945
1931
1946
- def _isdir (self , fspath ):
1932
+ def _isdir (self , fspath ) -> bool :
1947
1933
return self ._zipinfo_name (fspath ) in self ._index ()
1948
1934
1949
1935
def _listdir (self , fspath ):
@@ -1977,7 +1963,7 @@ def __init__(self, path):
1977
1963
def _get_metadata_path (self , name ):
1978
1964
return self .path
1979
1965
1980
- def has_metadata (self , name ):
1966
+ def has_metadata (self , name ) -> bool :
1981
1967
return name == 'PKG-INFO' and os .path .isfile (self .path )
1982
1968
1983
1969
def get_metadata (self , name ):
@@ -3207,7 +3193,9 @@ def _find_adapter(registry, ob):
3207
3193
for t in types :
3208
3194
if t in registry :
3209
3195
return registry [t ]
3210
- return None
3196
+ # _find_adapter would previously return None, and immediately be called.
3197
+ # So we're raising a TypeError to keep backward compatibility if anyone depended on that behaviour.
3198
+ raise TypeError (f"Could not find adapter for { registry } and { ob } " )
3211
3199
3212
3200
3213
3201
def ensure_directory (path ):
0 commit comments