Beispiel #1
0
    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))
Beispiel #2
0
    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()))
Beispiel #3
0
    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()))
Beispiel #4
0
    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()))
Beispiel #5
0
    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))
Beispiel #6
0
 def can_match():
     if number_of_acceptable_candidates > 0:
         return one(_.match == acceptable_candidates[0].match,
                    acceptable_candidates)
     return False