mirror of
https://github.com/maxdorninger/MediaManager.git
synced 2026-08-01 17:46:46 -04:00
add scoring rules to config and add evaluate indexer query result function
This commit is contained in:
@@ -13,7 +13,24 @@ class JackettConfig(BaseSettings):
|
||||
url: str = "http://localhost:9696"
|
||||
indexers: list[str] = ["all"]
|
||||
|
||||
class ScoringRule(BaseSettings):
|
||||
name: str
|
||||
score_modifier: int = 0
|
||||
negate: bool = False
|
||||
|
||||
class TitleScoringRule(ScoringRule):
|
||||
keywords: list[str]
|
||||
|
||||
class IndexerFlagScoringRule(ScoringRule):
|
||||
flags: list[str]
|
||||
|
||||
class ScoringRuleSet(BaseSettings):
|
||||
name: str
|
||||
tags: list[str] = []
|
||||
rule_names: list[str] = []
|
||||
|
||||
class IndexerConfig(BaseSettings):
|
||||
prowlarr: ProwlarrConfig
|
||||
jackett: JackettConfig
|
||||
title_scoring_rules: list[TitleScoringRule] = []
|
||||
indexer_flag_scoring_rules: list[IndexerFlagScoringRule] = []
|
||||
21
media_manager/indexer/utils.py
Normal file
21
media_manager/indexer/utils.py
Normal file
@@ -0,0 +1,21 @@
|
||||
from media_manager.config import AllEncompassingConfig
|
||||
from media_manager.indexer.config import ScoringRuleSet
|
||||
from media_manager.indexer.schemas import IndexerQueryResult
|
||||
|
||||
|
||||
def evaluate_indexer_query_result(query_result: IndexerQueryResult, ruleset: ScoringRuleSet) -> IndexerQueryResult|None:
|
||||
title_rules = AllEncompassingConfig().indexers.title_scoring_rules
|
||||
indexer_flag_rules = AllEncompassingConfig().indexers.indexer_flag_scoring_rules
|
||||
for rule_name in ruleset.rule_names:
|
||||
for rule in title_rules:
|
||||
if rule.name == rule_name:
|
||||
if any(keyword.lower() in query_result.title.lower() for keyword in rule.keywords) and not rule.negate:
|
||||
query_result.score += rule.score_modifier
|
||||
for rule in indexer_flag_rules:
|
||||
if rule.name == rule_name:
|
||||
if any(flag in query_result.flags for flag in rule.flags) and not rule.negate:
|
||||
query_result.score += rule.score_modifier
|
||||
if query_result.score <= 0:
|
||||
return None
|
||||
|
||||
return query_result
|
||||
Reference in New Issue
Block a user