Ejemplo n.º 1
0
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 {}))
Ejemplo n.º 2
0
    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'])
Ejemplo n.º 3
0
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)