def test_string(self): self.assertEqual(extract_year_from_date(""), None) self.assertEqual(extract_year_from_date(2020), None) self.assertEqual(extract_year_from_date("2020"), 2020) self.assertEqual(extract_year_from_date('2020-02-28'), 2020) self.assertEqual(extract_year_from_date('2015.02'), 2015) self.assertEqual(extract_year_from_date('2015; 2015'), None) # test for the format as supported by ID3 (https://id3.org/id3v2.4.0-structure): yyyy-MM-ddTHH:mm:ss self.assertEqual(extract_year_from_date('2020-07-21T13:00:00'), 2020)
def compare_to_release_parts(self, release, weights): parts = [] if "album" in self: b = release['title'] parts.append((similarity2(self["album"], b), weights["album"])) if "albumartist" in self and "albumartist" in weights: a = self["albumartist"] b = artist_credit_from_node(release['artist-credit'])[0] parts.append((similarity2(a, b), weights["albumartist"])) try: a = int(self["totaltracks"]) b = release['track-count'] score = 0.0 if a > b else 0.3 if a < b else 1.0 parts.append((score, weights["totaltracks"])) except (ValueError, KeyError): pass # Date Logic date_match_factor = 0.0 if "date" in release and release['date'] != '': release_date = release['date'] if "date" in self: metadata_date = self['date'] if release_date == metadata_date: # release has a date and it matches what our metadata had exactly. date_match_factor = self.__date_match_factors['exact'] else: release_year = extract_year_from_date(release_date) if release_year is not None: metadata_year = extract_year_from_date(metadata_date) if metadata_year is not None: if release_year == metadata_year: # release has a date and it matches what our metadata had for year exactly. date_match_factor = self.__date_match_factors['year'] elif abs(release_year - metadata_year) <= 2: # release has a date and it matches what our metadata had closely (year +/- 2). date_match_factor = self.__date_match_factors['close_year'] else: # release has a date but it does not match ours (all else equal, # its better to have an unknown date than a wrong date, since # the unknown could actually be correct) date_match_factor = self.__date_match_factors['differed'] else: # release has a date but we don't have one (all else equal, we prefer # tracks that have non-blank date values) date_match_factor = self.__date_match_factors['exists_vs_null'] else: # release has a no date (all else equal, we don't prefer this # release since its date is missing) date_match_factor = self.__date_match_factors['no_release_date'] parts.append((date_match_factor, weights['date'])) config = get_config() weights_from_preferred_countries(parts, release, config.setting["preferred_release_countries"], weights["releasecountry"]) weights_from_preferred_formats(parts, release, config.setting["preferred_release_formats"], weights["format"]) if "releasetype" in weights: weights_from_release_type_scores(parts, release, config.setting["release_type_scores"], weights["releasetype"]) rg = QObject.tagger.get_release_group_by_id(release['release-group']['id']) if release['id'] in rg.loaded_albums: parts.append((1.0, 6)) return parts
def test_mapping(self): self.assertEqual(extract_year_from_date({}), None) self.assertEqual(extract_year_from_date({'year': 'abc'}), None) self.assertEqual(extract_year_from_date({'year': '2020'}), 2020) self.assertEqual(extract_year_from_date({'year': 2020}), 2020) self.assertEqual(extract_year_from_date({'year': '2020-02-28'}), None)