ArchiveBox/archivebox/vendor/__init__.py
2024-10-28 20:00:21 -07:00

39 lines
1.4 KiB
Python

import sys
import importlib
from pathlib import Path
VENDOR_DIR = Path(__file__).parent
VENDORED_LIBS = [
'abx',
# 'pydantic-pkgr',
]
# scan ./vendor and add all dirs present to list of available VENDORED_LIBS
for subdir in reversed(sorted(VENDOR_DIR.iterdir())):
if subdir.is_dir() and subdir.name not in VENDORED_LIBS and not subdir.name.startswith('_'):
VENDORED_LIBS.append(subdir.name)
def load_vendored_libs():
"""Add archivebox/vendor to sys.path and import all vendored libraries present within"""
if str(VENDOR_DIR) not in sys.path:
sys.path.append(str(VENDOR_DIR))
for lib_name in VENDORED_LIBS:
lib_dir = VENDOR_DIR / lib_name
assert lib_dir.is_dir(), f'Expected vendor libary {lib_name} could not be found in {lib_dir}'
try:
lib = importlib.import_module(lib_name)
# print(f"Successfully imported lib from environment {lib_name}")
except ImportError:
sys.path.append(str(lib_dir))
try:
lib = importlib.import_module(lib_name)
# print(f"Successfully imported lib from vendored fallback {lib_name}: {inspect.getfile(lib)}")
except ImportError as e:
print(f"Failed to import lib from environment or vendored fallback {lib_name}: {e}", file=sys.stderr)
sys.exit(1)