def parse_configuration_and_args(defaults, uiname, arglist=[], minargs=0, maxargs=0): defconfig = dict([(name, value) for (name, value, doc) in defaults]) if arglist[0:] == ['--version']: print version sys.exit(0) if arglist[0:] in (['--help'], ['-h'], ['--usage'], ['-?']): parseargs.printHelp(uiname, defaults) sys.exit(0) presets = get_config(defconfig, uiname) config, args = parseargs.parseargs(arglist, defaults, minargs, maxargs, presets) datadir = config['data_dir'] if datadir: if uiname in ('bittorrent', 'maketorrent'): values = {} p = _read_config(os.path.join(datadir, MAIN_CONFIG_FILE)) if not p.has_section(uiname) and p.has_section(alt_uiname[uiname]): uiname = alt_uiname[uiname] if p.has_section(uiname): for name, value in p.items(uiname): if name in defconfig: values[name] = value parseargs.parse_options(defconfig, values) presets.update(values) config, args = parseargs.parseargs(arglist, defaults, minargs, maxargs, presets) for d in ('', 'resume', 'metainfo'): ddir = os.path.join(datadir, d) try: if not os.path.exists(ddir): os.mkdir(ddir, 0700) except: pass if config['language'] != '': try: lang = gettext.translation('bittorrent', locale_root, languages=[config['language']]) lang.install() except IOError: # don't raise an error, just continue untranslated sys.stderr.write( _('Could not find translation for language "%s"\n') % config['language']) if config.has_key('bind') and ['bind'] != '': bind_tracker_connection(config['bind']) return config, args
def parse_configuration_and_args(defaults, uiname, arglist=[], minargs=0, maxargs=0): defconfig = dict([(name, value) for (name, value, doc) in defaults]) if arglist[0:] == ['--version']: print version sys.exit(0) if arglist[0:] in (['--help'], ['-h'], ['--usage'], ['-?']): parseargs.printHelp(uiname, defaults) sys.exit(0) presets = get_config(defconfig, uiname) config, args = parseargs.parseargs(arglist, defaults, minargs, maxargs, presets) datadir = config['data_dir'] if datadir: if uiname in ('bittorrent', 'maketorrent'): values = {} p = _read_config(os.path.join(datadir, MAIN_CONFIG_FILE)) if not p.has_section(uiname) and p.has_section(alt_uiname[uiname]): uiname = alt_uiname[uiname] if p.has_section(uiname): for name, value in p.items(uiname): if name in defconfig: values[name] = value parseargs.parse_options(defconfig, values) presets.update(values) config, args = parseargs.parseargs(arglist, defaults, minargs, maxargs, presets) for d in ('', 'resume', 'metainfo'): ddir = os.path.join(datadir, d) try: if not os.path.exists(ddir): os.mkdir(ddir, 0700) except: pass if config['language'] != '': try: lang = gettext.translation('bittorrent', locale_root, languages=[config['language']]) lang.install() except IOError: # don't raise an error, just continue untranslated sys.stderr.write(_('Could not find translation for language "%s"\n') % config['language']) if config.has_key('bind') and ['bind'] != '': bind_tracker_connection(config['bind']) return config, args
def track(args): if len(args) == 0: print formatDefinitions(defaults, 80) return try: config, files = parseargs(args, defaults, 0, 0) except ValueError, e: print _("error: ") + str(e) print _("run with no arguments for parameter explanations") return
def track(args): if len(args) == 0: print formatDefinitions(defaults, 80) return try: config, files = parseargs(args, defaults, 0, 0) except ValueError, e: print 'error: ' + str(e) print 'run with no arguments for parameter explanations' return
def parse_configuration_and_args(defaults, uiname, arglist=[], minargs=0, maxargs=0): defconfig = dict([(name, value) for (name, value, doc) in defaults]) if arglist[0:] == ['--version']: print version sys.exit(0) if arglist[0:] in (['--help'], ['-h'], ['--usage'], ['-?']): parseargs.printHelp(uiname, defaults) sys.exit(0) presets = get_config(defconfig, uiname) config, args = parseargs.parseargs(arglist, defaults, minargs, maxargs, presets) datadir = config['data_dir'] if datadir: if uiname in ('btdownloadgui', 'btmaketorrentgui'): p = RawConfigParser() values = {} p.read(os.path.join(datadir, 'ui_config')) if p.has_section(uiname): for name, value in p.items(uiname): if name in defconfig: values[name] = value parseargs.parse_options(defconfig, values) presets.update(values) config, args = parseargs.parseargs(arglist, defaults, minargs, maxargs, presets) rdir = os.path.join(datadir, 'resume') mdir = os.path.join(datadir, 'metainfo') try: if not os.path.exists(datadir): os.mkdir(datadir, 0700) if not os.path.exists(mdir): os.mkdir(mdir, 0700) if not os.path.exists(rdir): os.mkdir(rdir, 0700) except: pass return config, args
def subfiles(d): r = [] stack = [([], d)] while len(stack) > 0: p, n = stack.pop() if isdir(n): for s in listdir(n): if s not in ignore and s[:1] != '.': stack.append((copy(p) + [s], join(n, s))) else: r.append((p, n)) return r def prog(amount): print '%.1f%% complete\r' % (amount * 100), if __name__ == '__main__': if len(argv) < 3: print 'usage is -' print argv[0] + ' file trackerurl [params]' print print formatDefinitions(defaults, 80) else: try: config, args = parseargs(argv[3:], defaults, 0, 0) make_meta_file(argv[1], argv[2], config['piece_size_pow2'], progress = prog, comment = config['comment'], target = config['target']) except ValueError, e: print 'error: ' + str(e) print 'run with no args for parameter explanations'
def parse_configuration_and_args(defaults, uiname, arglist=[], minargs=None, maxargs=None): """Given the default option settings and overrides these defaults from values read from the config file, and again overrides the config file with the arguments that appear in the arglist. 'defaults' is a list of tuples of the form (optname, value, desc) where 'optname' is a string containing the option's name, value is the option's default value, and desc is the option's description. 'uiname' is a string specifying the user interface that has been created by the caller. Ex: bittorrent, maketorrent. arglist is usually argv[1:], i.e., excluding the name used to execute the program. minargs specifies the minimum number of arguments that must appear in arglist. If the number of arguments is less than the minimum then a BTFailure exception is raised. maxargs specifies the maximum number of arguments that can appear in arglist. If the number of arguments exceeds the maximum then a BTFailure exception is raised. This returns the tuple (config,args) where config is a dictionary of (option, value) pairs, and args is the list of arguments in arglist after the command-line arguments have been removed. For example: bittorrent-curses.py --save_as lx-2.6.rpm lx-2.6.rpm.torrent --max_upload_rate 0 returns a (config,args) pair where the config dictionary contains many defaults plus the mappings 'save_as': 'linux-2.6.15.tar.gz' and 'max_upload_rate': 0 The args in the returned pair is args= ['linux-2.6.15.tar.gz.torrent'] """ assert type(defaults)==list assert type(uiname)==str assert type(arglist)==list assert minargs is None or type(minargs) in (int,long) and minargs>=0 assert maxargs is None or type(maxargs) in (int,long) and maxargs>=minargs # remap shortform arguments to their long-forms. arglist = convert_from_shortforms(arglist) defconfig = dict([(name, value) for (name, value, doc) in defaults]) if arglist[0:] == ['--version']: print version sys.exit(0) if arglist[0:] == '--help': parseargs.printHelp(uiname, defaults) sys.exit(0) if "--use_factory_defaults" not in arglist: presets = get_config(defconfig, uiname) # read from .bittorrent dir. # run as if fresh install using temporary directories. else: presets = {} temp_dir = get_temp_subdir() #set_config_dir(temp_dir) # is already set in platform.py. save_in = encode_for_filesystem( u"save_in" )[0] presets["save_in"] = \ decode_from_filesystem(os.path.join(temp_dir,save_in)) data = encode_for_filesystem( u"data" )[0] presets["data_dir"] = \ decode_from_filesystem(os.path.join(temp_dir,data)) incomplete = encode_for_filesystem( u"incomplete" )[0] presets["save_incomplete_in"] = \ decode_from_filesystem(os.path.join(temp_dir,incomplete)) presets["one_connection_per_ip"] = False config = args = None try: config, args = parseargs.parseargs(arglist, defaults, minargs, maxargs, presets) except parseargs.UsageException, e: print e parseargs.printHelp(uiname, defaults) sys.exit(0)
if name in defconfig: values[name] = value elif not found_4x_config: # identify 4.x version config file if name in ('start_torrent_behavior', 'seed_forever', 'progressbar_hack', 'seed_last_forever', 'next_torrent_ratio', 'next_torrent_time', 'last_torrent_ratio', ): found_4x_config = True parseargs.parse_options(defconfig, values, encoding) presets.update(values) config, args = parseargs.parseargs(arglist, defaults, minargs, maxargs, presets) for d in ('', 'resume', 'metainfo', 'torrents'): ddir = os.path.join(datadir, d) if not os.path.exists(ddir): os.mkdir(ddir, 0700) else: assert(os.path.isdir(ddir)) if found_4x_config: # version 4.x stored KB/s, < version 4.x stores B/s config['max_upload_rate'] *= 1024 if config.get('language'): # this is non-blocking if the language does not exist smart_gettext_and_install('bittorrent', locale_root,
for s in listdir(n): if s not in ignore and s[:1] != '.': stack.append((copy(p) + [s], join(n, s))) else: r.append((p, n)) return r def prog(amount): print '%.1f%% complete\r' % (amount * 100), if __name__ == '__main__': if len(argv) < 3: print 'usage is -' print argv[0] + ' file trackerurl [params]' print print formatDefinitions(defaults, 80) else: try: config, args = parseargs(argv[3:], defaults, 0, 0) make_meta_file(argv[1], argv[2], config['piece_size_pow2'], progress=prog, comment=config['comment'], target=config['target']) except ValueError, e: print 'error: ' + str(e) print 'run with no args for parameter explanations'
from BitTorrent import BTFailure defaults = [ ('piece_size_pow2', 18, "which power of 2 to set the piece size to"), ('comment', '', "optional human-readable comment to put in .torrent"), ('target', '', "optional target file for the torrent"), ('filesystem_encoding', '', "character encoding used on the local filesystem. If left empty, autodetected. Autodetection doesn't work under python versions older than 2.3.") ] def dc(v): print v def prog(amount): print '%.1f%% complete\r' % (amount * 100), if __name__ == '__main__': if len(sys.argv) <= 1: printHelp('btmaketorrent', defaults) else: try: config, args = parseargs(sys.argv[1:], defaults, 2, None) make_meta_files(args[0], args[1:], piece_len_pow2=config['piece_size_pow2'], progressfunc=prog, filefunc=dc, comment=config['comment'], target=config['target'], filesystem_encoding=config['filesystem_encoding']) except BTFailure, e: print str(e) sys.exit(1)