resourceutil.py
59 lines
| 1.7 KiB
| text/x-python
|
PythonLexer
Martin von Zweigbergk
|
r44067 | # resourceutil.py - utility for looking up resources | ||
# | ||||
# Copyright 2005 K. Thananchayan <thananck@yahoo.com> | ||||
# Copyright 2005-2007 Matt Mackall <mpm@selenic.com> | ||||
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com> | ||||
# | ||||
# This software may be used and distributed according to the terms of the | ||||
# GNU General Public License version 2 or any later version. | ||||
from __future__ import absolute_import | ||||
import imp | ||||
Martin von Zweigbergk
|
r44068 | import os | ||
Martin von Zweigbergk
|
r44067 | import sys | ||
from .. import pycompat | ||||
def mainfrozen(): | ||||
"""return True if we are a frozen executable. | ||||
The code supports py2exe (most common, Windows only) and tools/freeze | ||||
(portable, not much used). | ||||
""" | ||||
return ( | ||||
pycompat.safehasattr(sys, "frozen") | ||||
or pycompat.safehasattr(sys, "importers") # new py2exe | ||||
or imp.is_frozen("__main__") # old py2exe | ||||
) # tools/freeze | ||||
Martin von Zweigbergk
|
r44068 | |||
# the location of data files matching the source code | ||||
if mainfrozen() and getattr(sys, 'frozen', None) != 'macosx_app': | ||||
# executable version (py2exe) doesn't support __file__ | ||||
datapath = os.path.dirname(pycompat.sysexecutable) | ||||
else: | ||||
datapath = os.path.dirname(os.path.dirname(pycompat.fsencode(__file__))) | ||||
Martin von Zweigbergk
|
r44323 | |||
try: | ||||
Martin von Zweigbergk
|
r44407 | from importlib import resources | ||
Martin von Zweigbergk
|
r44323 | |||
# Force loading of the resources module | ||||
Martin von Zweigbergk
|
r44407 | resources.open_binary # pytype: disable=module-attr | ||
Martin von Zweigbergk
|
r44323 | |||
def open_resource(package, name): | ||||
package = b'mercurial.' + package | ||||
Martin von Zweigbergk
|
r44407 | return resources.open_binary( # pytype: disable=module-attr | ||
Martin von Zweigbergk
|
r44323 | pycompat.sysstr(package), pycompat.sysstr(name) | ||
) | ||||
Martin von Zweigbergk
|
r44407 | except (ImportError, AttributeError): | ||
Martin von Zweigbergk
|
r44323 | |||
def _package_path(package): | ||||
return os.path.join(datapath, *package.split(b'.')) | ||||
def open_resource(package, name): | ||||
path = os.path.join(_package_path(package), name) | ||||
return open(path, 'rb') | ||||