浏览代码

fix loading of plugin dependencies and bump pydantic_pkgr version

Nick Sweeting 1 年之前
父节点
当前提交
6e13cd4820

+ 4 - 3
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'
 

+ 20 - 2
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 ##########################

+ 3 - 2
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")

+ 1 - 1
archivebox/vendor/pydantic-pkgr

@@ -1 +1 @@
-Subproject commit 3711257c2080634f266600af7ea61c92d9c364c9
+Subproject commit 2cd844533d888ce29b9bf32b8363510dd0d76166