def gen_job2(o): for bw in ("w", "n"): # if bw == 'w': # continue url = o["video_url_" + bw] if url == "n/a": continue fn = util.get_store_path(o["time"], url) assert fn state = cached_download_state.get(url) if os.path.exists(fn): new_state = "stored" else: new_state = "no" if os.path.exists(fn): # video info info0 = cached_video_info.get(url) if info0 == "None": info0 = None assert info0 != "None" if state != new_state: print repr(info0) info = None if not info0 or state != "stored": info = util.collect_video_info(fn) assert info info = json.dumps(info, sort_keys=True) if info0: if state != "stored": assert info info0 = json.dumps(json.loads(info0), sort_keys=True) print "info0", repr(info0) print "info1", repr(info) assert info == info0, url else: assert info with db.conn: cached_video_info[url] = info db.add_video_info(url, g_user, info) with db.conn: if state is None: bw = 1 if "-100k" in url else 0 clip = 1 if "-clip" in url else 0 videodate = o["time"][:10] db.add_job_state(url, g_user, new_state, bw, clip, videodate) cached_download_state[url] = new_state elif new_state == "stored" and state != "stored": db.change_job_state(url, g_user, new_state) cached_download_state[url] = new_state
def fetch(job): global g_alt_server t, url = json.loads(job) # prepare if g_alt_server: url = url.replace('mediavod01', 'mediavod02') fn = util.get_store_path(t, url) print url if options.verbose: print fn assert not os.path.exists(fn) # start fetch pid = os.getpid() tmp_a = os.path.join('tmp', '%d.a.wmv' % pid) tmp_b = os.path.join('tmp', '%d.b.wmv' % pid) tmp_c = os.path.join('tmp', '%d.c.wmv' % pid) tmp_log = os.path.join('tmp', '%d.log' % pid) my_unlink(tmp_a) my_unlink(tmp_b) my_unlink(tmp_c) my_unlink(tmp_log) cmd = '"%s" -s 5 -o %s -o %s -o %s "%s" 2>&1 | tee %s' % ( msdl_bin, tmp_a, tmp_b, tmp_c, url, tmp_log) p = subprocess.Popen(cmd, shell=True) p.wait() logdata = '' if os.path.exists(tmp_log): logdata = file(tmp_log).read() if is_success(logdata, tmp_a, tmp_b, tmp_c): os.rename(tmp_log, os_filename(fn + '.log')) os.rename(tmp_a, os_filename(fn)) info = util.collect_video_info(os_filename(fn)) assert info return dict(state='downloaded', sleep=10, info=json.dumps(info, sort_keys=True)) g_alt_server = not g_alt_server if '404 (Not Found)' in logdata: return dict(state='404', sleep=3) else: return dict(state='failed', sleep=60)