def attach_bams_to_vcfs(vcfs): """Attach tumor_bam and normal_bam to all VCFs.""" with tables(db.engine, 'bams') as (con, bams): q = select(bams.c) bams = [dict(b) for b in con.execute(q).fetchall()] for vcf in vcfs: normal_bam_id = vcf.get('normal_bam_id') tumor_bam_id = vcf.get('tumor_bam_id') vcf['tumor_bam'] = ( dict(find(bams, lambda x: x.get('id') == tumor_bam_id) or {})) vcf['normal_bam'] = ( dict(find(bams, lambda x: x.get('id') == normal_bam_id) or {}))
def test_home(self, *mocks): cycledash.views.home() project_trees = mocked.call_args[1]['project_trees'] last_comments = mocked.call_args[1]['last_comments'] asserts.eq_(len(project_trees), 2) project = find(project_trees, lambda p: p['name'] == PROJECT_NAME) asserts.ok_(project) vcfs = project.get('vcfs') asserts.ok_(vcfs) asserts.eq_(len(vcfs), 2) asserts.eq_(set([v['uri'] for v in vcfs]), set([self.run['uri'], self.run2['uri']])) bams = project.get('bams') asserts.ok_(bams) asserts.eq_(len(bams), 2) asserts.eq_(len(last_comments), 2) comment2_found = find(last_comments, lambda c: c['vcfId'] == self.run['id']) asserts.eq_(comment2_found['commentText'], self.comment2['comment_text'])
def get_projects_tree(): """Return a list of all projects, with their respective vcfs and bams. { "projects": [ { "name": "Project Name", "notes": "Some test notes" "vcfs": [...] "bams": [ { "name": "a dataset", ... }, ... ]}, ... ]} """ with tables(db.engine, 'vcfs', 'user_comments', 'bams', 'projects') as \ (con, vcfs, user_comments, bams_table, projects): joined = (vcfs .outerjoin(user_comments, vcfs.c.id == user_comments.c.vcf_id)) num_comments = func.count(user_comments.c.vcf_id).label('num_comments') q = (select(vcfs.c + [num_comments]) .select_from(joined) .group_by(vcfs.c.id) .order_by(desc(vcfs.c.id))) vcfs = [dict(v) for v in con.execute(q).fetchall()] q = select(bams_table.c) all_bams = [dict(b) for b in con.execute(q).fetchall()] q = select(projects.c) projects = [dict(b) for b in con.execute(q).fetchall()] bams.attach_bams_to_vcfs(vcfs) for vcf in vcfs: project_id = vcf.get('project_id') vcf['project'] = dict(find(projects, lambda x: x.get('id') == project_id) or {}) _join_task_states(vcfs) for project in projects: project_id = project['id'] project_bams = [bam for bam in all_bams if bam.get('project_id') == project_id] project_vcfs = [vcf for vcf in vcfs if vcf.get('project_id') == project_id] project['bams'] = project_bams project['vcfs'] = project_vcfs return projects
def get_from_variant(variant): sample = find(variant.samples, lambda x: x.sample == sample_name) return getattr(sample.data, attr)