def test_simple_scan(self): scanner = FileSystemMediaScanner(media_scan_path=self.temp_dir, job_context=self.job_context, skip_filetype_checks=True) scanner_observer = rx.Observable.create(scanner) processed_items = [] scanner_observer.subscribe( on_next=lambda item: processed_items.append(item)) self.assertEqual(2, len(processed_items)) self.assertTrue( one(_.filename == 'A Foo Bar 1999 1080p BluRay.mkv', processed_items)) self.assertTrue(one(_.filename == 'B Quux 720p.mkv', processed_items))
def test_perfect_match(self): match_candidates = [ MovieMatchCandidate(match=92), MovieMatchCandidate(match=90), MovieMatchCandidate(match=81) ] decider = MatchDecider() match = decider.try_match(match_candidates) self.assertIsNotNone(match) self.assertEqual(MatchType.MATCHED, match.match_type()) self.assertEqual(match_candidates[0].to_movie(), match.matched_movie()) self.assertEqual(2, len(match.potential_matches())) self.assertTrue(funcy.one(_.match == 92, match.potential_matches())) self.assertTrue(funcy.one(_.match == 90, match.potential_matches()))
def test_low_threshold(self): match_candidates = [ MovieMatchCandidate(match=45), MovieMatchCandidate(match=28), MovieMatchCandidate(match=10) ] decider = MatchDecider() match = decider.try_match(match_candidates) self.assertIsNotNone(match) self.assertEqual(MatchType.UNMATCHED, match.match_type()) self.assertEqual(NonMatchReason.LOW_TRESHOLD, match.reason()) self.assertEqual(3, len(match.potential_matches())) self.assertTrue(funcy.one(_.match == 45, match.potential_matches())) self.assertTrue(funcy.one(_.match == 28, match.potential_matches())) self.assertTrue(funcy.one(_.match == 10, match.potential_matches()))
def test_multiple_candidates_with_same_ratio(self): match_candidates = [ MovieMatchCandidate(match=92), MovieMatchCandidate(match=92), MovieMatchCandidate(match=81), MovieMatchCandidate(match=80) ] decider = MatchDecider() match = decider.try_match(match_candidates) self.assertIsNotNone(match) self.assertEqual(MatchType.UNMATCHED, match.match_type()) self.assertEqual(NonMatchReason.MULTIPLE_CANDIDATES, match.reason()) self.assertEqual(4, len(match.potential_matches())) self.assertTrue(funcy.any(_.match == 92, match.potential_matches())) self.assertTrue(funcy.one(_.match == 81, match.potential_matches())) self.assertTrue(funcy.one(_.match == 80, match.potential_matches()))
def test_threadpool_executor(self): with open(os.path.join(self.temp_dir, self._files[1]), 'wb') as qoox: qoox.write(bytearray(self._fake_mkv_magic_bytes)) scanner = FileSystemMediaScanner(media_scan_path=self.temp_dir, job_context=self.job_context, skip_filetype_checks=False) scanner_observer = rx.Observable.create(scanner) processed_items = [] subject = rx.subjects.Subject() subject.subscribe(on_next=lambda item: '') subject.subscribe(on_next=lambda item: '') subject.subscribe(on_next=lambda item: processed_items.append(item)) scanner_observer.subscribe_on(ThreadPoolScheduler(3)).observe_on( ThreadPoolScheduler(3)).subscribe(subject) time.sleep(1) self.assertEqual(1, len(processed_items)) self.assertTrue(one(_.filename == 'B Quux 720p.mkv', processed_items))
def can_match(): if number_of_acceptable_candidates > 0: return one(_.match == acceptable_candidates[0].match, acceptable_candidates) return False