Mercurial > hg
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 |
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 | 8 # GNU General Public License version 2 or any later version. |
1082 | 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 | 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 | 56 dirs = package.split(b".") |
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 | 65 return os.path.join(_rootpath, *package.split(b".")) |
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 | 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) |