annotate mercurial/utils/resourceutil.py @ 51863:f4733654f144

typing: add `from __future__ import annotations` to most files Now that py36 is no longer supported, we can postpone annotation evaluation. This means that the quoting is usually optional (for things imported under the guard of `if typing.TYPE_CHECKING:` to avoid circular imports), and there's less overhead on startup[1]. There may be some missing here. I backed out 6000f5b25c9b (which removed the `from __future__ import ...` that was supporting py2), reverted the changes in `contrib/`, `doc/`, and `tests/`, and then ran: $ hg status -n --change . | \ xargs sed -i -e 's/from __future__ import .*$/from __future__ import annotations/' There were some minor tweaks needed when reviewing (mostly making the spacing around the import consistent, and `mercurial/testing/__init__.py` had a multiline import that wasn't fully rewritten. [1] https://docs.python.org/3/whatsnew/3.7.html#pep-563-postponed-evaluation-of-annotations
author Matt Harbison <matt_harbison@yahoo.com>
date Mon, 16 Sep 2024 15:36:44 +0200
parents c87c56ad6913
children b2e90465daf6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
43671
664e24207728 procutil: move mainfrozen() to new resourceutil.py
Martin von Zweigbergk <martinvonz@google.com>
parents: 43657
diff changeset
1 # resourceutil.py - utility for looking up resources
8226
8b2cd04a6e97 put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
2 #
8b2cd04a6e97 put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
3 # Copyright 2005 K. Thananchayan <thananck@yahoo.com>
46819
d4ba4d51f85f contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents: 46783
diff changeset
4 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com>
8226
8b2cd04a6e97 put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
5 # Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
8b2cd04a6e97 put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
6 #
8b2cd04a6e97 put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
7 # This software may be used and distributed according to the terms of the
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 9996
diff changeset
8 # GNU General Public License version 2 or any later version.
1082
ce96e316278a Update util.py docstrings, fix walk test
mpm@selenic.com
parents: 1081
diff changeset
9
51863
f4733654f144 typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents: 51750
diff changeset
10 from __future__ import annotations
27358
ac839ee45b6a util: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27357
diff changeset
11
43672
9fb85668ee15 util: move definition of datapath to resourceutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 43671
diff changeset
12 import os
27358
ac839ee45b6a util: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27357
diff changeset
13 import sys
51669
32a1c9226dd9 typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents: 50928
diff changeset
14 import typing
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43019
diff changeset
15
43671
664e24207728 procutil: move mainfrozen() to new resourceutil.py
Martin von Zweigbergk <martinvonz@google.com>
parents: 43657
diff changeset
16 from .. import pycompat
1293
a6ffcebd3315 Enhance the file filtering capabilities.
Bryan O'Sullivan <bos@serpentine.com>
parents: 1292
diff changeset
17
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43019
diff changeset
18
51669
32a1c9226dd9 typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents: 50928
diff changeset
19 if typing.TYPE_CHECKING:
32a1c9226dd9 typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents: 50928
diff changeset
20 from typing import (
32a1c9226dd9 typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents: 50928
diff changeset
21 BinaryIO,
32a1c9226dd9 typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents: 50928
diff changeset
22 Iterator,
32a1c9226dd9 typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents: 50928
diff changeset
23 )
32a1c9226dd9 typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents: 50928
diff changeset
24
32a1c9226dd9 typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents: 50928
diff changeset
25
14228
116de1da2154 rename util.main_is_frozen to mainfrozen
Adrian Buehlmann <adrian@cadifra.com>
parents: 14167
diff changeset
26 def mainfrozen():
6499
479847ccabe0 Added hgexecutable support for py2exe/frozen scripts
"Paul Moore <p.f.moore@gmail.com>"
parents: 5659
diff changeset
27 """return True if we are a frozen executable.
479847ccabe0 Added hgexecutable support for py2exe/frozen scripts
"Paul Moore <p.f.moore@gmail.com>"
parents: 5659
diff changeset
28
479847ccabe0 Added hgexecutable support for py2exe/frozen scripts
"Paul Moore <p.f.moore@gmail.com>"
parents: 5659
diff changeset
29 The code supports py2exe (most common, Windows only) and tools/freeze
479847ccabe0 Added hgexecutable support for py2exe/frozen scripts
"Paul Moore <p.f.moore@gmail.com>"
parents: 5659
diff changeset
30 (portable, not much used).
479847ccabe0 Added hgexecutable support for py2exe/frozen scripts
"Paul Moore <p.f.moore@gmail.com>"
parents: 5659
diff changeset
31 """
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 43019
diff changeset
32 return (
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50756
diff changeset
33 hasattr(sys, "frozen") # new py2exe
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50756
diff changeset
34 or hasattr(sys, "importers") # old py2exe
51750
c87c56ad6913 utils: avoid using internal _imp.is_frozen()
Mads Kiilerich <mads@kiilerich.com>
parents: 51749
diff changeset
35 or getattr(
c87c56ad6913 utils: avoid using internal _imp.is_frozen()
Mads Kiilerich <mads@kiilerich.com>
parents: 51749
diff changeset
36 getattr(sys.modules.get('__main__'), '__spec__', None),
c87c56ad6913 utils: avoid using internal _imp.is_frozen()
Mads Kiilerich <mads@kiilerich.com>
parents: 51749
diff changeset
37 'origin',
c87c56ad6913 utils: avoid using internal _imp.is_frozen()
Mads Kiilerich <mads@kiilerich.com>
parents: 51749
diff changeset
38 None,
c87c56ad6913 utils: avoid using internal _imp.is_frozen()
Mads Kiilerich <mads@kiilerich.com>
parents: 51749
diff changeset
39 )
c87c56ad6913 utils: avoid using internal _imp.is_frozen()
Mads Kiilerich <mads@kiilerich.com>
parents: 51749
diff changeset
40 == 'frozen' # tools/freeze
44924
6c8384afbf77 resourceutil: fix location of line comments
Manuel Jacob <me@manueljacob.de>
parents: 44241
diff changeset
41 )
43672
9fb85668ee15 util: move definition of datapath to resourceutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 43671
diff changeset
42
9fb85668ee15 util: move definition of datapath to resourceutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 43671
diff changeset
43
9fb85668ee15 util: move definition of datapath to resourceutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 43671
diff changeset
44 # the location of data files matching the source code
44241
aea79f41ee55 resourceutil: blacken
Augie Fackler <augie@google.com>
parents: 44219
diff changeset
45 if mainfrozen() and getattr(sys, "frozen", None) != "macosx_app":
43672
9fb85668ee15 util: move definition of datapath to resourceutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 43671
diff changeset
46 # executable version (py2exe) doesn't support __file__
9fb85668ee15 util: move definition of datapath to resourceutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 43671
diff changeset
47 datapath = os.path.dirname(pycompat.sysexecutable)
44208
9e367157a990 resourceutil: correct the root path for file based lookup under py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 44152
diff changeset
48 _rootpath = datapath
44219
aab70b540d3d resourceutil: account for the non-resource-like file hierarchy under py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 44208
diff changeset
49
aab70b540d3d resourceutil: account for the non-resource-like file hierarchy under py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 44208
diff changeset
50 # The installers store the files outside of library.zip, like
aab70b540d3d resourceutil: account for the non-resource-like file hierarchy under py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 44208
diff changeset
51 # C:\Program Files\Mercurial\defaultrc\*.rc. This strips the
aab70b540d3d resourceutil: account for the non-resource-like file hierarchy under py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 44208
diff changeset
52 # leading "mercurial." off of the package name, so that these
aab70b540d3d resourceutil: account for the non-resource-like file hierarchy under py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 44208
diff changeset
53 # pseudo resources are found in their directory next to the
aab70b540d3d resourceutil: account for the non-resource-like file hierarchy under py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 44208
diff changeset
54 # executable.
51669
32a1c9226dd9 typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents: 50928
diff changeset
55 def _package_path(package: bytes) -> bytes:
44241
aea79f41ee55 resourceutil: blacken
Augie Fackler <augie@google.com>
parents: 44219
diff changeset
56 dirs = package.split(b".")
aea79f41ee55 resourceutil: blacken
Augie Fackler <augie@google.com>
parents: 44219
diff changeset
57 assert dirs[0] == b"mercurial"
44219
aab70b540d3d resourceutil: account for the non-resource-like file hierarchy under py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 44208
diff changeset
58 return os.path.join(_rootpath, *dirs[1:])
aab70b540d3d resourceutil: account for the non-resource-like file hierarchy under py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 44208
diff changeset
59
43672
9fb85668ee15 util: move definition of datapath to resourceutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 43671
diff changeset
60 else:
9fb85668ee15 util: move definition of datapath to resourceutil
Martin von Zweigbergk <martinvonz@google.com>
parents: 43671
diff changeset
61 datapath = os.path.dirname(os.path.dirname(pycompat.fsencode(__file__)))
44027
52f0140c2604 resourceutil: don't limit resources to the `mercurial` package
Matt Harbison <matt_harbison@yahoo.com>
parents: 43955
diff changeset
62 _rootpath = os.path.dirname(datapath)
43871
1390bb81163e help: get helptext/ data from `resources` module if available
Martin von Zweigbergk <martinvonz@google.com>
parents: 43862
diff changeset
63
51669
32a1c9226dd9 typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents: 50928
diff changeset
64 def _package_path(package: bytes) -> bytes:
44241
aea79f41ee55 resourceutil: blacken
Augie Fackler <augie@google.com>
parents: 44219
diff changeset
65 return os.path.join(_rootpath, *package.split(b"."))
aea79f41ee55 resourceutil: blacken
Augie Fackler <augie@google.com>
parents: 44219
diff changeset
66
44219
aab70b540d3d resourceutil: account for the non-resource-like file hierarchy under py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 44208
diff changeset
67
43871
1390bb81163e help: get helptext/ data from `resources` module if available
Martin von Zweigbergk <martinvonz@google.com>
parents: 43862
diff changeset
68 try:
45452
dd9e28612468 resourceutil: document when we expect to take the importlib.resouces code path
Martin von Zweigbergk <martinvonz@google.com>
parents: 44924
diff changeset
69 # importlib.resources exists from Python 3.7; see fallback in except clause
dd9e28612468 resourceutil: document when we expect to take the importlib.resouces code path
Martin von Zweigbergk <martinvonz@google.com>
parents: 44924
diff changeset
70 # further down
48008
c0588d389c5f typing: suppress an import-error warning in `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents: 47860
diff changeset
71 from importlib import resources # pytype: disable=import-error
43871
1390bb81163e help: get helptext/ data from `resources` module if available
Martin von Zweigbergk <martinvonz@google.com>
parents: 43862
diff changeset
72
1390bb81163e help: get helptext/ data from `resources` module if available
Martin von Zweigbergk <martinvonz@google.com>
parents: 43862
diff changeset
73 # Force loading of the resources module
51749
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
74 if hasattr(resources, 'files'): # Introduced in Python 3.9
49943
330d88217b83 resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents: 49074
diff changeset
75 resources.files # pytype: disable=module-attr
330d88217b83 resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents: 49074
diff changeset
76 else:
330d88217b83 resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents: 49074
diff changeset
77 resources.open_binary # pytype: disable=module-attr
43871
1390bb81163e help: get helptext/ data from `resources` module if available
Martin von Zweigbergk <martinvonz@google.com>
parents: 43862
diff changeset
78
49074
4ba27acdea63 resourceutil: force filesystem access to resources when using py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 48875
diff changeset
79 # py2exe raises an AssertionError if uses importlib.resources
4ba27acdea63 resourceutil: force filesystem access to resources when using py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 48875
diff changeset
80 if getattr(sys, "frozen", None) in ("console_exe", "windows_exe"):
4ba27acdea63 resourceutil: force filesystem access to resources when using py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 48875
diff changeset
81 raise ImportError
4ba27acdea63 resourceutil: force filesystem access to resources when using py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents: 48875
diff changeset
82
43955
75ec46c63657 resourceutil: use `from importlib import resources`
Martin von Zweigbergk <martinvonz@google.com>
parents: 43905
diff changeset
83 except (ImportError, AttributeError):
45452
dd9e28612468 resourceutil: document when we expect to take the importlib.resouces code path
Martin von Zweigbergk <martinvonz@google.com>
parents: 44924
diff changeset
84 # importlib.resources was not found (almost definitely because we're on a
dd9e28612468 resourceutil: document when we expect to take the importlib.resouces code path
Martin von Zweigbergk <martinvonz@google.com>
parents: 44924
diff changeset
85 # Python version before 3.7)
43871
1390bb81163e help: get helptext/ data from `resources` module if available
Martin von Zweigbergk <martinvonz@google.com>
parents: 43862
diff changeset
86
51669
32a1c9226dd9 typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents: 50928
diff changeset
87 def open_resource(package: bytes, name: bytes) -> "BinaryIO":
43871
1390bb81163e help: get helptext/ data from `resources` module if available
Martin von Zweigbergk <martinvonz@google.com>
parents: 43862
diff changeset
88 path = os.path.join(_package_path(package), name)
44241
aea79f41ee55 resourceutil: blacken
Augie Fackler <augie@google.com>
parents: 44219
diff changeset
89 return open(path, "rb")
44028
42a897bf678c resourceutil: implement `is_resource()`
Matt Harbison <matt_harbison@yahoo.com>
parents: 44027
diff changeset
90
51669
32a1c9226dd9 typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents: 50928
diff changeset
91 def is_resource(package: bytes, name: bytes) -> bool:
44028
42a897bf678c resourceutil: implement `is_resource()`
Matt Harbison <matt_harbison@yahoo.com>
parents: 44027
diff changeset
92 path = os.path.join(_package_path(package), name)
42a897bf678c resourceutil: implement `is_resource()`
Matt Harbison <matt_harbison@yahoo.com>
parents: 44027
diff changeset
93
42a897bf678c resourceutil: implement `is_resource()`
Matt Harbison <matt_harbison@yahoo.com>
parents: 44027
diff changeset
94 try:
42a897bf678c resourceutil: implement `is_resource()`
Matt Harbison <matt_harbison@yahoo.com>
parents: 44027
diff changeset
95 return os.path.isfile(pycompat.fsdecode(path))
42a897bf678c resourceutil: implement `is_resource()`
Matt Harbison <matt_harbison@yahoo.com>
parents: 44027
diff changeset
96 except (IOError, OSError):
42a897bf678c resourceutil: implement `is_resource()`
Matt Harbison <matt_harbison@yahoo.com>
parents: 44027
diff changeset
97 return False
44029
bba9149adc14 resourceutil: implement `contents()` to iterate over resources in a package
Matt Harbison <matt_harbison@yahoo.com>
parents: 44028
diff changeset
98
51669
32a1c9226dd9 typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents: 50928
diff changeset
99 def contents(package: bytes) -> "Iterator[bytes]":
44029
bba9149adc14 resourceutil: implement `contents()` to iterate over resources in a package
Matt Harbison <matt_harbison@yahoo.com>
parents: 44028
diff changeset
100 path = pycompat.fsdecode(_package_path(package))
bba9149adc14 resourceutil: implement `contents()` to iterate over resources in a package
Matt Harbison <matt_harbison@yahoo.com>
parents: 44028
diff changeset
101
bba9149adc14 resourceutil: implement `contents()` to iterate over resources in a package
Matt Harbison <matt_harbison@yahoo.com>
parents: 44028
diff changeset
102 for p in os.listdir(path):
bba9149adc14 resourceutil: implement `contents()` to iterate over resources in a package
Matt Harbison <matt_harbison@yahoo.com>
parents: 44028
diff changeset
103 yield pycompat.fsencode(p)
47860
08f16b3331df resources: narrow the try:except clause to minimum
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47858
diff changeset
104
08f16b3331df resources: narrow the try:except clause to minimum
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47858
diff changeset
105 else:
08f16b3331df resources: narrow the try:except clause to minimum
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47858
diff changeset
106 from .. import encoding
08f16b3331df resources: narrow the try:except clause to minimum
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47858
diff changeset
107
51669
32a1c9226dd9 typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents: 50928
diff changeset
108 def open_resource(package: bytes, name: bytes) -> "BinaryIO":
50928
d718eddf01d9 safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 50756
diff changeset
109 if hasattr(resources, 'files'):
49943
330d88217b83 resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents: 49074
diff changeset
110 return (
330d88217b83 resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents: 49074
diff changeset
111 resources.files( # pytype: disable=module-attr
330d88217b83 resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents: 49074
diff changeset
112 pycompat.sysstr(package)
330d88217b83 resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents: 49074
diff changeset
113 )
330d88217b83 resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents: 49074
diff changeset
114 .joinpath(pycompat.sysstr(name))
330d88217b83 resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents: 49074
diff changeset
115 .open('rb')
330d88217b83 resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents: 49074
diff changeset
116 )
330d88217b83 resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents: 49074
diff changeset
117 else:
330d88217b83 resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents: 49074
diff changeset
118 return resources.open_binary( # pytype: disable=module-attr
330d88217b83 resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents: 49074
diff changeset
119 pycompat.sysstr(package), pycompat.sysstr(name)
330d88217b83 resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents: 49074
diff changeset
120 )
47860
08f16b3331df resources: narrow the try:except clause to minimum
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47858
diff changeset
121
51669
32a1c9226dd9 typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents: 50928
diff changeset
122 def is_resource(package: bytes, name: bytes) -> bool:
51749
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
123 if hasattr(resources, 'files'): # Introduced in Python 3.9
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
124 return (
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
125 resources.files(pycompat.sysstr(package))
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
126 .joinpath(encoding.strfromlocal(name))
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
127 .is_file()
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
128 )
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
129 else:
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
130 return resources.is_resource( # pytype: disable=module-attr
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
131 pycompat.sysstr(package), encoding.strfromlocal(name)
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
132 )
47860
08f16b3331df resources: narrow the try:except clause to minimum
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47858
diff changeset
133
51669
32a1c9226dd9 typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents: 50928
diff changeset
134 def contents(package: bytes) -> "Iterator[bytes]":
51749
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
135 if hasattr(resources, 'files'): # Introduced in Python 3.9
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
136 for path in resources.files(pycompat.sysstr(package)).iterdir():
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
137 if path.is_file():
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
138 yield encoding.strtolocal(path.name)
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
139 else:
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
140 # pytype: disable=module-attr
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
141 for r in resources.contents(pycompat.sysstr(package)):
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
142 # pytype: enable=module-attr
16d63d7799fa utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents: 51703
diff changeset
143 yield encoding.strtolocal(r)