add get_scope_config method to merge config down to scope

This commit is contained in:
Nick Sweeting 2024-10-15 22:32:36 -07:00
parent c9f88f5875
commit 0abbc11a6b
No known key found for this signature in database
2 changed files with 40 additions and 0 deletions

View file

@ -4,15 +4,28 @@ from typing import Dict, Any
from .. import hookspec from .. import hookspec
from .base_binary import BaseBinary, BaseBinProvider
from .base_configset import BaseConfigSet from .base_configset import BaseConfigSet
from .base_extractor import BaseExtractor from .base_extractor import BaseExtractor
from .base_searchbackend import BaseSearchBackend from .base_searchbackend import BaseSearchBackend
@hookspec
def get_PLUGIN() -> Dict[str, Dict[str, Any]]:
return {}
@hookspec @hookspec
def get_CONFIG() -> Dict[str, BaseConfigSet]: def get_CONFIG() -> Dict[str, BaseConfigSet]:
return {} return {}
@hookspec
def get_BINARIES() -> Dict[str, BaseBinary]:
return {}
@hookspec
def get_BINPROVIDERS() -> Dict[str, BaseBinProvider]:
return {}
@hookspec @hookspec
def get_EXTRACTORS() -> Dict[str, BaseExtractor]: def get_EXTRACTORS() -> Dict[str, BaseExtractor]:
return {} return {}

View file

@ -128,3 +128,30 @@ def get_SEARCHBACKENDS() -> Dict[str, 'BaseSearchBackend']:
for plugin_searchbackends in pm.hook.get_SEARCHBACKENDS() for plugin_searchbackends in pm.hook.get_SEARCHBACKENDS()
for searchbackend_id,searchbackend in plugin_searchbackends.items() for searchbackend_id,searchbackend in plugin_searchbackends.items()
}) })
def get_scope_config(defaults=settings.CONFIG, persona=None, seed=None, crawl=None, snapshot=None, archiveresult=None, extra_config=None):
"""Get all the relevant config for the given scope, in correct precedence order"""
snapshot = snapshot or (archiveresult and archiveresult.snapshot)
crawl = crawl or (snapshot and snapshot.crawl)
seed = seed or (crawl and crawl.seed)
persona = persona or (crawl and crawl.persona)
persona_config = persona.config if persona else {}
seed_config = seed.config if seed else {}
crawl_config = crawl.config if crawl else {}
snapshot_config = snapshot.config if snapshot else {}
archiveresult_config = archiveresult.config if archiveresult else {}
extra_config = extra_config or {}
return {
**defaults, # defaults / config file / environment variables
**persona_config, # lowest precedence
**seed_config,
**crawl_config,
**snapshot_config,
**archiveresult_config,
**extra_config, # highest precedence
}