gajim3/gajim/gui/__init__.py

55 lines
1.5 KiB
Python

import sys
from importlib.abc import MetaPathFinder
from importlib.util import spec_from_file_location
from pathlib import Path
class GUIFinder(MetaPathFinder):
def __init__(self, name, fallback=None):
self._path = Path(__file__).parent.parent / name
self._fallback_path = None
if fallback is not None:
self._fallback_path = Path(__file__).parent.parent / fallback
def find_spec(self, fullname, _path, _target=None):
if not fullname.startswith('gajim.gui'):
return None
_namespace, module_name = fullname.rsplit('.', 1)
module_path = self._find_module(module_name)
if module_path is None:
return None
spec = spec_from_file_location(fullname, module_path)
return spec
def _find_module(self, module_name):
module_path = self._path / f'{module_name}.py'
if module_path.exists():
return module_path
module_path = self._path / f'{module_name}.pyc'
if module_path.exists():
return module_path
if self._fallback_path is None:
return None
module_path = self._fallback_path / f'{module_name}.py'
if module_path.exists():
return module_path
module_path = self._fallback_path / f'{module_name}.pyc'
if module_path.exists():
return module_path
return None
def init(name, fallback=None):
sys.meta_path.append(GUIFinder(name, fallback=fallback))