def commandline(): import optparse op = optparse.OptionParser() op.add_option('-b', '--basedir') op.add_option('-a', '--add-replays', action='store_true') op.add_option('-l', '--list', action='store_true') op.add_option('-t', '--test', action='store_true') op.add_option('-v', '--verbose', action='store_true') op.add_option('--dump-gamedata', action='store_true') op.add_option('--rebuild', action='store_true') options, args = op.parse_args() rdb = ReplayDB(options.basedir) if options.test: test(rdb) if options.rebuild: replay_ids = rdb.get_replay_ids() targets = args for n, replay_id in enumerate(replay_ids): print 'making data for %s (%d/%d)' % ( replay_id, n+1, len(replay_ids)) rdb.make_data(replay_id, targets) if options.add_replays: for replay_path in args: rp_data = file(replay_path).read() replay_id = libw3g.get_replay_id(rp_data) print 'adding replay %s...' % replay_id try: rdb.add_replay(rp_data, { 'file_timestamp': libw3g.get_timestamp(replay_path)}) errors = rdb.get_errors(replay_id) if errors: print 'errors: %s' % errors except DuplicateReplayException: print 'skipped (already exists)' if options.list: for replay_id in rdb.get_replay_ids(): print replay_id, ('error' if replay_id not in rdb.replays else '') if options.dump_gamedata: for replay in search_replays(args, rdb.replays): dump_gamedata(replay, options.verbose)
def upload(self, path, callback=console_output): datagen, headers = multipart_encode({ 'replay_file': file(path, 'rb'), 'timestamp': str(libw3g.get_timestamp(path)) }) request = urllib2.Request(self.cgiurl+'/upload', datagen, headers) buf = urllib2.urlopen(request) while True: data = buf.read(8) if data=='-'*8: break else: downloaded = int(data) callback(downloaded) print buf.read()
parser = OptionParser() parser.add_option('-m', '--meta-data', action='store_true') parser.add_option('-r', '--replay-data', action='store_true') parser.add_option('-g', '--game-data', action='store_true') parser.add_option('-e', '--dota-events', action='store_true') parser.add_option('--player-stats', action='store_true') parser.add_option('--rd-node') #parser.add_option('-s', '--state', action='store_true') #parser.add_option('-p', '--players', action='store_true') #parser.add_option('-j', '--json') options, args = parser.parse_args() for arg in args: try: replay_data = get_replaydata(file(arg).read()) game_data = get_gamedata(replay_data, get_timestamp(arg)) if options.meta_data: dump_metadata(replay_data, game_data) if options.replay_data: dump_replay_data(replay_data) if options.game_data: dump_state(game_data) if options.dota_events: dump_dota_events(replay_data) if options.player_stats: dump_player_stats(game_data) if options.rd_node: dump_rdnode(replay_data, options.rd_node) #if options.json: #dump_json(state, options.json)
def wait_for_change(path): timestamp = current_ts = libw3g.get_timestamp(path) while (timestamp==current_ts): current_ts = libw3g.get_timestamp(path) time.sleep(1)