84 lines
2.5 KiB
Python
84 lines
2.5 KiB
Python
import logging
|
|
import signal
|
|
import sys
|
|
import os
|
|
from typing import List, Optional
|
|
import uuid
|
|
import threading
|
|
import json
|
|
import time
|
|
from fuzzywuzzy import fuzz
|
|
|
|
from algo.AdvancedMatcher import AdvancedMatcher
|
|
from algo.SimpleMatcher import SimpleMatcher
|
|
from algo.PrefixMatcher import PrefixMatcher
|
|
from clazz.Metadata import Metadata
|
|
|
|
from clazz.shared import EventData, EventMetadata, MediaEvent
|
|
from sources.anii import Anii
|
|
from sources.imdb import Imdb
|
|
from sources.mal import Mal
|
|
|
|
|
|
logging.basicConfig(
|
|
level=logging.INFO,
|
|
format="%(asctime)s [%(levelname)s] %(message)s",
|
|
handlers=[
|
|
logging.StreamHandler(sys.stdout)
|
|
]
|
|
)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class DryRun():
|
|
titles: List[str] = []
|
|
|
|
def __init__(self, titles: List[str]) -> None:
|
|
self.titles = titles
|
|
|
|
def run(self) -> None:
|
|
combined_titles = ", ".join(self.titles)
|
|
logger.info("Searching for %s", combined_titles)
|
|
result: Metadata | None = self.__getMetadata(self.titles)
|
|
|
|
message: str | None = None
|
|
if (result is None):
|
|
message = f"No result for {combined_titles}"
|
|
logger.info(message)
|
|
|
|
message = MediaEvent(
|
|
metadata = EventMetadata(
|
|
referenceId="00000000-0000-0000-0000-000000000000",
|
|
eventId="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
|
|
derivedFromEventId=None,
|
|
status= "Failed" if result is None else "Success",
|
|
),
|
|
data=result
|
|
)
|
|
|
|
logger.info(message)
|
|
|
|
def __getMetadata(self, titles: List[str]) -> Metadata | None:
|
|
mal = Mal(titles=titles)
|
|
anii = Anii(titles=titles)
|
|
imdb = Imdb(titles=titles)
|
|
|
|
results: List[Metadata] = [
|
|
mal.search(),
|
|
anii.search(),
|
|
imdb.search()
|
|
]
|
|
filtered_results = [result for result in results if result is not None]
|
|
logger.info("Simple matcher")
|
|
simpleSelector = SimpleMatcher(titles=titles, metadata=filtered_results).getBestMatch()
|
|
logger.info("Advanced matcher")
|
|
advancedSelector = AdvancedMatcher(titles=titles, metadata=filtered_results).getBestMatch()
|
|
logger.info("Prefrix matcher")
|
|
prefixSelector = PrefixMatcher(titles=titles, metadata=filtered_results).getBestMatch()
|
|
if prefixSelector is not None:
|
|
return prefixSelector
|
|
if simpleSelector is not None:
|
|
return simpleSelector
|
|
if advancedSelector is not None:
|
|
return advancedSelector
|
|
return None |