From c215e7aaae1c6a46de0de990534c3507877e5910 Mon Sep 17 00:00:00 2001 From: bskjon Date: Tue, 16 Apr 2024 00:00:10 +0200 Subject: [PATCH] Replacement --- apps/pyMetadata/app.py | 45 ++++++++++++++++++----------- apps/pyMetadata/sources/result.py | 8 ------ apps/pyMetadata/sources/select.py | 47 ++++++++----------------------- 3 files changed, 39 insertions(+), 61 deletions(-) diff --git a/apps/pyMetadata/app.py b/apps/pyMetadata/app.py index 96d036dc..77517672 100644 --- a/apps/pyMetadata/app.py +++ b/apps/pyMetadata/app.py @@ -177,24 +177,35 @@ class MessageHandlerThread(threading.Thread): def get_metadata(self, name: str, baseName: str, evnetId: str) -> Optional[DataResult]: result = None - logger.info("Checking cache for offloading") - cache_result = ResultCache.get(name) - if cache_result is None: - cache_result = ResultCache.get(baseName) - if cache_result: - logger.info("Cache hit for %s", name) - result = cache_result - else: - logger.info("Cache hit for %s", name) - result = cache_result - - if result is None: - logger.info("Not in cache: %s or %s", name, baseName) - logger.info("Searching in sources for information about %s", name) - result: Optional[NamedDataResult] = UseSource(title=name, baseName=baseName, eventId=evnetId).select_result() - if (result.data.status == "COMPLETED"): + logger.info("Checking cache") + titleCache = ResultCache.get(name) + if (titleCache is None): + titleCache = UseSource(title=name, eventId=evnetId).select_result() + if titleCache is not None: logger.info("Storing response for %s in in-memory cache", name) - ResultCache.add(title=result.name, result=result.data) + ResultCache.add(title=name, result=titleCache) + else: + logger.info("Cache hit for %s", name) + + baseNameCache = ResultCache.get(baseName) + if (baseNameCache is None): + baseNameCache = UseSource(title=baseName, eventId=evnetId).select_result() + if baseNameCache is not None: + logger.info("Storing response for %s in in-memory cache", baseName) + ResultCache.add(title=baseName, result=baseNameCache) + else: + logger.info("Cache hit for %s", baseName) + + if titleCache is not None and baseNameCache is not None: + if (titleCache.data.type.lower() == "movie" or baseNameCache.data.type.lower() == "movie"): + result = baseNameCache + else: + result = titleCache + elif titleCache is not None: + result = titleCache + elif baseNameCache is not None: + result = baseNameCache + return result diff --git a/apps/pyMetadata/sources/result.py b/apps/pyMetadata/sources/result.py index ef245358..b7c791a9 100644 --- a/apps/pyMetadata/sources/result.py +++ b/apps/pyMetadata/sources/result.py @@ -29,13 +29,5 @@ class DataResult: message: str | None = None data: Metadata = None - def to_dict(self): - return asdict(self) - -@dataclass -class NamedDataResult: - name: str - data: DataResult - def to_dict(self): return asdict(self) \ No newline at end of file diff --git a/apps/pyMetadata/sources/select.py b/apps/pyMetadata/sources/select.py index c891f625..f5348975 100644 --- a/apps/pyMetadata/sources/select.py +++ b/apps/pyMetadata/sources/select.py @@ -30,11 +30,9 @@ class DataAndScore: class UseSource(): title: str - baseName: str eventId: str - def __init__(self, title, baseName, eventId) -> None: + def __init__(self, title, eventId) -> None: self.title = title - self.baseName = baseName self.eventId = eventId def stripped(self, input_string) -> str: @@ -71,47 +69,26 @@ class UseSource(): if (altScore > highScore): highScore = altScore logger.info(f"[A:{highScore}]\t{self.stripped(wd.result.data.title.lower())} => {self.stripped(title.lower())}") - givenScore = highScore * (wd.weight / 10) + givenScore = highScore * wd.weight logger.info(f"[G:{givenScore}]\t{self.stripped(wd.result.data.title.lower())} => {self.stripped(title.lower())} Weight:{wd.weight}") result.append(DataAndScore(wd.result, givenScore)) return result - def select_result(self) -> Optional[NamedDataResult]: + def select_result(self) -> Optional[DataResult]: """""" - scored: List[DataAndScore] = [] - titleResult = self.__perform_search(title=self.title) - baseNameResult = self.__perform_search(title=self.baseName) + result = self.__perform_search(title=self.title) - titleScoreResult = self.__calculate_score(title=self.title, weightData=titleResult) - baseNameScoreResult = self.__calculate_score(title=self.baseName, weightData=baseNameResult) + scoredResult = self.__calculate_score(title=self.title, weightData=result) - titleScoreResult.sort(key=lambda x: x.score, reverse=True) - baseNameScoreResult.sort(key=lambda x: x.score, reverse=True) + scoredResult.sort(key=lambda x: x.score, reverse=True) - scored.extend(titleScoreResult) - scored.extend(baseNameScoreResult) - - selected: NamedDataResult|None = None - ht = titleScoreResult[0] - bt = baseNameScoreResult[0] - if (bt is not None and ht is not None): - if (bt.score >= ht.score): - selected = NamedDataResult(self.baseName, bt.result) - else: - selected = NamedDataResult(self.title, ht.result) - else: - if len(titleScoreResult) > 0: - selected = NamedDataResult(self.title, titleScoreResult[0].result) - elif len(baseNameScoreResult) > 0: - selected = NamedDataResult(self.baseName, baseNameScoreResult[0].result) - else: - selected = None + selected: DataResult|None = scoredResult[0].result if len(scoredResult) > 0 else None jsr = "" try: - jsr = json.dumps([obj.to_dict() for obj in scored], indent=4) - with open(f"./logs/{self.eventId}.json", "w", encoding="utf-8") as f: + jsr = json.dumps([obj.to_dict() for obj in scoredResult], indent=4) + with open(f"./logs/{self.eventId}-{self.title}.json", "w", encoding="utf-8") as f: f.write(jsr) except Exception as e: logger.info("Couldn't dump log..") @@ -119,15 +96,13 @@ class UseSource(): logger.info(jsr) try: - titledResult = titleResult - titledResult.extend(baseNameResult) titles: List[str] = [] - for wd in titledResult: + for wd in scoredResult: titles.append(wd.result.data.title) titles.extend(wd.result.data.altTitle) joinedTitles = "\n\t" + "\n\t".join(titles) - logger.info(f"\nTitle: {self.title} \nBaseName: {self.baseName} \nFound: {joinedTitles} \nTitle selected: \n\t{selected.data.data.title}\n") + logger.info(f"\Name: {self.title} \n \nFound: {joinedTitles} \nTitle selected: \n\t{selected.data.title}\n") except Exception as e: logger.error(e) pass