##// END OF EJS Templates
typing: suppress an import-error warning in `mercurial/utils/resourceutil.py`...
Matt Harbison -
r48821:c0588d38 default
parent child Browse files
Show More
@@ -1,105 +1,105 b''
1 1 # resourceutil.py - utility for looking up resources
2 2 #
3 3 # Copyright 2005 K. Thananchayan <thananck@yahoo.com>
4 4 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com>
5 5 # Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
6 6 #
7 7 # This software may be used and distributed according to the terms of the
8 8 # GNU General Public License version 2 or any later version.
9 9
10 10 from __future__ import absolute_import
11 11
12 12 import imp
13 13 import os
14 14 import sys
15 15
16 16 from .. import pycompat
17 17
18 18
19 19 def mainfrozen():
20 20 """return True if we are a frozen executable.
21 21
22 22 The code supports py2exe (most common, Windows only) and tools/freeze
23 23 (portable, not much used).
24 24 """
25 25 return (
26 26 pycompat.safehasattr(sys, "frozen") # new py2exe
27 27 or pycompat.safehasattr(sys, "importers") # old py2exe
28 28 or imp.is_frozen("__main__") # tools/freeze
29 29 )
30 30
31 31
32 32 # the location of data files matching the source code
33 33 if mainfrozen() and getattr(sys, "frozen", None) != "macosx_app":
34 34 # executable version (py2exe) doesn't support __file__
35 35 datapath = os.path.dirname(pycompat.sysexecutable)
36 36 _rootpath = datapath
37 37
38 38 # The installers store the files outside of library.zip, like
39 39 # C:\Program Files\Mercurial\defaultrc\*.rc. This strips the
40 40 # leading "mercurial." off of the package name, so that these
41 41 # pseudo resources are found in their directory next to the
42 42 # executable.
43 43 def _package_path(package):
44 44 dirs = package.split(b".")
45 45 assert dirs[0] == b"mercurial"
46 46 return os.path.join(_rootpath, *dirs[1:])
47 47
48 48
49 49 else:
50 50 datapath = os.path.dirname(os.path.dirname(pycompat.fsencode(__file__)))
51 51 _rootpath = os.path.dirname(datapath)
52 52
53 53 def _package_path(package):
54 54 return os.path.join(_rootpath, *package.split(b"."))
55 55
56 56
57 57 try:
58 58 # importlib.resources exists from Python 3.7; see fallback in except clause
59 59 # further down
60 from importlib import resources
60 from importlib import resources # pytype: disable=import-error
61 61
62 62 # Force loading of the resources module
63 63 resources.open_binary # pytype: disable=module-attr
64 64
65 65 except (ImportError, AttributeError):
66 66 # importlib.resources was not found (almost definitely because we're on a
67 67 # Python version before 3.7)
68 68
69 69 def open_resource(package, name):
70 70 path = os.path.join(_package_path(package), name)
71 71 return open(path, "rb")
72 72
73 73 def is_resource(package, name):
74 74 path = os.path.join(_package_path(package), name)
75 75
76 76 try:
77 77 return os.path.isfile(pycompat.fsdecode(path))
78 78 except (IOError, OSError):
79 79 return False
80 80
81 81 def contents(package):
82 82 path = pycompat.fsdecode(_package_path(package))
83 83
84 84 for p in os.listdir(path):
85 85 yield pycompat.fsencode(p)
86 86
87 87
88 88 else:
89 89 from .. import encoding
90 90
91 91 def open_resource(package, name):
92 92 return resources.open_binary( # pytype: disable=module-attr
93 93 pycompat.sysstr(package), pycompat.sysstr(name)
94 94 )
95 95
96 96 def is_resource(package, name):
97 97 return resources.is_resource( # pytype: disable=module-attr
98 98 pycompat.sysstr(package), encoding.strfromlocal(name)
99 99 )
100 100
101 101 def contents(package):
102 102 # pytype: disable=module-attr
103 103 for r in resources.contents(pycompat.sysstr(package)):
104 104 # pytype: enable=module-attr
105 105 yield encoding.strtolocal(r)
General Comments 0
You need to be logged in to leave comments. Login now