diff --git a/archivebox/builtin_plugins/base/apps.py b/archivebox/builtin_plugins/base/apps.py index d74df1db..291bbe50 100644 --- a/archivebox/builtin_plugins/base/apps.py +++ b/archivebox/builtin_plugins/base/apps.py @@ -13,7 +13,7 @@ from pydantic import ( SerializeAsAny, ) -from pydantic_pkgr import BinProvider, BinProviderName, ProviderLookupDict, BinName, Binary, EnvProvider, NpmProvider +from pydantic_pkgr import SemVer, BinProvider, BinProviderName, ProviderLookupDict, BinName, Binary, EnvProvider, NpmProvider from plugantic.extractors import Extractor, ExtractorName from plugantic.plugins import Plugin @@ -42,12 +42,13 @@ class SqliteBinary(Binary): provider_overrides: Dict[BinProviderName, ProviderLookupDict] = { 'env': { 'abspath': \ - lambda: inspect.getfile(sqlite3), + lambda: Path(inspect.getfile(sqlite3)), 'version': \ - lambda: sqlite3.version, + lambda: SemVer(sqlite3.version), }, } + class DjangoBinary(Binary): name: BinName = 'django' diff --git a/archivebox/builtin_plugins/singlefile/apps.py b/archivebox/builtin_plugins/singlefile/apps.py index 782bd5d0..963481e3 100644 --- a/archivebox/builtin_plugins/singlefile/apps.py +++ b/archivebox/builtin_plugins/singlefile/apps.py @@ -1,4 +1,4 @@ -from typing import List, Optional +from typing import List, Optional, Dict from pathlib import Path from django.apps import AppConfig @@ -10,11 +10,15 @@ from pydantic import ( ) from pydantic_pkgr import BinProvider, BinName, Binary, EnvProvider, NpmProvider +from pydantic_pkgr.binprovider import bin_abspath +from pydantic_pkgr.binary import BinProviderName, ProviderLookupDict from plugantic.extractors import Extractor, ExtractorName from plugantic.plugins import Plugin from plugantic.configs import ConfigSet, ConfigSectionName +from pkgs.settings import env + ###################### Config ########################## @@ -58,9 +62,23 @@ PLUGIN_CONFIG = [ ###################### Binaries ############################ +min_version: str = "1.1.54" +max_version: str = "2.0.0" + class SinglefileBinary(Binary): name: BinName = 'single-file' - providers_supported: List[BinProvider] = [EnvProvider(), NpmProvider()] + providers_supported: List[BinProvider] = [NpmProvider()] + + + provider_overrides: Dict[BinProviderName, ProviderLookupDict] ={ + 'env': { + 'abspath': lambda: bin_abspath('single-file-node.js', PATH=env.PATH) or bin_abspath('single-file', PATH=env.PATH), + }, + 'npm': { + # 'abspath': lambda: bin_abspath('single-file', PATH=NpmProvider().PATH) or bin_abspath('single-file', PATH=env.PATH), + 'subdeps': lambda: f'single-file-cli@>={min_version} <{max_version}', + }, + } ###################### Extractors ########################## diff --git a/archivebox/pkgs/settings.py b/archivebox/pkgs/settings.py index b44b13fb..6ea7f48c 100644 --- a/archivebox/pkgs/settings.py +++ b/archivebox/pkgs/settings.py @@ -66,7 +66,7 @@ for bin_key, dependency in settings.CONFIG.DEPENDENCIES.items(): try: binary = binary_spec.load() except Exception as e: - print(f"- ❌ Binary {bin_name} failed to load with error: {e}") + # print(f"- ❌ Binary {bin_name} failed to load with error: {e}") continue assert isinstance(binary.loaded_version, SemVer) @@ -76,7 +76,8 @@ for bin_key, dependency in settings.CONFIG.DEPENDENCIES.items(): assert str(binary.loaded_respath) == str(bin_abspath(dependency['path']).resolve()), f"Expected {bin_name} abspath {bin_abspath(dependency['path']).resolve()}, got {binary.loaded_respath}" assert binary.is_valid == dependency['is_valid'], f"Expected {bin_name} is_valid={dependency['is_valid']}, got {binary.is_valid}" except Exception as e: - print(f"WARNING: Error loading {bin_name}: {e}") + pass + # print(f"WARNING: Error loading {bin_name}: {e}") # import ipdb; ipdb.set_trace() # print(f"- ✅ Binary {bin_name} loaded successfully") diff --git a/archivebox/vendor/pydantic-pkgr b/archivebox/vendor/pydantic-pkgr index 3711257c..2cd84453 160000 --- a/archivebox/vendor/pydantic-pkgr +++ b/archivebox/vendor/pydantic-pkgr @@ -1 +1 @@ -Subproject commit 3711257c2080634f266600af7ea61c92d9c364c9 +Subproject commit 2cd844533d888ce29b9bf32b8363510dd0d76166