def find_batch_runs(kive, batch_name, batch_size): run_map = {} # {sample_name: status} run_count = 0 for i in range(1, 201): response = kive.get('/api/runs/status/', params={ 'page_size': 25, 'page': i }) response.raise_for_status() json = response.json() for entry in json['results']: text_status = entry['run_progress']['status'] pipeline_id = entry['pipeline'] if (re.match(r'^\*+-\*+$', text_status) is None or pipeline_id not in kive_pipelines): continue display_match = re.match(r'^MiSeq - ([^_]*_S\d+)$', entry['display_name']) if display_match is not None: if batch_name not in entry['runbatch_name']: continue sample_name = display_match.group(1) else: status_response = kive.get(entry['run_status']) status_response.raise_for_status() status_json = status_response.json() is_match = False sample_name = None for input_dataset_name in map(itemgetter('dataset_name'), status_json['inputs'].values()): if input_dataset_name.endswith('_quality.csv'): is_match = batch_name in input_dataset_name elif input_dataset_name.endswith('.fastq.gz'): sample_name = '_'.join( input_dataset_name.split('_')[:2]) if not is_match or sample_name is None: continue status = RunStatus(entry, kive) status.json = entry run_map[sample_name] = status run_count = len(run_map) print('Found {} of {} runs after {} pages.'.format( run_count, batch_size, i)) if run_count >= batch_size: break if run_count < batch_size: raise Exception('Expected {} samples, but only found {}.'.format( batch_size, run_count)) runs = list(run_map.items()) runs.sort() return runs
def find_batch_runs(kive, batch_name, batch_size): run_map = {} # {sample_name: status} for i in range(1, 201): response = kive.get('/api/runs/status/', params={ 'page_size': 25, 'page': i }) response.raise_for_status() json = response.json() for entry in json['results']: text_status = entry['run_progress']['status'] pipeline_id = entry['pipeline'] if re.match(r'^\*+-\*+$', text_status) is None or pipeline_id != 167: continue display_match = re.match(r'^MiSeq - ([^_]*_S\d+) \((.*)\)$', entry['display_name']) if display_match is not None: if display_match.group(2) != batch_name: continue sample_name = display_match.group(1) else: status_response = kive.get(entry['run_status']) status_response.raise_for_status() status_json = status_response.json() quality_filename = status_json['inputs']['1']['dataset_name'] if quality_filename != '{}_quality.csv'.format(batch_name): continue sample_filename = status_json['inputs']['2']['dataset_name'] sample_name = '_'.join(sample_filename.split('_')[:2]) status = RunStatus(entry, kive) status.json = entry run_map[sample_name] = status run_count = len(run_map) print('Found {} of {} runs after {} pages.'.format( run_count, batch_size, i)) if run_count >= batch_size: break if run_count < batch_size: raise StandardError('Expected {} samples, but only found {}.'.format( batch_size, run_count)) runs = run_map.items() runs.sort() return runs
def find_old_runs(kive, **kwargs): params = {} param_count = 0 for key, val in kwargs.items(): if val is not None: params['filters[{}][key]'.format(param_count)] = key params['filters[{}][val]'.format(param_count)] = val param_count += 1 response = kive.get('/api/runs/status/', params=params) response.raise_for_status() json = response.json() runs = [] for entry in json: status = RunStatus(entry, kive) status.json = entry status_response = kive.get(entry['run_status']) status_response.raise_for_status() sample_filename = status_response.json()['inputs']['2']['dataset_name'] sample_name = '_'.join(sample_filename.split('_')[:2]) runs.append((sample_name, status)) runs.sort() return runs
def find_old_runs(kive, **kwargs): params = {} param_count = 0 for key, val in kwargs.iteritems(): if val is not None: params["filters[{}][key]".format(param_count)] = key params["filters[{}][val]".format(param_count)] = val param_count += 1 response = kive.get("/api/runs/status/", params=params) response.raise_for_status() json = response.json() runs = [] for entry in json: status = RunStatus(entry, kive) status.json = entry status_response = kive.get(entry["run_status"]) status_response.raise_for_status() sample_filename = status_response.json()["inputs"]["2"]["dataset_name"] sample_name = "_".join(sample_filename.split("_")[:2]) runs.append((sample_name, status)) runs.sort() return runs
def find_batch_runs(kive, batch_name, batch_size): run_map = {} # {sample_name: status} for i in range(1, 201): response = kive.get("/api/runs/status/", params={"page_size": 25, "page": i}) response.raise_for_status() json = response.json() for entry in json["results"]: text_status = entry["run_progress"]["status"] pipeline_id = entry["pipeline"] if re.match(r"^\*+-\*+$", text_status) is None or pipeline_id != 167: continue display_match = re.match(r"^MiSeq - ([^_]*_S\d+) \((.*)\)$", entry["display_name"]) if display_match is not None: if display_match.group(2) != batch_name: continue sample_name = display_match.group(1) else: status_response = kive.get(entry["run_status"]) status_response.raise_for_status() status_json = status_response.json() quality_filename = status_json["inputs"]["1"]["dataset_name"] if quality_filename != "{}_quality.csv".format(batch_name): continue sample_filename = status_json["inputs"]["2"]["dataset_name"] sample_name = "_".join(sample_filename.split("_")[:2]) status = RunStatus(entry, kive) status.json = entry run_map[sample_name] = status run_count = len(run_map) print("Found {} of {} runs after {} pages.".format(run_count, batch_size, i)) if run_count >= batch_size: break if run_count < batch_size: raise StandardError("Expected {} samples, but only found {}.".format(batch_size, run_count)) runs = run_map.items() runs.sort() return runs