|
|
@@ -1,116 +0,0 @@
|
|
|
-__package__ = 'archivebox.builtin_plugins.systempython'
|
|
|
-
|
|
|
-import os
|
|
|
-import sys
|
|
|
-import inspect
|
|
|
-from typing import List, Dict, Any, Callable, ClassVar
|
|
|
-from pathlib import Path
|
|
|
-
|
|
|
-import django
|
|
|
-from django.apps import AppConfig
|
|
|
-from django.core.checks import Tags, Warning, register
|
|
|
-from django.utils.functional import classproperty
|
|
|
-from django.db.backends.sqlite3.base import Database as sqlite3
|
|
|
-from django.core.checks import Tags, Error, register
|
|
|
-
|
|
|
-from pydantic import InstanceOf, Field
|
|
|
-
|
|
|
-from pydantic_pkgr import SemVer, BinProvider, BinProviderName, ProviderLookupDict, BinName, Binary, EnvProvider, NpmProvider
|
|
|
-
|
|
|
-from plugantic.base_plugin import BasePlugin, BaseConfigSet, BaseBinary, BaseBinProvider, BaseExtractor, BaseReplayer
|
|
|
-from plugantic.base_check import BaseCheck
|
|
|
-
|
|
|
-from pkg.settings import env, apt, brew
|
|
|
-
|
|
|
-from builtin_plugins.pip.apps import pip
|
|
|
-
|
|
|
-class PythonBinary(BaseBinary):
|
|
|
- name: BinName = 'python'
|
|
|
-
|
|
|
- binproviders_supported: List[InstanceOf[BinProvider]] = [pip, apt, brew, env]
|
|
|
- provider_overrides: Dict[BinProviderName, ProviderLookupDict] = {
|
|
|
- 'apt': {
|
|
|
- 'subdeps': \
|
|
|
- lambda: 'python3 python3-minimal python3-pip python3-virtualenv',
|
|
|
- 'abspath': \
|
|
|
- lambda: sys.executable,
|
|
|
- 'version': \
|
|
|
- lambda: '{}.{}.{}'.format(*sys.version_info[:3]),
|
|
|
- },
|
|
|
- }
|
|
|
-
|
|
|
-class SqliteBinary(BaseBinary):
|
|
|
- name: BinName = 'sqlite'
|
|
|
- binproviders_supported: List[InstanceOf[BaseBinProvider]] = Field(default=[pip])
|
|
|
- provider_overrides: Dict[BinProviderName, ProviderLookupDict] = {
|
|
|
- 'pip': {
|
|
|
- 'abspath': \
|
|
|
- lambda: Path(inspect.getfile(sqlite3)),
|
|
|
- 'version': \
|
|
|
- lambda: SemVer(sqlite3.version),
|
|
|
- },
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-class DjangoBinary(BaseBinary):
|
|
|
- name: BinName = 'django'
|
|
|
-
|
|
|
- binproviders_supported: List[InstanceOf[BaseBinProvider]] = Field(default=[pip])
|
|
|
- provider_overrides: Dict[BinProviderName, ProviderLookupDict] = {
|
|
|
- 'pip': {
|
|
|
- 'abspath': \
|
|
|
- lambda: inspect.getfile(django),
|
|
|
- 'version': \
|
|
|
- lambda: django.VERSION[:3],
|
|
|
- },
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-class BasicReplayer(BaseReplayer):
|
|
|
- name: str = 'basic'
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-class CheckUserIsNotRoot(BaseCheck):
|
|
|
- label: str = 'CheckUserIsNotRoot'
|
|
|
- tag = Tags.database
|
|
|
-
|
|
|
- @staticmethod
|
|
|
- def check(settings, logger) -> List[Warning]:
|
|
|
- errors = []
|
|
|
- if getattr(settings, "USER", None) == 'root' or getattr(settings, "PUID", None) == 0:
|
|
|
- errors.append(
|
|
|
- Error(
|
|
|
- "Cannot run as root!",
|
|
|
- id="core.S001",
|
|
|
- hint=f'Run ArchiveBox as a non-root user with a UID greater than 500. (currently running as UID {os.getuid()}).',
|
|
|
- )
|
|
|
- )
|
|
|
- logger.debug('[√] UID is not root')
|
|
|
- return errors
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-class SystemPythonPlugin(BasePlugin):
|
|
|
- name: str = 'builtin_plugins.systempython'
|
|
|
- app_label: str = 'systempython'
|
|
|
- verbose_name: str = 'System Python'
|
|
|
-
|
|
|
- configs: List[InstanceOf[BaseConfigSet]] = []
|
|
|
- binaries: List[InstanceOf[BaseBinary]] = [PythonBinary(), SqliteBinary(), DjangoBinary()]
|
|
|
- extractors: List[InstanceOf[BaseExtractor]] = []
|
|
|
- replayers: List[InstanceOf[BaseReplayer]] = [BasicReplayer()]
|
|
|
- checks: List[InstanceOf[BaseCheck]] = [CheckUserIsNotRoot()]
|
|
|
-
|
|
|
-
|
|
|
-PLUGIN = SystemPythonPlugin()
|
|
|
-DJANGO_APP = PLUGIN.AppConfig
|
|
|
-# CONFIGS = PLUGIN.configs
|
|
|
-# BINARIES = PLUGIN.binaries
|
|
|
-# EXTRACTORS = PLUGIN.extractors
|
|
|
-# REPLAYERS = PLUGIN.replayers
|
|
|
-# PARSERS = PLUGIN.parsers
|
|
|
-# DAEMONS = PLUGIN.daemons
|
|
|
-# MODELS = PLUGIN.models
|
|
|
-# CHECKS = PLUGIN.checks
|