btlaunchmany.py :  » Network » Torrent-Swapper » swapper » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Network » Torrent Swapper 
Torrent Swapper » swapper » btlaunchmany.py
#!/usr/bin/env python

# Written by John Hoffman and Pawel Garbacki
# see LICENSE.txt for license information

from BitTornado import PSYCO
if PSYCO.psyco:
    try:
        import psyco
        assert psyco.__version__ >= 0x010100f0
        psyco.full()
    except:
        pass

from BitTornado.launchmanycore import LaunchMany
from BitTornado.download_bt1 import defaults,get_usage
from BitTornado.parseargs import parseargs
from threading import Event
from sys import argv,exit
import sys, os
from BitTornado import version,report_email
from BitTornado.ConfigDir import ConfigDir
#--- 2fastbt_
from time import time
from Swapper.toofastbt.Logger import get_logger
from Swapper.__init__ import swapper_init,swapper_done
# _2fastbt

assert sys.version >= '2', "Install Python 2.0 or greater"
try:
    True
except:
    True = 1
    False = 0

def hours(n):
    if n == -1:
        return '<unknown>'
    if n == 0:
        return 'complete!'
    n = int(n)
    h, r = divmod(n, 60 * 60)
    m, sec = divmod(r, 60)
    if h > 1000000:
        return '<unknown>'
    if h > 0:
        return '%d hour %02d min %02d sec' % (h, m, sec)
    else:
        return '%d min %02d sec' % (m, sec)


Exceptions = []

class HeadlessDisplayer:
#--- 2fastbt_
    def __init__(self):
        self.start_time = time()
        self.end_time = None
# _2fastbt
    
    def display(self, data):
        print ''
        if not data:
            self.message('no torrents')
        for x in data:
            ( name, status, progress, peers, seeds, seedsmsg, dist,
              uprate, dnrate, upamt, dnamt, size, t, msg ) = x
#--- 2fastbt_
            if status != "seeding":
                delta = time() - self.start_time
            else:
                if self.end_time is None:
                    self.end_time = time()
                delta = self.end_time - self.start_time
            x = '"%s": "%s" (%s) - %sP%s%s%.3fD u%0.1fK/s-d%0.1fK/s u%dK-d%dK "%s" %d' % (
                    name, status, progress, peers, seeds, seedsmsg, dist,
                    uprate/1000, dnrate/1000, upamt/1024, dnamt/1024, msg, int(delta))
            try:
                get_logger().log(3, x)
            except:
                pass
            print x
            if status == "seeding":
                get_logger().log(2, 'total_time = ' + str(delta))
#                exit(0)
# _2fastbt
        return False
            
    def message(self, s):
        print "### "+s

    def exception(self, s):
        self.message(s)
        Exceptions.append(s)
        self.message('SYSTEM ERROR - EXCEPTION GENERATED')


if __name__ == '__main__':
    if argv[1:] == ['--version']:
        print version
        exit(0)
    defaults.extend( [
        ( 'parse_dir_interval', 60,
          "how often to rescan the torrent directory, in seconds" ),
        ( 'saveas_style', 1,
          "How to name torrent downloads (1 = rename to torrent name, " +
          "2 = save under name in torrent, 3 = save in directory under torrent name)" ),
        ( 'display_path', 1,
          "whether to display the full path or the torrent contents for each torrent" ),
       ('config_path', '',
          'directory containing the Swapper config files (default $HOME/.Swapper)'),
    ] )
    try:
        # Make sure we can have a directory with config files in a user-chosen
        # location
        presets = {}
        for tuple in defaults:
            presets[tuple[0]] = tuple[1]
        if len(argv) < 2:
            print "Usage: btlaunchmany.py <directory> <global options>\n"
            print "<directory> - directory to look for .torrent files (semi-recursive)"
            print get_usage(defaults, 80, presets)
            exit(1)

        tempconfig, tempargs = parseargs(argv[1:], defaults, 1, 1, presets)
        if tempconfig['config_path'] != '':
            config_path = tempconfig['config_path']
            configdir = ConfigDir('launchmany', config_path)
        else:
            configdir = ConfigDir('launchmany')
            config_path = configdir.getDirRoot()
            
        # original init
        defaultsToIgnore = ['responsefile', 'url', 'priority']
        configdir.setDefaults(defaults,defaultsToIgnore)
        configdefaults = configdir.loadConfig()
        defaults.append(('save_options',0,
         "whether to save the current options as the new default configuration " +
         "(only for btlaunchmany.py)"))

        config, args = parseargs(argv[1:], defaults, 1, 1, configdefaults)
        if config['save_options']:
            configdir.saveConfig(config)

        config['config_path'] = config_path
        if not os.path.isdir(config['config_path']):
            print "Swapper requires config_path parameter pointing to dir with ecpub.pem, etc.!"
            exit(1)
        configdir.deleteOldCacheData(config['expire_cache_data'])
        if not os.path.isdir(args[0]):
            raise ValueError("Warning: "+args[0]+" is not a directory")
        config['torrent_dir'] = args[0]
    except ValueError, e:
        print 'error: ' + str(e) + '\nrun with no args for parameter explanations'
        exit(1)
    
    install_dir = os.path.dirname(argv[0])
    swapper_init(config['config_path'],install_dir)

    config['text_mode'] = 1
    LaunchMany(config, HeadlessDisplayer())

    swapper_done(config['config_path'])

    if Exceptions:
        print '\nEXCEPTION:'
        print Exceptions[0]
        get_logger().log(2, 'btlaunchmany EXCEPTION: ' + str(Exceptions[0]))
        print 'please report this to '+report_email+'. Thank you!'
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.