Mercurial > public > mercurial-scm > hg-stable
annotate mercurial/utils/resourceutil.py @ 52665:24ee91ba9aa8
pyupgrade: drop usage of py3 aliases for `OSError`
These were different classes in py2, but now a handful of error classes are just
an alias of `OSError`, like `IOError`, `EnvironmentError`, `WindowsError`, etc.
This is the result of running a hacked version of `pyupgrade` 3.19.1[1]
$ hg files -0 'relglob:**.py' | xargs -0 \
pyupgrade --py38-plus --keep-percent-format --keep-mock --keep-runtime-typing
The hack is because it doesn't have command line switches to disable most
changes, so it makes tons of unrelated changes all at once. The hack is to
1) patch `pyupgrade._main._fix_tokens()` to immediately return its content arg
2) change `pyupgrade._data.register_decorator()` to only register the function
if it's from the fixer we're interested in:
if func.__module__ in (
"pyupgrade._plugins.exceptions",
):
FUNCS[tp].append(func)
return func
[1] https://github.com/asottile/pyupgrade
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sun, 05 Jan 2025 21:03:17 -0500 |
parents | b2e90465daf6 |
children | 4cb75772818d |
rev | line source |
---|---|
43712
664e24207728
procutil: move mainfrozen() to new resourceutil.py
Martin von Zweigbergk <martinvonz@google.com>
parents:
43701
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:
46411
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 |
51901
f4733654f144
typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents:
51808
diff
changeset
|
10 from __future__ import annotations |
27358
ac839ee45b6a
util: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27357
diff
changeset
|
11 |
43713
9fb85668ee15
util: move definition of datapath to resourceutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43712
diff
changeset
|
12 import os |
27358
ac839ee45b6a
util: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27357
diff
changeset
|
13 import sys |
51729
32a1c9226dd9
typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50951
diff
changeset
|
14 import typing |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43021
diff
changeset
|
15 |
51717
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
16 from typing import Iterator |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
17 |
43712
664e24207728
procutil: move mainfrozen() to new resourceutil.py
Martin von Zweigbergk <martinvonz@google.com>
parents:
43701
diff
changeset
|
18 from .. import pycompat |
1293
a6ffcebd3315
Enhance the file filtering capabilities.
Bryan O'Sullivan <bos@serpentine.com>
parents:
1292
diff
changeset
|
19 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43021
diff
changeset
|
20 |
51729
32a1c9226dd9
typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50951
diff
changeset
|
21 if typing.TYPE_CHECKING: |
32a1c9226dd9
typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50951
diff
changeset
|
22 from typing import ( |
32a1c9226dd9
typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50951
diff
changeset
|
23 BinaryIO, |
32a1c9226dd9
typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50951
diff
changeset
|
24 Iterator, |
32a1c9226dd9
typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50951
diff
changeset
|
25 ) |
32a1c9226dd9
typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50951
diff
changeset
|
26 |
32a1c9226dd9
typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50951
diff
changeset
|
27 |
14228
116de1da2154
rename util.main_is_frozen to mainfrozen
Adrian Buehlmann <adrian@cadifra.com>
parents:
14167
diff
changeset
|
28 def mainfrozen(): |
6499
479847ccabe0
Added hgexecutable support for py2exe/frozen scripts
"Paul Moore <p.f.moore@gmail.com>"
parents:
5659
diff
changeset
|
29 """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
|
30 |
479847ccabe0
Added hgexecutable support for py2exe/frozen scripts
"Paul Moore <p.f.moore@gmail.com>"
parents:
5659
diff
changeset
|
31 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
|
32 (portable, not much used). |
479847ccabe0
Added hgexecutable support for py2exe/frozen scripts
"Paul Moore <p.f.moore@gmail.com>"
parents:
5659
diff
changeset
|
33 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
43021
diff
changeset
|
34 return ( |
50951
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50752
diff
changeset
|
35 hasattr(sys, "frozen") # new py2exe |
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50752
diff
changeset
|
36 or hasattr(sys, "importers") # old py2exe |
51716
c5d6a66092e8
utils: avoid using internal _imp.is_frozen()
Mads Kiilerich <mads@kiilerich.com>
parents:
50951
diff
changeset
|
37 or getattr( |
c5d6a66092e8
utils: avoid using internal _imp.is_frozen()
Mads Kiilerich <mads@kiilerich.com>
parents:
50951
diff
changeset
|
38 getattr(sys.modules.get('__main__'), '__spec__', None), |
c5d6a66092e8
utils: avoid using internal _imp.is_frozen()
Mads Kiilerich <mads@kiilerich.com>
parents:
50951
diff
changeset
|
39 'origin', |
c5d6a66092e8
utils: avoid using internal _imp.is_frozen()
Mads Kiilerich <mads@kiilerich.com>
parents:
50951
diff
changeset
|
40 None, |
c5d6a66092e8
utils: avoid using internal _imp.is_frozen()
Mads Kiilerich <mads@kiilerich.com>
parents:
50951
diff
changeset
|
41 ) |
c5d6a66092e8
utils: avoid using internal _imp.is_frozen()
Mads Kiilerich <mads@kiilerich.com>
parents:
50951
diff
changeset
|
42 == 'frozen' # tools/freeze |
44802
6c8384afbf77
resourceutil: fix location of line comments
Manuel Jacob <me@manueljacob.de>
parents:
44174
diff
changeset
|
43 ) |
43713
9fb85668ee15
util: move definition of datapath to resourceutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43712
diff
changeset
|
44 |
9fb85668ee15
util: move definition of datapath to resourceutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43712
diff
changeset
|
45 |
9fb85668ee15
util: move definition of datapath to resourceutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43712
diff
changeset
|
46 # the location of data files matching the source code |
44174 | 47 if mainfrozen() and getattr(sys, "frozen", None) != "macosx_app": |
43713
9fb85668ee15
util: move definition of datapath to resourceutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43712
diff
changeset
|
48 # executable version (py2exe) doesn't support __file__ |
9fb85668ee15
util: move definition of datapath to resourceutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43712
diff
changeset
|
49 datapath = os.path.dirname(pycompat.sysexecutable) |
44146
9e367157a990
resourceutil: correct the root path for file based lookup under py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents:
44136
diff
changeset
|
50 _rootpath = datapath |
44148
aab70b540d3d
resourceutil: account for the non-resource-like file hierarchy under py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents:
44146
diff
changeset
|
51 |
aab70b540d3d
resourceutil: account for the non-resource-like file hierarchy under py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents:
44146
diff
changeset
|
52 # 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:
44146
diff
changeset
|
53 # 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:
44146
diff
changeset
|
54 # 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:
44146
diff
changeset
|
55 # 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:
44146
diff
changeset
|
56 # executable. |
51729
32a1c9226dd9
typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50951
diff
changeset
|
57 def _package_path(package: bytes) -> bytes: |
44174 | 58 dirs = package.split(b".") |
59 assert dirs[0] == b"mercurial" | |
44148
aab70b540d3d
resourceutil: account for the non-resource-like file hierarchy under py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents:
44146
diff
changeset
|
60 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:
44146
diff
changeset
|
61 |
43713
9fb85668ee15
util: move definition of datapath to resourceutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43712
diff
changeset
|
62 else: |
9fb85668ee15
util: move definition of datapath to resourceutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43712
diff
changeset
|
63 datapath = os.path.dirname(os.path.dirname(pycompat.fsencode(__file__))) |
44029
52f0140c2604
resourceutil: don't limit resources to the `mercurial` package
Matt Harbison <matt_harbison@yahoo.com>
parents:
43960
diff
changeset
|
64 _rootpath = os.path.dirname(datapath) |
43877
1390bb81163e
help: get helptext/ data from `resources` module if available
Martin von Zweigbergk <martinvonz@google.com>
parents:
43873
diff
changeset
|
65 |
51729
32a1c9226dd9
typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50951
diff
changeset
|
66 def _package_path(package: bytes) -> bytes: |
44174 | 67 return os.path.join(_rootpath, *package.split(b".")) |
68 | |
44148
aab70b540d3d
resourceutil: account for the non-resource-like file hierarchy under py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents:
44146
diff
changeset
|
69 |
43877
1390bb81163e
help: get helptext/ data from `resources` module if available
Martin von Zweigbergk <martinvonz@google.com>
parents:
43873
diff
changeset
|
70 try: |
45463
dd9e28612468
resourceutil: document when we expect to take the importlib.resouces code path
Martin von Zweigbergk <martinvonz@google.com>
parents:
44802
diff
changeset
|
71 # 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:
44802
diff
changeset
|
72 # further down |
48031
c0588d389c5f
typing: suppress an import-error warning in `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents:
47911
diff
changeset
|
73 from importlib import resources # pytype: disable=import-error |
43877
1390bb81163e
help: get helptext/ data from `resources` module if available
Martin von Zweigbergk <martinvonz@google.com>
parents:
43873
diff
changeset
|
74 |
1390bb81163e
help: get helptext/ data from `resources` module if available
Martin von Zweigbergk <martinvonz@google.com>
parents:
43873
diff
changeset
|
75 # Force loading of the resources module |
51717
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
76 if hasattr(resources, 'files'): # Introduced in Python 3.9 |
49638
330d88217b83
resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents:
49129
diff
changeset
|
77 resources.files # pytype: disable=module-attr |
330d88217b83
resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents:
49129
diff
changeset
|
78 else: |
330d88217b83
resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents:
49129
diff
changeset
|
79 resources.open_binary # pytype: disable=module-attr |
43877
1390bb81163e
help: get helptext/ data from `resources` module if available
Martin von Zweigbergk <martinvonz@google.com>
parents:
43873
diff
changeset
|
80 |
49129
4ba27acdea63
resourceutil: force filesystem access to resources when using py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
81 # 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:
48966
diff
changeset
|
82 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:
48966
diff
changeset
|
83 raise ImportError |
4ba27acdea63
resourceutil: force filesystem access to resources when using py2exe
Matt Harbison <matt_harbison@yahoo.com>
parents:
48966
diff
changeset
|
84 |
43960
75ec46c63657
resourceutil: use `from importlib import resources`
Martin von Zweigbergk <martinvonz@google.com>
parents:
43911
diff
changeset
|
85 except (ImportError, AttributeError): |
45463
dd9e28612468
resourceutil: document when we expect to take the importlib.resouces code path
Martin von Zweigbergk <martinvonz@google.com>
parents:
44802
diff
changeset
|
86 # 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:
44802
diff
changeset
|
87 # Python version before 3.7) |
43877
1390bb81163e
help: get helptext/ data from `resources` module if available
Martin von Zweigbergk <martinvonz@google.com>
parents:
43873
diff
changeset
|
88 |
51729
32a1c9226dd9
typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50951
diff
changeset
|
89 def open_resource(package: bytes, name: bytes) -> "BinaryIO": |
43877
1390bb81163e
help: get helptext/ data from `resources` module if available
Martin von Zweigbergk <martinvonz@google.com>
parents:
43873
diff
changeset
|
90 path = os.path.join(_package_path(package), name) |
44174 | 91 return open(path, "rb") |
44030
42a897bf678c
resourceutil: implement `is_resource()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44029
diff
changeset
|
92 |
51729
32a1c9226dd9
typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50951
diff
changeset
|
93 def is_resource(package: bytes, name: bytes) -> bool: |
44030
42a897bf678c
resourceutil: implement `is_resource()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44029
diff
changeset
|
94 path = os.path.join(_package_path(package), name) |
42a897bf678c
resourceutil: implement `is_resource()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44029
diff
changeset
|
95 |
42a897bf678c
resourceutil: implement `is_resource()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44029
diff
changeset
|
96 try: |
42a897bf678c
resourceutil: implement `is_resource()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44029
diff
changeset
|
97 return os.path.isfile(pycompat.fsdecode(path)) |
52665
24ee91ba9aa8
pyupgrade: drop usage of py3 aliases for `OSError`
Matt Harbison <matt_harbison@yahoo.com>
parents:
52118
diff
changeset
|
98 except OSError: |
44030
42a897bf678c
resourceutil: implement `is_resource()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
44029
diff
changeset
|
99 return False |
44031
bba9149adc14
resourceutil: implement `contents()` to iterate over resources in a package
Matt Harbison <matt_harbison@yahoo.com>
parents:
44030
diff
changeset
|
100 |
51729
32a1c9226dd9
typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50951
diff
changeset
|
101 def contents(package: bytes) -> "Iterator[bytes]": |
44031
bba9149adc14
resourceutil: implement `contents()` to iterate over resources in a package
Matt Harbison <matt_harbison@yahoo.com>
parents:
44030
diff
changeset
|
102 path = pycompat.fsdecode(_package_path(package)) |
bba9149adc14
resourceutil: implement `contents()` to iterate over resources in a package
Matt Harbison <matt_harbison@yahoo.com>
parents:
44030
diff
changeset
|
103 |
bba9149adc14
resourceutil: implement `contents()` to iterate over resources in a package
Matt Harbison <matt_harbison@yahoo.com>
parents:
44030
diff
changeset
|
104 for p in os.listdir(path): |
bba9149adc14
resourceutil: implement `contents()` to iterate over resources in a package
Matt Harbison <matt_harbison@yahoo.com>
parents:
44030
diff
changeset
|
105 yield pycompat.fsencode(p) |
47911
08f16b3331df
resources: narrow the try:except clause to minimum
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47853
diff
changeset
|
106 |
08f16b3331df
resources: narrow the try:except clause to minimum
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47853
diff
changeset
|
107 else: |
08f16b3331df
resources: narrow the try:except clause to minimum
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47853
diff
changeset
|
108 from .. import encoding |
08f16b3331df
resources: narrow the try:except clause to minimum
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47853
diff
changeset
|
109 |
51729
32a1c9226dd9
typing: add type hints to `mercurial/utils/resourceutil.py`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50951
diff
changeset
|
110 def open_resource(package: bytes, name: bytes) -> "BinaryIO": |
50951
d718eddf01d9
safehasattr: drop usage in favor of hasattr
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50752
diff
changeset
|
111 if hasattr(resources, 'files'): |
49638
330d88217b83
resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents:
49129
diff
changeset
|
112 return ( |
330d88217b83
resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents:
49129
diff
changeset
|
113 resources.files( # pytype: disable=module-attr |
330d88217b83
resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents:
49129
diff
changeset
|
114 pycompat.sysstr(package) |
330d88217b83
resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents:
49129
diff
changeset
|
115 ) |
330d88217b83
resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents:
49129
diff
changeset
|
116 .joinpath(pycompat.sysstr(name)) |
330d88217b83
resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents:
49129
diff
changeset
|
117 .open('rb') |
330d88217b83
resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents:
49129
diff
changeset
|
118 ) |
330d88217b83
resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents:
49129
diff
changeset
|
119 else: |
330d88217b83
resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents:
49129
diff
changeset
|
120 return resources.open_binary( # pytype: disable=module-attr |
330d88217b83
resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents:
49129
diff
changeset
|
121 pycompat.sysstr(package), pycompat.sysstr(name) |
330d88217b83
resourceutil: start using importlib.resources.files() when possible
Anton Shestakov <av6@dwimlabs.net>
parents:
49129
diff
changeset
|
122 ) |
47911
08f16b3331df
resources: narrow the try:except clause to minimum
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47853
diff
changeset
|
123 |
51717
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
124 def is_resource(package: bytes, name: bytes) -> bool: |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
125 if hasattr(resources, 'files'): # Introduced in Python 3.9 |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
126 return ( |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
127 resources.files(pycompat.sysstr(package)) |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
128 .joinpath(encoding.strfromlocal(name)) |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
129 .is_file() |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
130 ) |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
131 else: |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
132 return resources.is_resource( # pytype: disable=module-attr |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
133 pycompat.sysstr(package), encoding.strfromlocal(name) |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
134 ) |
47911
08f16b3331df
resources: narrow the try:except clause to minimum
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47853
diff
changeset
|
135 |
51717
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
136 def contents(package: bytes) -> "Iterator[bytes]": |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
137 if hasattr(resources, 'files'): # Introduced in Python 3.9 |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
138 for path in resources.files(pycompat.sysstr(package)).iterdir(): |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
139 if path.is_file(): |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
140 yield encoding.strtolocal(path.name) |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
141 else: |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
142 # pytype: disable=module-attr |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
143 for r in resources.contents(pycompat.sysstr(package)): |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
144 # pytype: enable=module-attr |
747a1370c598
utils: fix resourceutil use of deprecated importlib.resources
Mads Kiilerich <mads@kiilerich.com>
parents:
51716
diff
changeset
|
145 yield encoding.strtolocal(r) |