From c77f43be5e43a176890fbf1bb5ef3964c3c225b9 Mon Sep 17 00:00:00 2001 From: Benjamin Piouffle Date: Tue, 25 Oct 2016 19:21:16 +1100 Subject: [PATCH] Accept partial release date for search --- headphones/searcher.py | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/headphones/searcher.py b/headphones/searcher.py index cda9a822..1efb657e 100644 --- a/headphones/searcher.py +++ b/headphones/searcher.py @@ -201,14 +201,13 @@ def searchforalbum(albumid=None, new=False, losslessOnly=False, continue if headphones.CONFIG.WAIT_UNTIL_RELEASE_DATE and album['ReleaseDate']: - try: - release_date = datetime.datetime.strptime(album['ReleaseDate'], "%Y-%m-%d") - except: - logger.warn( - "No valid date for: %s. Skipping automatic search" % album['AlbumTitle']) + release_date = strptime_musicbrainz(album['ReleaseDate']) + if not release_date: + logger.warn("No valid date for: %s. Skipping automatic search" % + album['AlbumTitle']) continue - if release_date > datetime.datetime.today(): + elif release_date > datetime.datetime.today(): logger.info("Skipping: %s. Waiting for release date of: %s" % ( album['AlbumTitle'], album['ReleaseDate'])) continue @@ -237,6 +236,26 @@ def searchforalbum(albumid=None, new=False, losslessOnly=False, logger.info('Search for wanted albums complete') +def strptime_musicbrainz(date_str): + """ + Release date as returned by Musicbrainz may contain the full date (Year-Month-Day) + but it may as well be just Year-Month or even just the year. + + Args: + date_str: the date as a string (ex: "2003-05-01", "2003-03", "2003") + + Returns: + The more accurate datetime object we can create or None if parse failed + """ + acceptable_formats = ('%Y-%m-%d', '%Y-%m', '%Y') + for date_format in acceptable_formats: + try: + return datetime.datetime.strptime(date_str, date_format) + except: + pass + return None + + def do_sorted_search(album, new, losslessOnly, choose_specific_download=False): NZB_PROVIDERS = (headphones.CONFIG.HEADPHONES_INDEXER or headphones.CONFIG.NEWZNAB or