sandbox1
parent
430c467172
commit
a17e9da7c4
|
@ -203,7 +203,7 @@ class Engine:
|
|||
self.logpipe = None
|
||||
# self.process = None
|
||||
self.started = False
|
||||
self.pyrrent2http_loop = None
|
||||
|
||||
|
||||
@staticmethod
|
||||
def _validate_save_path(path):
|
||||
|
@ -329,7 +329,7 @@ class Engine:
|
|||
self.pyrrent2http.startServices()
|
||||
self.pyrrent2http.addTorrent()
|
||||
self.pyrrent2http.startHTTP()
|
||||
self.pyrrent2http_loop = threading.Thread(target = self.pyrrent2http.loop, args = (False,))
|
||||
self.pyrrent2http_loop = threading.Thread(target = self.pyrrent2http.loop)
|
||||
self.pyrrent2http_loop.start()
|
||||
|
||||
|
||||
|
|
|
@ -16,11 +16,15 @@ except Exception, e:
|
|||
except Exception as e:
|
||||
strerror = e.args
|
||||
print(strerror)
|
||||
sys.exit(1)
|
||||
if STANDALONE:
|
||||
sys.exit(1)
|
||||
else:
|
||||
raise
|
||||
|
||||
import libtorrent as lt
|
||||
from random import SystemRandom
|
||||
import time
|
||||
import urlparse, urllib
|
||||
import platform
|
||||
import BaseHTTPServer
|
||||
import SocketServer
|
||||
import threading
|
||||
|
@ -320,7 +324,7 @@ class TorrentFS(object):
|
|||
self.openedFiles.append(file_)
|
||||
def setPriority(self, index, priority):
|
||||
if self.priorities[index] != priority:
|
||||
logging.info('Setting %s priority to %d', self.info.file_at(index).path, priority)
|
||||
logging.info('Setting %s priority to %d' % (self.info.file_at(index).path, priority))
|
||||
self.priorities[index] = priority
|
||||
self.handle.file_priority(index, priority)
|
||||
def findOpenedFile(self, file):
|
||||
|
@ -637,12 +641,18 @@ class Pyrrent2http(object):
|
|||
self.config[k] = config_.__dict__[k]
|
||||
if self.config.uri == '':
|
||||
parser.print_usage()
|
||||
sys.exit(1)
|
||||
if STANDALONE:
|
||||
sys.exit(1)
|
||||
else:
|
||||
raise "Invalid argument"
|
||||
if self.config.uri.startswith('magnet:'):
|
||||
self.magnet = True
|
||||
if self.config.resumeFile != '' and not self.config.keepFiles:
|
||||
logging.error('Usage of option --resume-file is allowed only along with --keep-files')
|
||||
sys.exit(1)
|
||||
if STANDALONE:
|
||||
sys.exit(1)
|
||||
else:
|
||||
raise
|
||||
def buildTorrentParams(self, uri):
|
||||
fileUri = urlparse.urlparse(uri)
|
||||
torrentParams = {}
|
||||
|
@ -650,33 +660,39 @@ class Pyrrent2http(object):
|
|||
torrentParams['url'] = uri
|
||||
elif fileUri.scheme == 'file':
|
||||
uriPath = fileUri.path
|
||||
if uriPath != '' and platform.system().lower() == 'windows' and (os.path.sep == uriPath[0] or uriPath[0] == '/'):
|
||||
if uriPath != '' and sys.platform.startswith('win') and (os.path.sep == uriPath[0] or uriPath[0] == '/'):
|
||||
uriPath = uriPath[1:]
|
||||
try:
|
||||
absPath = os.path.abspath(uriPath)
|
||||
logging.info('Opening local file: %s', absPath)
|
||||
logging.info('Opening local file: %s' % (absPath,))
|
||||
with open(absPath, 'rb') as f:
|
||||
torrent_info = lt.torrent_info(lt.bdecode(f.read()))
|
||||
except Exception as e:
|
||||
strerror = e.args
|
||||
logging.error(strerror)
|
||||
sys.exit(1)
|
||||
if STANDALONE:
|
||||
sys.exit(1)
|
||||
else:
|
||||
raise
|
||||
torrentParams['ti'] = torrent_info
|
||||
else:
|
||||
logging.info('Will fetch: %s', uri)
|
||||
logging.info('Will fetch: %s' % (uri,))
|
||||
try:
|
||||
torrent_raw = urllib.urlopen(uri).read()
|
||||
torrent_info = lt.torrent_info(torrent_raw, len(torrent_raw))
|
||||
except Exception as e:
|
||||
strerror = e.args
|
||||
logging.error(strerror)
|
||||
sys.exit(1)
|
||||
if STANDALONE:
|
||||
sys.exit(1)
|
||||
else:
|
||||
raise
|
||||
torrentParams['ti'] = torrent_info
|
||||
logging.info('Setting save path: %s', self.config.downloadPath)
|
||||
logging.info('Setting save path: %s' % (self.config.downloadPath,))
|
||||
torrentParams['save_path'] = self.config.downloadPath
|
||||
|
||||
if os.path.exists(self.config.resumeFile):
|
||||
logging.info('Loading resume file: %s', self.config.resumeFile)
|
||||
logging.info('Loading resume file: %s' % (self.config.resumeFile,))
|
||||
try:
|
||||
with open(self.config.resumeFile, 'rb') as f:
|
||||
torrentParams['resume_data'] = lt.bencode(f.read())
|
||||
|
@ -711,7 +727,7 @@ class Pyrrent2http(object):
|
|||
info = self.torrentHandle.torrent_file()
|
||||
except:
|
||||
info = self.torrentHandle.get_torrent_info()
|
||||
logging.info('Downloading torrent: %s', info.name())
|
||||
logging.info('Downloading torrent: %s' % (info.name(),))
|
||||
self.TorrentFS = TorrentFS(self, self.torrentHandle, self.config.fileIndex)
|
||||
|
||||
def startHTTP(self):
|
||||
|
@ -724,7 +740,7 @@ class Pyrrent2http(object):
|
|||
#self.main_alive.set()
|
||||
logging.info('Starting HTTP Server...')
|
||||
handler = HttpHandlerFactory()
|
||||
logging.info('Listening HTTP on %s...\n', self.config.bindAddress)
|
||||
logging.info('Listening HTTP on %s...\n' % (self.config.bindAddress,))
|
||||
host, strport = self.config.bindAddress.split(':')
|
||||
if len(strport) > 0:
|
||||
srv_port = int(strport)
|
||||
|
@ -798,7 +814,10 @@ class Pyrrent2http(object):
|
|||
except IOError as e:
|
||||
strerror = e.args
|
||||
logging.error(strerror)
|
||||
sys.exit(1)
|
||||
if STANDALONE:
|
||||
sys.exit(1)
|
||||
else:
|
||||
raise
|
||||
|
||||
settings = self.session.get_settings()
|
||||
if self.config.userAgent != '':
|
||||
|
@ -827,9 +846,12 @@ class Pyrrent2http(object):
|
|||
except ValueError as e:
|
||||
strerror = e.args
|
||||
logging.error(strerror)
|
||||
sys.exit(1)
|
||||
if STANDALONE:
|
||||
sys.exit(1)
|
||||
else:
|
||||
raise
|
||||
self.session.add_dht_router(host, port)
|
||||
logging.info('Added DHT router: %s:%d', host, port)
|
||||
logging.info('Added DHT router: %s:%d' % (host, port))
|
||||
logging.info('Setting encryption settings')
|
||||
try:
|
||||
encryptionSettings = lt.pe_settings()
|
||||
|
@ -943,10 +965,10 @@ class Pyrrent2http(object):
|
|||
alert = self.session.pop_alert()
|
||||
if isinstance(alert, alertClass):
|
||||
return alert
|
||||
def loop(self, standalone = True):
|
||||
def loop(self):
|
||||
def sigterm_handler(_signo, _stack_frame):
|
||||
self.forceShutdown = True
|
||||
if standalone:
|
||||
if STANDALONE:
|
||||
import signal
|
||||
signal.signal(signal.SIGTERM, sigterm_handler)
|
||||
self.statsTicker = Ticker(30)
|
||||
|
@ -1056,11 +1078,15 @@ class Pyrrent2http(object):
|
|||
logging.info('Aborting the session')
|
||||
del self.session
|
||||
logging.info('Bye bye')
|
||||
sys.exit(0)
|
||||
|
||||
if STANDALONE:
|
||||
sys.exit(0)
|
||||
else:
|
||||
return
|
||||
|
||||
|
||||
STANDALONE = False
|
||||
if __name__ == '__main__':
|
||||
STANDALONE = True
|
||||
try:
|
||||
import logging
|
||||
logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG)
|
||||
|
|
Loading…
Reference in New Issue