def setTorrentPath(result): if lazylibrarian.LOGLEVEL & lazylibrarian.log_dlcomms: logger.debug('Deluge: Setting download path') if not any(delugeweb_auth): _get_auth() dl_dir = lazylibrarian.CONFIG['DELUGE_DIR'] if not dl_dir: return True timeout = check_int(lazylibrarian.CONFIG['HTTP_TIMEOUT'], 30) try: post_json = { "method": "core.set_torrent_move_completed", "params": [result['hash'], True], "id": 7 } response = requests.post(delugeweb_url, json=post_json, cookies=delugeweb_auth, verify=deluge_verify_cert, headers=headers, timeout=timeout) if lazylibrarian.LOGLEVEL & lazylibrarian.log_dlcomms: logger.debug('Status code: %s' % response.status_code) logger.debug(response.text) if not os.path.isdir(dl_dir): if lazylibrarian.LOGLEVEL & lazylibrarian.log_dlcomms: logger.debug( 'Deluge: %s directory doesn\'t exist, let\'s create it' % dl_dir) _ = mymakedirs(dl_dir) post_json = { "method": "core.set_torrent_move_completed_path", "params": [result['hash'], dl_dir], "id": 8 } response = requests.post(delugeweb_url, json=post_json, cookies=delugeweb_auth, verify=deluge_verify_cert, headers=headers, timeout=timeout) if lazylibrarian.LOGLEVEL & lazylibrarian.log_dlcomms: logger.debug('Status code: %s' % response.status_code) logger.debug(response.text) return not response.json()['error'] except Exception as err: logger.error('Deluge %s: setTorrentPath failed: %s' % (type(err).__name__, str(err))) return False
def setTorrentPath(result): if lazylibrarian.LOGLEVEL & lazylibrarian.log_dlcomms: logger.debug('Deluge: Setting download path') if not any(delugeweb_auth): _get_auth() dl_dir = lazylibrarian.CONFIG['DELUGE_DIR'] if not dl_dir: return True timeout = check_int(lazylibrarian.CONFIG['HTTP_TIMEOUT'], 30) try: post_json = {"method": "core.set_torrent_move_completed", "params": [result['hash'], True], "id": 7} response = requests.post(delugeweb_url, json=post_json, cookies=delugeweb_auth, verify=deluge_verify_cert, headers=headers, timeout=timeout) if lazylibrarian.LOGLEVEL & lazylibrarian.log_dlcomms: logger.debug('Status code: %s' % response.status_code) logger.debug(response.text) if not os.path.isdir(dl_dir): if lazylibrarian.LOGLEVEL & lazylibrarian.log_dlcomms: logger.debug('Deluge: %s directory doesn\'t exist, let\'s create it' % dl_dir) _ = mymakedirs(dl_dir) post_json = {"method": "core.set_torrent_move_completed_path", "params": [result['hash'], dl_dir], "id": 8} response = requests.post(delugeweb_url, json=post_json, cookies=delugeweb_auth, verify=deluge_verify_cert, headers=headers, timeout=timeout) if lazylibrarian.LOGLEVEL & lazylibrarian.log_dlcomms: logger.debug('Status code: %s' % response.status_code) logger.debug(response.text) return not response.json()['error'] except Exception as err: logger.error('Deluge %s: setTorrentPath failed: %s' % (type(err).__name__, str(err))) return False
def DirectDownloadMethod(bookid=None, dl_title=None, dl_url=None, library='eBook'): myDB = database.DBConnection() downloadID = False Source = "DIRECT" logger.debug("Starting Direct Download for [%s]" % dl_title) proxies = proxyList() headers = {'Accept-encoding': 'gzip', 'User-Agent': USER_AGENT} try: r = requests.get(dl_url, headers=headers, timeout=90, proxies=proxies) except requests.exceptions.Timeout: logger.warn('Timeout fetching file from url: %s' % dl_url) return False except Exception as e: if hasattr(e, 'reason'): logger.warn('%s fetching file from url: %s, %s' % (type(e).__name__, dl_url, e.reason)) else: logger.warn('%s fetching file from url: %s, %s' % (type(e).__name__, dl_url, str(e))) return False if not str(r.status_code).startswith('2'): logger.debug("Got a %s response for %s" % (r.status_code, dl_url)) elif len(r.content) < 1000: logger.debug("Only got %s bytes for %s, rejecting" % (len(r.content), dl_title)) else: extn = '' basename = '' if ' ' in dl_title: basename, extn = dl_title.rsplit( ' ', 1) # last word is often the extension - but not always... if extn and extn in getList(lazylibrarian.CONFIG['EBOOK_TYPE']): dl_title = '.'.join(dl_title.rsplit(' ', 1)) elif magic: mtype = magic.from_buffer(r.content) if 'EPUB' in mtype: extn = '.epub' elif 'Mobipocket' in mtype: # also true for azw and azw3, does it matter? extn = '.mobi' elif 'PDF' in mtype: extn = '.pdf' else: logger.debug("magic reports %s" % mtype) basename = dl_title else: logger.warn("Don't know the filetype for %s" % dl_title) basename = dl_title logger.debug("File download got %s bytes for %s" % (len(r.content), dl_title)) destdir = os.path.join(lazylibrarian.DIRECTORY('Download'), basename) # destdir = os.path.join(lazylibrarian.DIRECTORY('Download'), '%s LL.(%s)' % (basename, bookid)) if not os.path.isdir(destdir): _ = mymakedirs(destdir) try: hashid = dl_url.split("md5=")[1].split("&")[0] except IndexError: hashid = sha1(encode(dl_url)).hexdigest() destfile = os.path.join(destdir, basename + extn) try: with open(destfile, 'wb') as bookfile: bookfile.write(r.content) setperm(destfile) downloadID = hashid except Exception as e: logger.error("%s writing book to %s, %s" % (type(e).__name__, destfile, e)) if downloadID: logger.debug('File %s has been downloaded from %s' % (dl_title, dl_url)) if library == 'eBook': myDB.action('UPDATE books SET status="Snatched" WHERE BookID=?', (bookid, )) elif library == 'AudioBook': myDB.action( 'UPDATE books SET audiostatus="Snatched" WHERE BookID=?', (bookid, )) myDB.action( 'UPDATE wanted SET status="Snatched", Source=?, DownloadID=? WHERE NZBurl=?', (Source, downloadID, dl_url)) return True else: logger.error('Failed to download file @ <a href="%s">%s</a>' % (dl_url, dl_url)) myDB.action('UPDATE wanted SET status="Failed" WHERE NZBurl=?', (dl_url, )) return False
def DirectDownloadMethod(bookid=None, tor_title=None, tor_url=None, bookname=None, library='eBook'): myDB = database.DBConnection() downloadID = False Source = "DIRECT" logger.debug("Starting Direct Download for [%s]" % bookname) proxies = proxyList() headers = {'Accept-encoding': 'gzip', 'User-Agent': USER_AGENT} try: r = requests.get(tor_url, headers=headers, timeout=90, proxies=proxies) except requests.exceptions.Timeout: logger.warn('Timeout fetching file from url: %s' % tor_url) return False except Exception as e: if hasattr(e, 'reason'): logger.warn('%s fetching file from url: %s, %s' % (type(e).__name__, tor_url, e.reason)) else: logger.warn('%s fetching file from url: %s, %s' % (type(e).__name__, tor_url, str(e))) return False if not str(r.status_code).startswith('2'): logger.debug("Got a %s response for %s" % (r.status_code, tor_url)) elif len(r.content) < 1000: logger.debug("Only got %s bytes for %s/%s, rejecting" % (len(r.content), tor_title, bookname)) else: bookname = '.'.join(bookname.rsplit(' ', 1)) # last word is the extension logger.debug("File download got %s bytes for %s/%s" % (len(r.content), tor_title, bookname)) destdir = os.path.join(lazylibrarian.DIRECTORY('Download'), tor_title) if not os.path.isdir(destdir): _ = mymakedirs(destdir) destfile = os.path.join(destdir, bookname) try: with open(destfile, 'wb') as bookfile: bookfile.write(r.content) setperm(destfile) downloadID = True except Exception as e: logger.error("%s writing book to %s, %s" % (type(e).__name__, destfile, e)) if downloadID: logger.debug('File %s has been downloaded from %s' % (tor_title, tor_url)) if library == 'eBook': myDB.action('UPDATE books SET status="Snatched" WHERE BookID=?', (bookid, )) elif library == 'AudioBook': myDB.action( 'UPDATE books SET audiostatus="Snatched" WHERE BookID=?', (bookid, )) myDB.action( 'UPDATE wanted SET status="Snatched", Source=?, DownloadID=? WHERE NZBurl=?', (Source, downloadID, tor_url)) return True else: logger.error('Failed to download file @ <a href="%s">%s</a>' % (tor_url, tor_url)) myDB.action('UPDATE wanted SET status="Failed" WHERE NZBurl=?', (tor_url, )) return False
def DirectDownloadMethod(bookid=None, dl_title=None, dl_url=None, library='eBook'): myDB = database.DBConnection() downloadID = False Source = "DIRECT" logger.debug("Starting Direct Download for [%s]" % dl_title) proxies = proxyList() headers = {'Accept-encoding': 'gzip', 'User-Agent': USER_AGENT} try: r = requests.get(dl_url, headers=headers, timeout=90, proxies=proxies) except requests.exceptions.Timeout: logger.warn('Timeout fetching file from url: %s' % dl_url) return False except Exception as e: if hasattr(e, 'reason'): logger.warn('%s fetching file from url: %s, %s' % (type(e).__name__, dl_url, e.reason)) else: logger.warn('%s fetching file from url: %s, %s' % (type(e).__name__, dl_url, str(e))) return False if not str(r.status_code).startswith('2'): logger.debug("Got a %s response for %s" % (r.status_code, dl_url)) elif len(r.content) < 1000: logger.debug("Only got %s bytes for %s, rejecting" % (len(r.content), dl_title)) else: extn = '' basename = '' if ' ' in dl_title: basename, extn = dl_title.rsplit(' ', 1) # last word is often the extension - but not always... if extn and extn in getList(lazylibrarian.CONFIG['EBOOK_TYPE']): dl_title = '.'.join(dl_title.rsplit(' ', 1)) elif magic: mtype = magic.from_buffer(r.content) if 'EPUB' in mtype: extn = '.epub' elif 'Mobipocket' in mtype: # also true for azw and azw3, does it matter? extn = '.mobi' elif 'PDF' in mtype: extn = '.pdf' else: logger.debug("magic reports %s" % mtype) basename = dl_title else: logger.warn("Don't know the filetype for %s" % dl_title) basename = dl_title logger.debug("File download got %s bytes for %s" % (len(r.content), dl_title)) destdir = os.path.join(lazylibrarian.DIRECTORY('Download'), basename) # destdir = os.path.join(lazylibrarian.DIRECTORY('Download'), '%s LL.(%s)' % (basename, bookid)) if not os.path.isdir(destdir): _ = mymakedirs(destdir) try: hashid = dl_url.split("md5=")[1].split("&")[0] except IndexError: hashid = sha1(encode(dl_url)).hexdigest() destfile = os.path.join(destdir, basename + extn) try: with open(destfile, 'wb') as bookfile: bookfile.write(r.content) setperm(destfile) downloadID = hashid except Exception as e: logger.error("%s writing book to %s, %s" % (type(e).__name__, destfile, e)) if downloadID: logger.debug('File %s has been downloaded from %s' % (dl_title, dl_url)) if library == 'eBook': myDB.action('UPDATE books SET status="Snatched" WHERE BookID=?', (bookid,)) elif library == 'AudioBook': myDB.action('UPDATE books SET audiostatus="Snatched" WHERE BookID=?', (bookid,)) myDB.action('UPDATE wanted SET status="Snatched", Source=?, DownloadID=? WHERE NZBurl=?', (Source, downloadID, dl_url)) return True else: logger.error('Failed to download file @ <a href="%s">%s</a>' % (dl_url, dl_url)) myDB.action('UPDATE wanted SET status="Failed" WHERE NZBurl=?', (dl_url,)) return False