diff options
author | zyp <zyp@localhost> | 2006-05-17 01:21:27 +0200 |
---|---|---|
committer | zyp <zyp@localhost> | 2006-05-17 01:21:27 +0200 |
commit | a2ebd9bca9c4077dc6642c29d4e6f2d7107c0c24 (patch) | |
tree | 43f990d5b73fded2d37159a8e18a8ae4c9c09840 /pyanidb.py | |
parent | 8e9e23cddd72d2dd407164f8a7e835fa6c84b4d2 (diff) |
[project @ zyp-20060516232127-1ed2efc46068ab87]
[project @ 33]
Added optionparser.
Diffstat (limited to 'pyanidb.py')
-rw-r--r-- | pyanidb.py | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/pyanidb.py b/pyanidb.py new file mode 100644 index 0000000..62258c9 --- /dev/null +++ b/pyanidb.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python + +import pyanidb, pyanidb.hash +import ConfigParser, optparse, os, sys, getpass, multihash + +# Config. + +config = {} +try: + cp = ConfigParser.ConfigParser() + cp.read(os.path.expanduser('~/.pyanidb.conf')) + for option in cp.options('pyanidb'): + config[option] = cp.get('pyanidb', option) +except: + pass + +# Options. + +op = optparse.OptionParser() + +op.add_option('-u', '--username', help = 'AniDB username.', + action = 'store', dest = 'username', default = config.get('username')) +op.add_option('-p', '--password', help = 'AniDB password.', + action = 'store', dest = 'password', default = config.get('password')) + +op.add_option('-r', '--recursive', help = 'Recurse into directories.', + action = 'store_true', dest = 'recursive', default = False) +op.add_option('-s', '--suffix', help = 'File suffix for recursive matching.', + action = 'append', dest = 'suffix', default = config['suffix'].split()) + +op.add_option('-a', '--add', help = 'Add files to mylist.', + action = 'store_true', dest = 'add', default = False) + +options, args = op.parse_args(sys.argv[1:]) + +# Defaults. + +options.login = options.add + +# Authorization. + +if options.login: + if not options.username: + options.username = raw_input('Username: ') + if not options.password: + options.passord = getpass.getpass() + a = pyanidb.AniDB(options.username, options.password) + try: + a.auth() + print 'Logged in as user %s.' % (options.username) + if a.new_version: + print 'New version available.' + except pyanidb.AniDBUserError: + print 'Invalid username/password.' + sys.exit(1) + except pyanidb.AniDBTimeout: + print 'Connection timed out.' + sys.exit(1) + except pyanidb.AniDBError, e: + print 'Fatal error:', e + sys.exit(1) + +# Input files. + +files = [] +for name in args: + if not os.access(name, os.R_OK): + print 'Invalid file: %s' % (name) + elif os.path.isfile(name): + files.append(name) + elif os.path.isdir(name): + if not options.recursive: + print 'Is a directory: %s' % (name) + else: + for root, subdirs, subfiles in os.walk(name): + subdirs.sort() + subfiles.sort() + files += [os.path.join(root, file) for file in subfiles if sum([file.endswith('.' + suffix) for suffix in options.suffix])] + +# Hashing. + +for filename, hash in pyanidb.hash.hash_files(files): + size = os.path.getsize(filename) + print 'Hashed: ed2k://|file|%s|%d|%s|' % (filename, size, hash.ed2k()) + + # Adding + + if options.add: + try: + while 1: + try: + a.add_hash(size, hash.ed2k()) + except pyanidb.AniDBTimeout: + print 'Connection timed out, retrying.' + continue + break + print 'Added file: %s' % (filename) + except pyanidb.AniDBUnknownFile: + print 'Unknown file: %s' % (filename) + +# Finished. + +print 'All operations finished.' |