mirror of
https://github.com/ArchiveBox/ArchiveBox.git
synced 2025-05-13 14:44:29 -04:00
83 lines
2.3 KiB
Python
83 lines
2.3 KiB
Python
import sys
|
|
import inspect
|
|
from typing import List, Dict, Any, Optional
|
|
from pathlib import Path
|
|
|
|
import django
|
|
from django.apps import AppConfig
|
|
from django.core.checks import Tags, Warning, register
|
|
from django.db.backends.sqlite3.base import Database as sqlite3
|
|
|
|
from pydantic import (
|
|
Field,
|
|
SerializeAsAny,
|
|
)
|
|
|
|
from pydantic_pkgr import SemVer, BinProvider, BinProviderName, ProviderLookupDict, BinName, Binary, EnvProvider, NpmProvider
|
|
|
|
from plugantic.extractors import Extractor, ExtractorName
|
|
from plugantic.plugins import Plugin
|
|
from plugantic.configs import ConfigSet, ConfigSectionName
|
|
from plugantic.replayers import Replayer
|
|
|
|
|
|
class PythonBinary(Binary):
|
|
name: BinName = 'python'
|
|
|
|
providers_supported: List[BinProvider] = [EnvProvider()]
|
|
provider_overrides: Dict[str, Any] = {
|
|
'env': {
|
|
'subdeps': \
|
|
lambda: 'python3 python3-minimal python3-pip python3-virtualenv',
|
|
'abspath': \
|
|
lambda: sys.executable,
|
|
'version': \
|
|
lambda: '{}.{}.{}'.format(*sys.version_info[:3]),
|
|
},
|
|
}
|
|
|
|
class SqliteBinary(Binary):
|
|
name: BinName = 'sqlite'
|
|
providers_supported: List[BinProvider] = [EnvProvider()]
|
|
provider_overrides: Dict[BinProviderName, ProviderLookupDict] = {
|
|
'env': {
|
|
'abspath': \
|
|
lambda: Path(inspect.getfile(sqlite3)),
|
|
'version': \
|
|
lambda: SemVer(sqlite3.version),
|
|
},
|
|
}
|
|
|
|
|
|
class DjangoBinary(Binary):
|
|
name: BinName = 'django'
|
|
|
|
providers_supported: List[BinProvider] = [EnvProvider()]
|
|
provider_overrides: Dict[BinProviderName, ProviderLookupDict] = {
|
|
'env': {
|
|
'abspath': \
|
|
lambda: inspect.getfile(django),
|
|
'version': \
|
|
lambda: django.VERSION[:3],
|
|
},
|
|
}
|
|
|
|
|
|
class BasicReplayer(Replayer):
|
|
name: str = 'basic'
|
|
|
|
|
|
class BasePlugin(Plugin):
|
|
name: str = 'base'
|
|
configs: List[SerializeAsAny[ConfigSet]] = []
|
|
binaries: List[SerializeAsAny[Binary]] = [PythonBinary(), SqliteBinary(), DjangoBinary()]
|
|
extractors: List[SerializeAsAny[Extractor]] = []
|
|
replayers: List[SerializeAsAny[Replayer]] = [BasicReplayer()]
|
|
|
|
|
|
PLUGINS = [BasePlugin()]
|
|
|
|
|
|
class BaseConfig(AppConfig):
|
|
default_auto_field = 'django.db.models.BigAutoField'
|
|
name = 'builtin_plugins.base'
|