mirror of
https://github.com/ArchiveBox/ArchiveBox.git
synced 2026-04-03 22:37:53 +10:00
move almost all config into new archivebox.CONSTANTS
This commit is contained in:
@@ -17,6 +17,8 @@ from pydantic_pkgr import (
|
||||
|
||||
from django.conf import settings
|
||||
|
||||
import archivebox
|
||||
|
||||
from .base_hook import BaseHook, HookType
|
||||
|
||||
|
||||
@@ -64,7 +66,9 @@ class BaseBinary(BaseHook, Binary):
|
||||
super().register(settings, parent_plugin=parent_plugin)
|
||||
|
||||
@staticmethod
|
||||
def symlink_to_lib(binary, bin_dir=settings.CONFIG.BIN_DIR) -> None:
|
||||
def symlink_to_lib(binary, bin_dir=None) -> None:
|
||||
bin_dir = bin_dir or archivebox.CONSTANTS.LIB_BIN_DIR
|
||||
|
||||
if not (binary.abspath and binary.abspath.exists()):
|
||||
return
|
||||
|
||||
@@ -77,19 +81,19 @@ class BaseBinary(BaseHook, Binary):
|
||||
@validate_call
|
||||
def load(self, **kwargs) -> Self:
|
||||
binary = super().load(**kwargs)
|
||||
self.symlink_to_lib(binary=binary, bin_dir=settings.CONFIG.BIN_DIR)
|
||||
self.symlink_to_lib(binary=binary, bin_dir=archivebox.CONSTANTS.LIB_BIN_DIR)
|
||||
return binary
|
||||
|
||||
@validate_call
|
||||
def install(self, **kwargs) -> Self:
|
||||
binary = super().install(**kwargs)
|
||||
self.symlink_to_lib(binary=binary, bin_dir=settings.CONFIG.BIN_DIR)
|
||||
self.symlink_to_lib(binary=binary, bin_dir=archivebox.CONSTANTS.LIB_BIN_DIR)
|
||||
return binary
|
||||
|
||||
@validate_call
|
||||
def load_or_install(self, **kwargs) -> Self:
|
||||
binary = super().load_or_install(**kwargs)
|
||||
self.symlink_to_lib(binary=binary, bin_dir=settings.CONFIG.BIN_DIR)
|
||||
self.symlink_to_lib(binary=binary, bin_dir=archivebox.CONSTANTS.LIB_BIN_DIR)
|
||||
return binary
|
||||
|
||||
@property
|
||||
|
||||
@@ -123,6 +123,10 @@ class ArchiveBoxBaseConfig(BaseSettings):
|
||||
validate_return=True,
|
||||
revalidate_instances="always",
|
||||
)
|
||||
|
||||
load_from_defaults: ClassVar[bool] = True
|
||||
load_from_configfile: ClassVar[bool] = True
|
||||
load_from_environment: ClassVar[bool] = True
|
||||
|
||||
@classmethod
|
||||
def settings_customise_sources(
|
||||
@@ -140,20 +144,22 @@ class ArchiveBoxBaseConfig(BaseSettings):
|
||||
|
||||
# import ipdb; ipdb.set_trace()
|
||||
|
||||
precedence_order = {}
|
||||
|
||||
# if ArchiveBox.conf does not exist yet, return defaults -> env order
|
||||
if not ARCHIVEBOX_CONFIG_FILE.is_file():
|
||||
return (
|
||||
init_settings,
|
||||
env_settings,
|
||||
)
|
||||
precedence_order = {
|
||||
'defaults': init_settings,
|
||||
'environment': env_settings,
|
||||
}
|
||||
|
||||
# if ArchiveBox.conf exists and is in TOML format, return default -> TOML -> env order
|
||||
try:
|
||||
return (
|
||||
init_settings,
|
||||
FlatTomlConfigSettingsSource(settings_cls, toml_file=ARCHIVEBOX_CONFIG_FILE),
|
||||
env_settings,
|
||||
)
|
||||
precedence_order = precedence_order or {
|
||||
'defaults': init_settings,
|
||||
'configfile': FlatTomlConfigSettingsSource(settings_cls, toml_file=ARCHIVEBOX_CONFIG_FILE),
|
||||
'environment': env_settings,
|
||||
}
|
||||
except Exception as err:
|
||||
if err.__class__.__name__ != "TOMLDecodeError":
|
||||
raise
|
||||
@@ -165,11 +171,20 @@ class ArchiveBoxBaseConfig(BaseSettings):
|
||||
new_toml = ini_to_toml.convert(original_ini)
|
||||
ARCHIVEBOX_CONFIG_FILE.write_text(new_toml)
|
||||
|
||||
return (
|
||||
init_settings,
|
||||
FlatTomlConfigSettingsSource(settings_cls, toml_file=ARCHIVEBOX_CONFIG_FILE),
|
||||
env_settings,
|
||||
)
|
||||
precedence_order = {
|
||||
'defaults': init_settings,
|
||||
'configfile': FlatTomlConfigSettingsSource(settings_cls, toml_file=ARCHIVEBOX_CONFIG_FILE),
|
||||
'environment': env_settings,
|
||||
}
|
||||
|
||||
if not cls.load_from_environment:
|
||||
precedence_order.pop('environment')
|
||||
if not cls.load_from_configfile:
|
||||
precedence_order.pop('configfile')
|
||||
if not cls.load_from_defaults:
|
||||
precedence_order.pop('defaults')
|
||||
|
||||
return tuple(precedence_order.values())
|
||||
|
||||
@model_validator(mode="after")
|
||||
def fill_defaults(self):
|
||||
|
||||
@@ -1,72 +1,72 @@
|
||||
__package__ = 'archivebox.plugantic.management.commands'
|
||||
# __package__ = 'archivebox.plugantic.management.commands'
|
||||
|
||||
from django.core.management.base import BaseCommand
|
||||
from django.conf import settings
|
||||
# from django.core.management.base import BaseCommand
|
||||
# from django.conf import settings
|
||||
|
||||
from pydantic_pkgr import Binary, BinProvider, BrewProvider, EnvProvider, SemVer
|
||||
from pydantic_pkgr.binprovider import bin_abspath
|
||||
# from pydantic_pkgr import Binary, BinProvider, BrewProvider, EnvProvider, SemVer
|
||||
# from pydantic_pkgr.binprovider import bin_abspath
|
||||
|
||||
from ....config import NODE_BIN_PATH, bin_path
|
||||
from ...base_binary import env
|
||||
# from ....config import bin_path
|
||||
# from ...base_binary import env
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
def handle(self, *args, method, **options):
|
||||
method(*args, **options)
|
||||
# class Command(BaseCommand):
|
||||
# def handle(self, *args, method, **options):
|
||||
# method(*args, **options)
|
||||
|
||||
def add_arguments(self, parser):
|
||||
subparsers = parser.add_subparsers(title="sub-commands", required=True)
|
||||
# def add_arguments(self, parser):
|
||||
# subparsers = parser.add_subparsers(title="sub-commands", required=True)
|
||||
|
||||
list_parser = subparsers.add_parser("list", help="List archivebox runtime dependencies.")
|
||||
list_parser.set_defaults(method=self.list)
|
||||
# list_parser = subparsers.add_parser("list", help="List archivebox runtime dependencies.")
|
||||
# list_parser.set_defaults(method=self.list)
|
||||
|
||||
install_parser = subparsers.add_parser("install", help="Install archivebox runtime dependencies.")
|
||||
install_parser.add_argument("--update", action="store_true", help="Update dependencies to latest versions.")
|
||||
install_parser.add_argument("package_names", nargs="+", type=str)
|
||||
install_parser.set_defaults(method=self.install)
|
||||
# install_parser = subparsers.add_parser("install", help="Install archivebox runtime dependencies.")
|
||||
# install_parser.add_argument("--update", action="store_true", help="Update dependencies to latest versions.")
|
||||
# install_parser.add_argument("package_names", nargs="+", type=str)
|
||||
# install_parser.set_defaults(method=self.install)
|
||||
|
||||
def list(self, *args, **options):
|
||||
self.stdout.write('################# PLUGINS ####################')
|
||||
for plugin in settings.PLUGINS.values():
|
||||
self.stdout.write(f'{plugin.name}:')
|
||||
for binary in plugin.binaries:
|
||||
try:
|
||||
binary = binary.load()
|
||||
except Exception as e:
|
||||
# import ipdb; ipdb.set_trace()
|
||||
raise
|
||||
self.stdout.write(f' {binary.name.ljust(14)} {str(binary.version).ljust(11)} {binary.binprovider.INSTALLER_BIN.ljust(5)} {binary.abspath}')
|
||||
# def list(self, *args, **options):
|
||||
# self.stdout.write('################# PLUGINS ####################')
|
||||
# for plugin in settings.PLUGINS.values():
|
||||
# self.stdout.write(f'{plugin.name}:')
|
||||
# for binary in plugin.binaries:
|
||||
# try:
|
||||
# binary = binary.load()
|
||||
# except Exception as e:
|
||||
# # import ipdb; ipdb.set_trace()
|
||||
# raise
|
||||
# self.stdout.write(f' {binary.name.ljust(14)} {str(binary.version).ljust(11)} {binary.binprovider.INSTALLER_BIN.ljust(5)} {binary.abspath}')
|
||||
|
||||
self.stdout.write('\n################# LEGACY ####################')
|
||||
for bin_key, dependency in settings.CONFIG.DEPENDENCIES.items():
|
||||
bin_name = settings.CONFIG[bin_key]
|
||||
# self.stdout.write('\n################# LEGACY ####################')
|
||||
# for bin_key, dependency in settings.CONFIG.DEPENDENCIES.items():
|
||||
# bin_name = settings.CONFIG[bin_key]
|
||||
|
||||
self.stdout.write(f'{bin_key}: {bin_name}')
|
||||
# self.stdout.write(f'{bin_key}: {bin_name}')
|
||||
|
||||
# binary = Binary(name=package_name, providers=[env])
|
||||
# print(binary)
|
||||
# # binary = Binary(name=package_name, providers=[env])
|
||||
# # print(binary)
|
||||
|
||||
# try:
|
||||
# loaded_bin = binary.load()
|
||||
# self.stdout.write(
|
||||
# self.style.SUCCESS(f'Successfully loaded {package_name}:') + str(loaded_bin)
|
||||
# )
|
||||
# except Exception as e:
|
||||
# self.stderr.write(
|
||||
# self.style.ERROR(f"Error loading {package_name}: {e}")
|
||||
# )
|
||||
# # try:
|
||||
# # loaded_bin = binary.load()
|
||||
# # self.stdout.write(
|
||||
# # self.style.SUCCESS(f'Successfully loaded {package_name}:') + str(loaded_bin)
|
||||
# # )
|
||||
# # except Exception as e:
|
||||
# # self.stderr.write(
|
||||
# # self.style.ERROR(f"Error loading {package_name}: {e}")
|
||||
# # )
|
||||
|
||||
def install(self, *args, bright, **options):
|
||||
for package_name in options["package_names"]:
|
||||
binary = Binary(name=package_name, providers=[env])
|
||||
print(binary)
|
||||
# def install(self, *args, bright, **options):
|
||||
# for package_name in options["package_names"]:
|
||||
# binary = Binary(name=package_name, providers=[env])
|
||||
# print(binary)
|
||||
|
||||
try:
|
||||
loaded_bin = binary.load()
|
||||
self.stdout.write(
|
||||
self.style.SUCCESS(f'Successfully loaded {package_name}:') + str(loaded_bin)
|
||||
)
|
||||
except Exception as e:
|
||||
self.stderr.write(
|
||||
self.style.ERROR(f"Error loading {package_name}: {e}")
|
||||
)
|
||||
# try:
|
||||
# loaded_bin = binary.load()
|
||||
# self.stdout.write(
|
||||
# self.style.SUCCESS(f'Successfully loaded {package_name}:') + str(loaded_bin)
|
||||
# )
|
||||
# except Exception as e:
|
||||
# self.stderr.write(
|
||||
# self.style.ERROR(f"Error loading {package_name}: {e}")
|
||||
# )
|
||||
|
||||
Reference in New Issue
Block a user