diff --git a/nzbtomedia/autoProcess/autoProcessMovie.py b/nzbtomedia/autoProcess/autoProcessMovie.py index ada22923..f17aace4 100644 --- a/nzbtomedia/autoProcess/autoProcessMovie.py +++ b/nzbtomedia/autoProcess/autoProcessMovie.py @@ -1,118 +1,102 @@ import os import re import time -import datetime import urllib -import shutil -import sys -import platform import nzbtomedia from lib import requests from nzbtomedia.Transcoder import Transcoder from nzbtomedia.nzbToMediaSceneExceptions import process_all_exceptions from nzbtomedia.nzbToMediaUtil import convert_to_ascii, delete, create_torrent_class from nzbtomedia import logger -from nzbtomedia.transmissionrpc.client import Client as TransmissionClient class autoProcessMovie: - def find_release_info(self, baseURL, download_id, dirName, nzbName, clientAgent): - imdbid = None - release_id = None - media_id = None - release_status = None - downloader = None + def find_imdbid(self, dirName, nzbName): + # find imdbid in dirName + m = re.search('(tt\d{7})', dirName) + if m: + imdbid = m.group(1) + logger.postprocess("Found movie id %s in directory", imdbid) + return imdbid - while(True): - # find imdbid in nzbName - m = re.search('(tt\d{7})', nzbName) - if m: - imdbid = m.group(1) - logger.postprocess("Found imdbid %s in name", imdbid) - break + # find imdbid in nzbName + m = re.search('(tt\d{7})', nzbName) + if m: + imdbid = m.group(1) + logger.postprocess("Found imdbid %s in name", imdbid) + return imdbid - # find imdbid in dirName - m = re.search('(tt\d{7})', dirName) - if m: - imdbid = m.group(1) - logger.postprocess("Found movie id %s in directory", imdbid) - break - break + m = re.search("^(.+)\W(\d{4})", os.path.basename(dirName)) + if m: + title = m.group(1) + year = m.group(2) - url = baseURL + "/media.list/?release_status=snatched" + url = "http://www.omdbapi.com" + logger.debug("Opening URL: %s", url) + + try: + r = requests.get(url, params={'y':year, 't':title}) + except requests.ConnectionError: + logger.error("Unable to open URL") + return + + results = r.json() + if hasattr(results, 'imdbID'): + return results['imdbID'] + + def get_releases(self, baseURL, download_id, dirName, nzbName): + releases = {} + params = {} + + imdbid = self.find_imdbid(dirName, nzbName) + + # determin cmd and params to send to CouchPotato to get our results + section = 'movies' + cmd = "/media.list" + params['status'] = 'active' + if imdbid: + section = 'media' + cmd = "/media.get" + params['id'] = imdbid + if download_id: + params['release_status'] = 'snatched,downloaded' + + url = baseURL + cmd logger.debug("Opening URL: %s", url) try: - r = requests.get(url) + r = requests.get(url, params=params) except requests.ConnectionError: logger.error("Unable to open URL") return results = r.json() - def search_results(results, clientAgent): - last_edit = {} - try: - for movie in results['movies']: - if imdbid: - if imdbid != movie['identifiers']['imdb']: - continue - - for i, release in enumerate(movie['releases']): - if release['status'] != 'snatched': - continue - - if download_id: - if release['download_info']['id'] == download_id: - return release - - # store releases by datetime just incase we need to use this info - last_edit.update({datetime.datetime.fromtimestamp(release['last_edit']):release}) - except:pass - - if last_edit: - last_edit = sorted(last_edit.items()) - if clientAgent != 'manual': - for item in last_edit: - release = item[1] - if release['download_info']['downloader'] == clientAgent: - return release - - release = last_edit[0][1] - return release - - matched_release = search_results(results, clientAgent) - - if matched_release: - try: - release_id = matched_release['_id'] - media_id = matched_release['media_id'] - release_status = matched_release['status'] - download_id = matched_release['download_info']['id'] - downloader = matched_release['download_info']['downloader'] - except:pass - - return media_id, download_id, release_id, imdbid, release_status, downloader - - def get_status(self, baseURL, media_id, release_id): - logger.debug("Attempting to get current status for movie:%s", media_id) - - url = baseURL + "/media.get" - logger.debug("Opening URL: %s", url) - try: - r = requests.get(url, params={'id':media_id}) - except requests.ConnectionError: - logger.error("Unable to open URL") - return + movies = results[section] + if not isinstance(movies, list): + movies = [movies] - try: - result = r.json() - for release in result["media"]['releases']: - if release['_id'] == release_id: - return release["status"] + for movie in movies: + for release in movie['releases']: + if download_id and download_id != release['download_info']['id']: + continue + + releases[release['_id']] = release except:pass + return releases + + def releases_diff(self, dict_a, dict_b): + return dict([ + (key, dict_b.get(key, dict_a.get(key))) + for key in set(dict_a.keys() + dict_b.keys()) + if ( + (key in dict_a and (not key in dict_b or dict_a[key] != dict_b[key])) or + (key in dict_b and (not key in dict_a or dict_a[key] != dict_b[key])) + ) + ]) + def process(self, dirName, nzbName=None, status=0, clientAgent = "manual", download_id = "", inputCategory=None): if dirName is None: logger.error("No directory was given!") @@ -164,16 +148,10 @@ class autoProcessMovie: baseURL = protocol + host + ":" + port + web_root + "/api/" + apikey - media_id, download_id, release_id, imdbid, release_status, downloader = self.find_release_info(baseURL, download_id, dirName, nzbName, clientAgent) + releases = self.get_releases(baseURL, download_id, dirName, nzbName) - if release_status: - if release_status != "snatched": - logger.warning("%s is marked with a status of %s on CouchPotato, skipping ...", nzbName, release_status) - return 0 - elif imdbid and not (download_id or media_id or release_id): - logger.error("Could only find a imdbID for %s, sending folder name to be post-processed by CouchPotato ...", nzbName) - else: - logger.error("Could not find a release status for %s on CouchPotato, skipping ...", nzbName) + if not releases: + logger.error("Could not find any releases marked as WANTED on CouchPotato to compare changes against %s, skipping ...", nzbName) return 1 process_all_exceptions(nzbName.lower(), dirName) @@ -194,7 +172,7 @@ class autoProcessMovie: params = {} if download_id: - params['downloader'] = downloader + params['downloader'] = clientAgent params['download_id'] = download_id params['media_folder'] = urllib.quote(dirName) @@ -206,6 +184,8 @@ class autoProcessMovie: logger.debug("Opening URL: %s", url) + logger.postprocess("Attempting to perform a %s scan on CouchPotato for %s", method, nzbName) + try: r = requests.get(url, params=params) except requests.ConnectionError: @@ -213,13 +193,10 @@ class autoProcessMovie: return 1 # failure result = r.json() - - logger.postprocess("CouchPotatoServer returned %s", result) - if result['success']: - logger.postprocess("%s scan started on CouchPotatoServer for %s", method, nzbName) + logger.postprocess("SUCCESS: %s scan started on CouchPotatoServer for %s", method, nzbName) else: - logger.error("%s scan has NOT started on CouchPotatoServer for %s. Exiting", method, nzbName) + logger.error("FAILED: %s scan has NOT started on CouchPotato for %s. Exiting ...", method, nzbName) return 1 # failure else: @@ -230,18 +207,20 @@ class autoProcessMovie: delete(dirName) if not download_id: - logger.warning("Cound not find a movie in the database for release %s", nzbName) - logger.warning("Please manually ignore this release and refresh the wanted movie") - logger.error("Exiting autoProcessMovie script") + logger.warning("Could not find a movie in the database for release %s", nzbName) + logger.warning("Please manually ignore this release and refresh the wanted movie from CouchPotato, Exiting ...") return 1 # failure + release_id = releases.keys()[0] + media_id = releases[release_id]['media_id'] + logger.postprocess("Ignoring current failed release %s ...", nzbName) url = baseURL + "/release.ignore" logger.debug("Opening URL: %s", url) try: - r = requests.get(url, params={'id':release_id}) + r = requests.get(url, params={'id': release_id}) except requests.ConnectionError: logger.error("Unable to open URL") return 1 # failure @@ -258,48 +237,27 @@ class autoProcessMovie: logger.debug("Opening URL: %s", url) try: - r = requests.get(url, params={'media_id':media_id}) + r = requests.get(url, params={'media_id': media_id}) except requests.ConnectionError: logger.error("Unable to open URL") return 1 # failure result = r.json() if result['success']: - logger.postprocess("CouchPotato successfully snatched the next highest release ...", nzbName) + logger.postprocess("CouchPotato successfully snatched the next highest release above %s ...", nzbName) return 0 else: logger.postprocess("CouchPotato was unable to find a higher release then %s to snatch ...", nzbName) return 1 - if not (download_id or media_id or release_id) and imdbid: - url = baseURL + "/media.get" - logger.debug("Opening URL: %s", url) - - # we will now check to see if CPS has finished renaming before returning to TorrentToMedia and unpausing. - timeout = time.time() + 60 * int(wait_for) - while (time.time() < timeout): # only wait 2 (default) minutes, then return. - try: - r = requests.get(url, params={'id':imdbid}) - except requests.ConnectionError: - logger.error("Unable to open URL") - return 1 # failure - - result = r.json() - if result['media']['status'] == 'ignored': - logger.postprocess("CouchPotato successfully added %s to it's database ...", nzbName) - return 0 - - logger.postprocess("CouchPotato was unable to add %s to its database ...", nzbName) - return 1 - elif not (download_id or media_id or release_id): - return 1 - # we will now check to see if CPS has finished renaming before returning to TorrentToMedia and unpausing. timeout = time.time() + 60 * int(wait_for) while (time.time() < timeout): # only wait 2 (default) minutes, then return. - current_status = self.get_status(baseURL, media_id, release_id) - if current_status is not None and current_status != release_status: # Something has changed. CPS must have processed this movie. - logger.postprocess("SUCCESS: This release is now marked as status [%s] in CouchPotatoServer", current_status.upper()) + releases_current = self.get_releases(baseURL, download_id, dirName, nzbName) + releasesDiff = self.releases_diff(releases, releases_current) + if releasesDiff: # Something has changed. CPS must have processed this movie. + release_status = releasesDiff[releasesDiff.keys()[0]]['status'] + logger.postprocess("SUCCESS: Release %s marked as [%s] on CouchPotato", nzbName, release_status) return 0 # success # pause and let CouchPotatoServer catch its breath diff --git a/nzbtomedia/nzbToMediaUtil.py b/nzbtomedia/nzbToMediaUtil.py index f6cbe628..37fd4412 100644 --- a/nzbtomedia/nzbToMediaUtil.py +++ b/nzbtomedia/nzbToMediaUtil.py @@ -408,19 +408,15 @@ def get_dirnames(section, subsections=None): if watch_dir: dirNames.extend([os.path.join(watch_dir, o) for o in os.listdir(watch_dir) if os.path.isdir(os.path.join(watch_dir, o))]) - if not dirNames: - logger.warning("%s:%s has no directories identified to scan inside %s", section, subsection, watch_dir) if outputDirectory: dirNames.extend([os.path.join(outputDirectory, o) for o in os.listdir(outputDirectory) if os.path.isdir(os.path.join(outputDirectory, o))]) - if not dirNames: - logger.warning("%s:%s has no directories identified to scan inside %s", section, subsection, outputDirectory) - if watch_dir is None and outputDirectory is None: - logger.warning("%s:%s has no watch_dir or outputDirectory setup to be Scanned, go fix you autoProcessMedia.cfg file.", section, subsection) + if not dirNames: + logger.warning("%s:%s has no directories identified for post-processing", section, subsection) - return dirNames + return list(set(dirNames)) def delete(dirName): logger.info("Deleting failed files and folder %s", dirName) diff --git a/tests/general.py b/tests/general.py index 68c7e034..3da64ac3 100644 --- a/tests/general.py +++ b/tests/general.py @@ -3,9 +3,20 @@ import datetime from nzbtomedia.versionCheck import CheckVersion from nzbtomedia import logger -test = datetime.datetime.fromtimestamp(1397502323) -test = {"movies": [{"status": "active", "info": {"rating": {"imdb": [8.5, 359815]}, "titles": ["Toy Story 3", "Toy Story 3 - La grande fuga", "Toy Story 3: P\u0159\u00edb\u011bh hra\u010dek", "\u53cd\u6597\u5947\u51753", "Toy Story III", "\u73a9\u5177\u7e3d\u52d5\u54e13", "Toy Story 3 - 3D", "Toy Story - J\u00e1t\u00e9kh\u00e1bor\u00fa 3.", "Histoire de jouets 3", "2010 Toy Story 3"], "imdb": "tt0435761", "year": 2010, "images": {"poster_original": ["https://image.tmdb.org/t/p/original/tOwAAVeL1p3ls9dhOBo45ElodU3.jpg"], "poster": ["https://image.tmdb.org/t/p/w154/tOwAAVeL1p3ls9dhOBo45ElodU3.jpg", "http://ia.media-imdb.com/images/M/MV5BMTgxOTY4Mjc0MF5BMl5BanBnXkFtZTcwNTA4MDQyMw@@._V1_.jpg", "http://ia.media-imdb.com/images/M/MV5BMTgxOTY4Mjc0MF5BMl5BanBnXkFtZTcwNTA4MDQyMw@@._V1_SX300.jpg"], "actors": {"Tim Allen": "https://image.tmdb.org/t/p/w185/rLvgGCNtNTW6AsH9Y9t2W7QTjNO.jpg", "Joan Cusack": "https://image.tmdb.org/t/p/w185/7tAUWX2wji7ySSdgf4lxuml4J9I.jpg", "John Morris": "https://image.tmdb.org/t/p/w185/vYGyvK4LzeaUCoNSHtsuqJUY15M.jpg", "Michael Keaton": "https://image.tmdb.org/t/p/w185/jSG7yQxSsGzz1TbDjq0811W5LK4.jpg", "Bonnie Hunt": "https://image.tmdb.org/t/p/w185/lwEvPd4SXprCLBnPzXUaH5pm33w.jpg", "Estelle Harris": "https://image.tmdb.org/t/p/w185/equDBtZgBkO7e8QKpNokDz9EbY9.jpg", "Don Rickles": "https://image.tmdb.org/t/p/w185/h5BcaDMPRVLHLDzbQavec4xfSdt.jpg", "Ned Beatty": "https://image.tmdb.org/t/p/w185/aO5MtnqcZHpsVYz1nINdjqgEJUl.jpg", "Tom Hanks": "https://image.tmdb.org/t/p/w185/xxPMucou2wRDxLrud8i2D4dsywh.jpg", "John Ratzenberger": "https://image.tmdb.org/t/p/w185/q2dCFnEDWnQMwrkE6773MSL5FRU.jpg", "Emily Hahn": "https://image.tmdb.org/t/p/w185/cjCwq4bzHuYMba1kDfEkKCeEOeb.jpg", "Teddy Newton": "https://image.tmdb.org/t/p/w185/mftwTs5lza95kOyAZsrfNaqSFtv.jpg", "Laurie Metcalf": "https://image.tmdb.org/t/p/w185/nMuaJWmZyaCMmdsGlYIOV5JGabL.jpg", "Jodi Benson": "https://image.tmdb.org/t/p/w185/9tOpKgu6cBBL29LxEC21fOVVVPW.jpg", "Blake Clark": "https://image.tmdb.org/t/p/w185/mSWo6JZevNICzOsa9Xub62xW0mu.jpg", "Wallace Shawn": "https://image.tmdb.org/t/p/w185/oGE6JqPP2xH4tNORKNqxbNPYi7u.jpg", "Whoopi Goldberg": "https://image.tmdb.org/t/p/w185/n3lF8w4X4rDa4J2LMDIxMEcuUeH.jpg"}, "backdrop_original": ["https://image.tmdb.org/t/p/original/rpvDBeVazJyBV5SxtnQWIgL5SIb.jpg"], "backdrop": ["https://image.tmdb.org/t/p/w1280/rpvDBeVazJyBV5SxtnQWIgL5SIb.jpg"]}, "plot": "Woody, Buzz, and the rest of Andy's toys haven't been played with in years. With Andy about to go to college, the gang find themselves accidentally left at a nefarious day care center. The toys must band together to escape and return home to Andy.", "actor_roles": {"Tim Allen": "Buzz Lightyear (voice)", "Joan Cusack": "Jessie the Yodeling Cowgirl (voice)", "John Morris": "Andy (voice)", "Michael Keaton": "Ken (voice)", "Bonnie Hunt": "Purple-haired doll (voice)", "Don Rickles": "Mr. Potato Head (voice)", "Ned Beatty": "Lotso (voice)", "Jodi Benson": "Barbie (voice)", "Tom Hanks": "Woody (voice)", "John Ratzenberger": "Hamm (voice)", "Emily Hahn": "Bonnie (voice)", "Teddy Newton": "Chatter Telephone (voice)", "Laurie Metcalf": "Andy's Mom (voice)", "Estelle Harris": "Mrs. Potato Head (voice)", "Blake Clark": "Slinky Dog (voice)", "Wallace Shawn": "Rex (voice)", "Whoopi Goldberg": "Stretch the Octopus (voice)"}, "tagline": "No toy gets left behind.", "writers": ["John Lasseter (story)", "Andrew Stanton (story)", "Lee Unkrich (story)", "Michael Arndt (screenplay)"], "actors": ["Tom Hanks", "Tim Allen", "Joan Cusack", "Ned Beatty"], "type": "movie", "tmdb_id": 10193, "genres": ["Animation", "Comedy", "Family", "Adventure", "Fantasy"], "collection": "Toy Story (Collection)", "via_imdb": True, "released": "2010-06-17", "via_tmdb": True, "release_date": {"dvd": 1288656000, "expires": 1397553312, "theater": 1276819200, "bluray": True}, "original_title": "Toy Story 3", "directors": ["Lee Unkrich"], "mpaa": "G", "runtime": 103}, "_t": "media", "releases": [{"status": "snatched", "info": {"size": 815.01, "seeders": 0, "protocol": "torrent_magnet", "description": "\nToy Story 3 Hindi \r\n\r\n\t\t\n", "url": "magnet:?xt=urn:btih:840ff3ca2cc7b4388974822c0b7812c3ac4e7d29&dn=Toy+Story+%5B2010%5D+hindi&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80&tr=udp%3A%2F%2Ftracker.publicbt.com%3A80&tr=udp%3A%2F%2Ftracker.istole.it%3A6969&tr=udp%3A%2F%2Ftracker.ccc.de%3A80&tr=udp%3A%2F%2Fopen.demonii.com%3A1337", "age": 0, "id": "6877572", "leechers": 1, "score": 90, "provider": "ThePirateBay", "seed_time": 0, "provider_extra": "", "detail_url": "https://thepiratebay.se/torrent/6877572/Toy_Story_[2010]_hindi", "type": "movie", "seed_ratio": 0.0, "name": "Toy Story [2010] hindi"}, "download_info": {"status_support": True, "id": "840ff3ca2cc7b4388974822c0b7812c3ac4e7d29", "downloader": "Transmission"}, "_id": "e31e75caf23540feb4a8ac4b29790d08", "media_id": "6e77297bc0ef48a88593ede305a78480", "_rev": "000580de", "_t": "release", "is_3d": False, "last_edit": 1397418678, "identifier": "ee4cc5b1a742bfa423c0543129d0b860", "quality": "r5"}, {"status": "snatched", "info": {"protocol": "nzb", "description": "", "name": "[rytos6]-[#altbin@EFNet]-[Full]-[]-[01/59] - \"RYTOS6.nfo\" yEnc (1/1)", "url": "https://www.binsearch.info/fcgi/nzb.fcgi?q=70791602", "age": 838, "seed_ratio": "", "score": 42, "provider": "BinSearch", "seed_time": "", "provider_extra": "", "detail_url": "https://www.binsearch.info/?b=RYTOS6&g=alt.binaries.movies.divx&p=power-post%40power-post.org+%28power-post%29&max=250", "type": "movie", "id": "70791602", "size": 795.68}, "download_info": {"status_support": True, "id": "SABnzbd_nzo_Mz2Diu", "downloader": "Sabnzbd"}, "_id": "0b167ec72f3448fab41c62e68aade169", "media_id": "6e77297bc0ef48a88593ede305a78480", "_rev": "0004d189", "_t": "release", "is_3d": False, "last_edit": 1397502323, "identifier": "7c80be041a59f9545c98e52789bb507a", "quality": "r5"}, {"status": "available", "info": {"protocol": "nzb", "description": "", "name": "[rytos5]-[#altbin@EFNet]-[Full]-[]-[01/59] - \"RYTOS5.nfo\" yEnc (1/1)", "url": "https://www.binsearch.info/fcgi/nzb.fcgi?q=70791601", "age": 838, "seed_ratio": "", "score": 42, "provider": "BinSearch", "seed_time": "", "provider_extra": "", "detail_url": "https://www.binsearch.info/?b=RYTOS5&g=alt.binaries.movies.divx&p=power-post%40power-post.org+%28power-post%29&max=250", "type": "movie", "id": "70791601", "size": 793.53}, "_id": "fd87d5a0ba8f492fbfd776aa41238451", "media_id": "6e77297bc0ef48a88593ede305a78480", "_rev": "0002369e", "_t": "release", "is_3d": False, "last_edit": 1397418678, "identifier": "337b27fcbc675fed33b1b6d6d1bd2df8", "quality": "r5"}], "title": "Toy Story 3", "_rev": "0003bba8", "profile_id": "3431e08c261246b39da241da412e8554", "_id": "6e77297bc0ef48a88593ede305a78480", "category_id": None, "type": "movie", "files": {"image_poster": ["/etc/opt/couchpotato/cache/51e4dd01f3b61406508bd259ed61704e.jpg"]}, "identifiers": {"imdb": "tt0435761"}}], "total": 1, "empty": False, "success": True} -print test +def dict_diff(dict_a, dict_b): + return dict([ + (key, dict_b.get(key, dict_a.get(key))) + for key in set(dict_a.keys()+dict_b.keys()) + if ( + (key in dict_a and (not key in dict_b or dict_a[key] != dict_b[key])) or + (key in dict_b and (not key in dict_a or dict_a[key] != dict_b[key])) + ) + ]) + +releases = {u'aa03e62650c24a09a5f034286674b951': {u'status': u'available', u'info': {u'seeders': 38, u'protocol': u'torrent_magnet', u'description': u'', u'name': u'The Art of the Steal 2013 LIMITED BRRip XviD AC3-RARBG', u'url': u'magnet:?xt=urn:btih:B0CCABF053CA6936F61A491812F8BBFCF96B6F9E&dn=the+art+of+the+steal+2013+limited+brrip+xvid+ac3+rarbg&tr=udp%3A%2F%2F12.rarbg.me%3A80%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337', u'age': 1, u'seed_ratio': 0.0, u'leechers': 51, u'score': 457, u'provider': u'KickAssTorrents', u'seed_time': 0, u'provider_extra': u'', u'detail_url': u'https://kickass.to/the-art-of-the-steal-2013-limited-brrip-xvid-ac3-rarbg-t9000422.html', u'type': u'movie', u'id': u'9000422', u'size': 1249.28}, u'identifier': u'629a130713bc1350cc858085ef40b187', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'0003322b', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'aa03e62650c24a09a5f034286674b951', u'quality': u'brrip'}, u'f9239f22604848d4b9215b94f6a005fb': {u'status': u'available', u'info': {u'seeders': 121, u'protocol': u'torrent_magnet', u'description': u'', u'name': u'The Art of the Steal 2013 LIMITED BRRip XviD MP3-RARBG', u'url': u'magnet:?xt=urn:btih:41CE100FD220B56ADB1F0F127553C61DFD9AB5CB&dn=the+art+of+the+steal+2013+limited+brrip+xvid+mp3+rarbg&tr=udp%3A%2F%2F12.rarbg.me%3A80%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337', u'age': 1, u'seed_ratio': 0.0, u'leechers': 89, u'score': 1134, u'provider': u'KickAssTorrents', u'seed_time': 0, u'provider_extra': u'', u'detail_url': u'https://kickass.to/the-art-of-the-steal-2013-limited-brrip-xvid-mp3-rarbg-t9000421.html', u'type': u'movie', u'id': u'9000421', u'size': 840.78}, u'download_info': {u'status_support': True, u'id': u'41ce100fd220b56adb1f0f127553c61dfd9ab5cb', u'downloader': u'Transmission'}, u'identifier': u'0ad26fca02ca07b8191876616fa2f42a', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'0007329d', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721748, u'_id': u'f9239f22604848d4b9215b94f6a005fb', u'quality': u'brrip'}, u'00ee6c785ef248328f260e7eec8115c8': {u'status': u'available', u'info': {u'size': 959.74, u'protocol': u'nzb', u'description': u'', u'url': u'https://www.binsearch.info/fcgi/nzb.fcgi?q=123339072', u'age': 23, u'id': u'123339072', u'score': 5, u'provider': u'BinSearch', u'seed_time': u'', u'provider_extra': u'', u'detail_url': u'https://www.binsearch.info/?b=The.Art.of.the.Steal.2013.BDRip.XviD-NfS&g=alt.binaries.movies.divx&p=XviD%40world.net+%28XvidWorld%29&max=250', u'type': u'movie', u'seed_ratio': u'', u'name': u'The.Art.of.the.Steal.2013.BDRip.XviD-NfS.nfo [01/70] - "The.Art.of.the.Steal.2013.BDRip.XviD-NfS.nfo" yEnc (1/1)'}, u'identifier': u'e224251e41fe494e8f7b57620f2f9271', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'000298ae', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'00ee6c785ef248328f260e7eec8115c8', u'quality': u'brrip'}, u'a34ab12605a949738baf1c0c3a15695b': {u'status': u'available', u'info': {u'size': 793.12, u'protocol': u'nzb', u'description': u'', u'url': u'https://www.binsearch.info/fcgi/nzb.fcgi?q=117974223', u'age': 68, u'id': u'117974223', u'score': -2, u'provider': u'BinSearch', u'seed_time': u'', u'provider_extra': u'', u'detail_url': u'https://www.binsearch.info/?b=The.Art.of.the.Steal.2013.HDRip.XviD-AQOS&g=alt.binaries.boneless&p=none%40none.com+%28Bonehead%29&max=250', u'type': u'movie', u'seed_ratio': u'', u'name': u'The.Art.of.the.Steal.2013.HDRip.XviD-AQOS [01/26] - "The.Art.of.the.Steal.2013.HDRip.XviD-AQOS.nfo" yEnc (1/1)'}, u'identifier': u'4cd0abd13711a9fe63133756c0285410', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'0002b7e1', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'a34ab12605a949738baf1c0c3a15695b', u'quality': u'brrip'}, u'72f44e880c3c4978aae939ad71402ce7': {u'status': u'available', u'info': {u'seeders': 34, u'protocol': u'torrent_magnet', u'description': u'', u'name': u'The Art of the Steal 2013 LIMITED 720p BRRip x264 AC3-UNDERCOVER', u'url': u'magnet:?xt=urn:btih:0719836DAF8E285C566797481AE8FE880719487B&dn=the+art+of+the+steal+2013+limited+720p+brrip+x264+ac3+undercover&tr=udp%3A%2F%2Fopen.demonii.com%3A1337%2Fannounce', u'age': 1, u'seed_ratio': 0.0, u'leechers': 81, u'score': 541, u'provider': u'KickAssTorrents', u'seed_time': 0, u'provider_extra': u'', u'detail_url': u'https://kickass.to/the-art-of-the-steal-2013-limited-720p-brrip-x264-ac3-undercover-t9000412.html', u'type': u'movie', u'id': u'9000412', u'size': 2232.32}, u'identifier': u'a44d376cc77288e8ccc375585af5af9b', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'000335d3', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'72f44e880c3c4978aae939ad71402ce7', u'quality': u'brrip'}, u'59010dc34122424d8a0ef5bee4fc2eb8': {u'status': u'available', u'info': {u'seeders': 114, u'protocol': u'torrent_magnet', u'description': u'', u'name': u'The Art of the Steal (2013) 720p BRrip.x264 SUJAIDR', u'url': u'magnet:?xt=urn:btih:5CC3326C1115A8F4F94311F1924F28445F8D1952&dn=the+art+of+the+steal+2013+720p+brrip+x264+sujaidr&tr=http%3A%2F%2Ftracker.pimp4003.net%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337', u'age': 1, u'seed_ratio': 0.0, u'leechers': 73, u'score': 1056, u'provider': u'KickAssTorrents', u'seed_time': 0, u'provider_extra': u'', u'detail_url': u'https://kickass.to/the-art-of-the-steal-2013-720p-brrip-x264-sujaidr-t9001162.html', u'type': u'movie', u'id': u'9001162', u'size': 785.3}, u'identifier': u'75e8270389300db233a49b1e802e5a3c', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'00033fc2', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'59010dc34122424d8a0ef5bee4fc2eb8', u'quality': u'brrip'}, u'bcdf7926211b4895a8730ac832aa1011': {u'status': u'available', u'info': {u'size': 778.57, u'protocol': u'nzb', u'description': u'', u'url': u'https://www.binsearch.info/fcgi/nzb.fcgi?q=117974508', u'age': 68, u'id': u'117974508', u'score': 17, u'provider': u'BinSearch', u'seed_time': u'', u'provider_extra': u'', u'detail_url': u'https://www.binsearch.info/?b=Art+of+the+Steal&g=alt.binaries.movies.xvid&p=here%40the.net+%28Par+Yer+Rars%29&max=250', u'type': u'movie', u'seed_ratio': u'', u'name': u'The Art of the Steal 2013 HDRip XviD-AQOS "Art of the Steal.nfo" (1/1)'}, u'identifier': u'3748b17c0040f313b42704b67a401427', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'00023179', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'bcdf7926211b4895a8730ac832aa1011', u'quality': u'brrip'}, u'9213cef04b384a2bbe8731ff82fe16ff': {u'status': u'available', u'info': {u'seeders': 86, u'protocol': u'torrent_magnet', u'description': u'', u'name': u'The Art of the Steal 2013 LIMITED 1080p BRRip h264 AAC-RARBG', u'url': u'magnet:?xt=urn:btih:154206E6390A03BBF01E61F013E1A52494A52DFA&dn=the+art+of+the+steal+2013+limited+1080p+brrip+h264+aac+rarbg&tr=udp%3A%2F%2F12.rarbg.me%3A80%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337', u'age': 1, u'seed_ratio': 0.0, u'leechers': 143, u'score': 1092, u'provider': u'KickAssTorrents', u'seed_time': 0, u'provider_extra': u'', u'detail_url': u'https://kickass.to/the-art-of-the-steal-2013-limited-1080p-brrip-h264-aac-rarbg-t9001241.html', u'type': u'movie', u'id': u'9001241', u'size': 1781.76}, u'identifier': u'9ab5cc07a4718ff5a4eff2a5c0a5b77c', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'0003ca03', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'9213cef04b384a2bbe8731ff82fe16ff', u'quality': u'brrip'}, u'9cc23887faf444f7b93a4bafb2647ac3': {u'status': u'available', u'info': {u'seeders': 38, u'protocol': u'torrent_magnet', u'description': u'', u'name': u'The Art of the Steal 2013 LIMITED 720p BRRip h264 AAC-RARBG', u'url': u'magnet:?xt=urn:btih:47B2EE9DC2245CA1AFCACD939CA603B9DBB18239&dn=the+art+of+the+steal+2013+limited+720p+brrip+h264+aac+rarbg&tr=udp%3A%2F%2F12.rarbg.me%3A80%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337', u'age': 1, u'seed_ratio': 0.0, u'leechers': 40, u'score': 429, u'provider': u'KickAssTorrents', u'seed_time': 0, u'provider_extra': u'', u'detail_url': u'https://kickass.to/the-art-of-the-steal-2013-limited-720p-brrip-h264-aac-rarbg-t9001238.html', u'type': u'movie', u'id': u'9001238', u'size': 1116.16}, u'identifier': u'e66074d518f9cbefbd04bc1342cbb32a', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'00030793', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'9cc23887faf444f7b93a4bafb2647ac3', u'quality': u'brrip'}, u'c18677b9357f4e60b328b42a6bba497a': {u'status': u'available', u'files': {u'nfo': [u'/mnt/vault/videos/Movies/Art of the Steal, The (2014)/The Art of the Steal.nfo'], u'movie': [u'/mnt/vault/videos/Movies/Art of the Steal, The (2014)/The Art of the Steal.mp4']}, u'identifier': u'tt2172985.None.720p', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'00045c30', u'_t': u'release', u'last_edit': 1397726258, u'_id': u'c18677b9357f4e60b328b42a6bba497a', u'quality': u'720p'}, u'c6379eb7b7144aa6ab333f06f5759947': {u'status': u'available', u'info': {u'seeders': 61, u'protocol': u'torrent_magnet', u'description': u'', u'name': u'The.Art.of.the.Steal.2013.LIMITED.BRRip.x264.AC3-MiLLENiUM', u'url': u'magnet:?xt=urn:btih:C3F24AD28CDC1F7A25AAD8B7D80BA9B5F1D7DAA8&dn=the+art+of+the+steal+2013+limited+brrip+x264+ac3+millenium&tr=udp%3A%2F%2F12.rarbg.me%3A80%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337', u'age': 17, u'seed_ratio': 0.0, u'leechers': 64, u'score': 654, u'provider': u'KickAssTorrents', u'seed_time': 0, u'provider_extra': u'', u'detail_url': u'https://kickass.to/the-art-of-the-steal-2013-limited-brrip-x264-ac3-millenium-t9002531.html', u'type': u'movie', u'id': u'9002531', u'size': 1013.09}, u'identifier': u'74373b65ea496c18bdecc6e3c7a5c110', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'0003027a', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'c6379eb7b7144aa6ab333f06f5759947', u'quality': u'brrip'}, u'2f88c95fb3b24a1d9aeff4686168ee9f': {u'status': u'available', u'info': {u'seeders': 38, u'protocol': u'torrent_magnet', u'description': u'', u'name': u'The.Art.of.the.Steal.2013.LIMITED.720p.BRRip.XviD.AC3-RARBG', u'url': u'magnet:?xt=urn:btih:A834FBF8A5E7E35DEAA544139148B40F4276332A&dn=the+art+of+the+steal+2013+limited+720p+brrip+xvid+ac3+rarbg&tr=udp%3A%2F%2F12.rarbg.me%3A80%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337', u'age': 1, u'seed_ratio': 0.0, u'leechers': 68, u'score': 523, u'provider': u'KickAssTorrents', u'seed_time': 0, u'provider_extra': u'', u'detail_url': u'https://kickass.to/the-art-of-the-steal-2013-limited-720p-brrip-xvid-ac3-rarbg-t9000418.html', u'type': u'movie', u'id': u'9000418', u'size': 2437.12}, u'identifier': u'9caa0dbdb805a8e58af8a69240c74b9e', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'0003dbfa', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'2f88c95fb3b24a1d9aeff4686168ee9f', u'quality': u'brrip'}} +releases_current = {u'aa03e62650c24a09a5f034286674b951': {u'status': u'available', u'info': {u'seeders': 38, u'protocol': u'torrent_magnet', u'description': u'', u'name': u'The Art of the Steal 2013 LIMITED BRRip XviD AC3-RARBG', u'url': u'magnet:?xt=urn:btih:B0CCABF053CA6936F61A491812F8BBFCF96B6F9E&dn=the+art+of+the+steal+2013+limited+brrip+xvid+ac3+rarbg&tr=udp%3A%2F%2F12.rarbg.me%3A80%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337', u'age': 1, u'seed_ratio': 0.0, u'leechers': 51, u'score': 457, u'provider': u'KickAssTorrents', u'seed_time': 0, u'provider_extra': u'', u'detail_url': u'https://kickass.to/the-art-of-the-steal-2013-limited-brrip-xvid-ac3-rarbg-t9000422.html', u'type': u'movie', u'id': u'9000422', u'size': 1249.28}, u'identifier': u'629a130713bc1350cc858085ef40b187', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'0003322b', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'aa03e62650c24a09a5f034286674b951', u'quality': u'brrip'}, u'f9239f22604848d4b9215b94f6a005fb': {u'status': u'available', u'info': {u'seeders': 121, u'protocol': u'torrent_magnet', u'description': u'', u'name': u'The Art of the Steal 2013 LIMITED BRRip XviD MP3-RARBG', u'url': u'magnet:?xt=urn:btih:41CE100FD220B56ADB1F0F127553C61DFD9AB5CB&dn=the+art+of+the+steal+2013+limited+brrip+xvid+mp3+rarbg&tr=udp%3A%2F%2F12.rarbg.me%3A80%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337', u'age': 1, u'seed_ratio': 0.0, u'leechers': 89, u'score': 1134, u'provider': u'KickAssTorrents', u'seed_time': 0, u'provider_extra': u'', u'detail_url': u'https://kickass.to/the-art-of-the-steal-2013-limited-brrip-xvid-mp3-rarbg-t9000421.html', u'type': u'movie', u'id': u'9000421', u'size': 840.78}, u'download_info': {u'status_support': True, u'id': u'41ce100fd220b56adb1f0f127553c61dfd9ab5cb', u'downloader': u'Transmission'}, u'identifier': u'0ad26fca02ca07b8191876616fa2f42a', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'0007329d', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721748, u'_id': u'f9239f22604848d4b9215b94f6a005fb', u'quality': u'brrip'}, u'00ee6c785ef248328f260e7eec8115c8': {u'status': u'available', u'info': {u'size': 959.74, u'protocol': u'nzb', u'description': u'', u'url': u'https://www.binsearch.info/fcgi/nzb.fcgi?q=123339072', u'age': 23, u'id': u'123339072', u'score': 5, u'provider': u'BinSearch', u'seed_time': u'', u'provider_extra': u'', u'detail_url': u'https://www.binsearch.info/?b=The.Art.of.the.Steal.2013.BDRip.XviD-NfS&g=alt.binaries.movies.divx&p=XviD%40world.net+%28XvidWorld%29&max=250', u'type': u'movie', u'seed_ratio': u'', u'name': u'The.Art.of.the.Steal.2013.BDRip.XviD-NfS.nfo [01/70] - "The.Art.of.the.Steal.2013.BDRip.XviD-NfS.nfo" yEnc (1/1)'}, u'identifier': u'e224251e41fe494e8f7b57620f2f9271', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'000298ae', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'00ee6c785ef248328f260e7eec8115c8', u'quality': u'brrip'}, u'a34ab12605a949738baf1c0c3a15695b': {u'status': u'available', u'info': {u'size': 793.12, u'protocol': u'nzb', u'description': u'', u'url': u'https://www.binsearch.info/fcgi/nzb.fcgi?q=117974223', u'age': 68, u'id': u'117974223', u'score': -2, u'provider': u'BinSearch', u'seed_time': u'', u'provider_extra': u'', u'detail_url': u'https://www.binsearch.info/?b=The.Art.of.the.Steal.2013.HDRip.XviD-AQOS&g=alt.binaries.boneless&p=none%40none.com+%28Bonehead%29&max=250', u'type': u'movie', u'seed_ratio': u'', u'name': u'The.Art.of.the.Steal.2013.HDRip.XviD-AQOS [01/26] - "The.Art.of.the.Steal.2013.HDRip.XviD-AQOS.nfo" yEnc (1/1)'}, u'identifier': u'4cd0abd13711a9fe63133756c0285410', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'0002b7e1', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'a34ab12605a949738baf1c0c3a15695b', u'quality': u'brrip'}, u'72f44e880c3c4978aae939ad71402ce7': {u'status': u'available', u'info': {u'seeders': 34, u'protocol': u'torrent_magnet', u'description': u'', u'name': u'The Art of the Steal 2013 LIMITED 720p BRRip x264 AC3-UNDERCOVER', u'url': u'magnet:?xt=urn:btih:0719836DAF8E285C566797481AE8FE880719487B&dn=the+art+of+the+steal+2013+limited+720p+brrip+x264+ac3+undercover&tr=udp%3A%2F%2Fopen.demonii.com%3A1337%2Fannounce', u'age': 1, u'seed_ratio': 0.0, u'leechers': 81, u'score': 541, u'provider': u'KickAssTorrents', u'seed_time': 0, u'provider_extra': u'', u'detail_url': u'https://kickass.to/the-art-of-the-steal-2013-limited-720p-brrip-x264-ac3-undercover-t9000412.html', u'type': u'movie', u'id': u'9000412', u'size': 2232.32}, u'identifier': u'a44d376cc77288e8ccc375585af5af9b', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'000335d3', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'72f44e880c3c4978aae939ad71402ce7', u'quality': u'brrip'}, u'59010dc34122424d8a0ef5bee4fc2eb8': {u'status': u'available', u'info': {u'seeders': 114, u'protocol': u'torrent_magnet', u'description': u'', u'name': u'The Art of the Steal (2013) 720p BRrip.x264 SUJAIDR', u'url': u'magnet:?xt=urn:btih:5CC3326C1115A8F4F94311F1924F28445F8D1952&dn=the+art+of+the+steal+2013+720p+brrip+x264+sujaidr&tr=http%3A%2F%2Ftracker.pimp4003.net%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337', u'age': 1, u'seed_ratio': 0.0, u'leechers': 73, u'score': 1056, u'provider': u'KickAssTorrents', u'seed_time': 0, u'provider_extra': u'', u'detail_url': u'https://kickass.to/the-art-of-the-steal-2013-720p-brrip-x264-sujaidr-t9001162.html', u'type': u'movie', u'id': u'9001162', u'size': 785.3}, u'identifier': u'75e8270389300db233a49b1e802e5a3c', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'00033fc2', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'59010dc34122424d8a0ef5bee4fc2eb8', u'quality': u'brrip'}, u'bcdf7926211b4895a8730ac832aa1011': {u'status': u'available', u'info': {u'size': 778.57, u'protocol': u'nzb', u'description': u'', u'url': u'https://www.binsearch.info/fcgi/nzb.fcgi?q=117974508', u'age': 68, u'id': u'117974508', u'score': 17, u'provider': u'BinSearch', u'seed_time': u'', u'provider_extra': u'', u'detail_url': u'https://www.binsearch.info/?b=Art+of+the+Steal&g=alt.binaries.movies.xvid&p=here%40the.net+%28Par+Yer+Rars%29&max=250', u'type': u'movie', u'seed_ratio': u'', u'name': u'The Art of the Steal 2013 HDRip XviD-AQOS "Art of the Steal.nfo" (1/1)'}, u'identifier': u'3748b17c0040f313b42704b67a401427', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'00023179', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'bcdf7926211b4895a8730ac832aa1011', u'quality': u'brrip'}, u'9213cef04b384a2bbe8731ff82fe16ff': {u'status': u'available', u'info': {u'seeders': 86, u'protocol': u'torrent_magnet', u'description': u'', u'name': u'The Art of the Steal 2013 LIMITED 1080p BRRip h264 AAC-RARBG', u'url': u'magnet:?xt=urn:btih:154206E6390A03BBF01E61F013E1A52494A52DFA&dn=the+art+of+the+steal+2013+limited+1080p+brrip+h264+aac+rarbg&tr=udp%3A%2F%2F12.rarbg.me%3A80%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337', u'age': 1, u'seed_ratio': 0.0, u'leechers': 143, u'score': 1092, u'provider': u'KickAssTorrents', u'seed_time': 0, u'provider_extra': u'', u'detail_url': u'https://kickass.to/the-art-of-the-steal-2013-limited-1080p-brrip-h264-aac-rarbg-t9001241.html', u'type': u'movie', u'id': u'9001241', u'size': 1781.76}, u'identifier': u'9ab5cc07a4718ff5a4eff2a5c0a5b77c', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'0003ca03', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'9213cef04b384a2bbe8731ff82fe16ff', u'quality': u'brrip'}, u'9cc23887faf444f7b93a4bafb2647ac3': {u'status': u'available', u'info': {u'seeders': 38, u'protocol': u'torrent_magnet', u'description': u'', u'name': u'The Art of the Steal 2013 LIMITED 720p BRRip h264 AAC-RARBG', u'url': u'magnet:?xt=urn:btih:47B2EE9DC2245CA1AFCACD939CA603B9DBB18239&dn=the+art+of+the+steal+2013+limited+720p+brrip+h264+aac+rarbg&tr=udp%3A%2F%2F12.rarbg.me%3A80%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337', u'age': 1, u'seed_ratio': 0.0, u'leechers': 40, u'score': 429, u'provider': u'KickAssTorrents', u'seed_time': 0, u'provider_extra': u'', u'detail_url': u'https://kickass.to/the-art-of-the-steal-2013-limited-720p-brrip-h264-aac-rarbg-t9001238.html', u'type': u'movie', u'id': u'9001238', u'size': 1116.16}, u'identifier': u'e66074d518f9cbefbd04bc1342cbb32a', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'00030793', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'9cc23887faf444f7b93a4bafb2647ac3', u'quality': u'brrip'}, u'c18677b9357f4e60b328b42a6bba497a': {u'status': u'done', u'files': {u'nfo': [u'/mnt/vault/videos/Movies/Art of the Steal, The (2014)/The Art of the Steal.nfo'], u'movie': [u'/mnt/vault/videos/Movies/Art of the Steal, The (2014)/The Art of the Steal.mp4']}, u'identifier': u'tt2172985.None.720p', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'000566ec', u'_t': u'release', u'last_edit': 1397726295, u'_id': u'c18677b9357f4e60b328b42a6bba497a', u'quality': u'720p'}, u'c6379eb7b7144aa6ab333f06f5759947': {u'status': u'available', u'info': {u'seeders': 61, u'protocol': u'torrent_magnet', u'description': u'', u'name': u'The.Art.of.the.Steal.2013.LIMITED.BRRip.x264.AC3-MiLLENiUM', u'url': u'magnet:?xt=urn:btih:C3F24AD28CDC1F7A25AAD8B7D80BA9B5F1D7DAA8&dn=the+art+of+the+steal+2013+limited+brrip+x264+ac3+millenium&tr=udp%3A%2F%2F12.rarbg.me%3A80%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337', u'age': 17, u'seed_ratio': 0.0, u'leechers': 64, u'score': 654, u'provider': u'KickAssTorrents', u'seed_time': 0, u'provider_extra': u'', u'detail_url': u'https://kickass.to/the-art-of-the-steal-2013-limited-brrip-x264-ac3-millenium-t9002531.html', u'type': u'movie', u'id': u'9002531', u'size': 1013.09}, u'identifier': u'74373b65ea496c18bdecc6e3c7a5c110', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'0003027a', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'c6379eb7b7144aa6ab333f06f5759947', u'quality': u'brrip'}, u'2f88c95fb3b24a1d9aeff4686168ee9f': {u'status': u'available', u'info': {u'seeders': 38, u'protocol': u'torrent_magnet', u'description': u'', u'name': u'The.Art.of.the.Steal.2013.LIMITED.720p.BRRip.XviD.AC3-RARBG', u'url': u'magnet:?xt=urn:btih:A834FBF8A5E7E35DEAA544139148B40F4276332A&dn=the+art+of+the+steal+2013+limited+720p+brrip+xvid+ac3+rarbg&tr=udp%3A%2F%2F12.rarbg.me%3A80%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337', u'age': 1, u'seed_ratio': 0.0, u'leechers': 68, u'score': 523, u'provider': u'KickAssTorrents', u'seed_time': 0, u'provider_extra': u'', u'detail_url': u'https://kickass.to/the-art-of-the-steal-2013-limited-720p-brrip-xvid-ac3-rarbg-t9000418.html', u'type': u'movie', u'id': u'9000418', u'size': 2437.12}, u'identifier': u'9caa0dbdb805a8e58af8a69240c74b9e', u'media_id': u'e16bb0f1d6484257a32b63d4b859555c', u'_rev': u'0003dbfa', u'_t': u'release', u'is_3d': False, u'last_edit': 1397721735, u'_id': u'2f88c95fb3b24a1d9aeff4686168ee9f', u'quality': u'brrip'}} +release = dict_diff(releases, releases_current) +test = release[release.keys()[0]]['status'] # Initialize the config nzbtomedia.initialize()