Example #1
0
def create_analysis_tasks(analysis_id):
    print('analysis_id', analysis_id)
    # samples = []
    # print('hello!')
    #create analysis tasks
    # analysis = Analysis.objects.()
    analysis = Analysis.objects.get(pk=analysis_id)
    print(dir(analysis))
    params = analysis.params
    files = params['files']
    for file in files:
        task = Task(user=analysis.user)
        task.manifest = {}
        task.manifest['files'] = [file]
        task.manifest['analysis_types'] = params['analysis_types']
        task.status = 'new'
        task.analysis = analysis
        task.action = 'analysis'
        task.save()
        analysis.tasks.add(task)

    # if 'sample_groups' in  params:
    #     samples = Sample.objects.filter(samplegroup_members__in=params['sample_groups'])
    #     # sample = Sample.objects.first()
    #     # print(dir(sample))
    # for sample in samples:      
    #     print(sample)
    #     for file in sample.files.all():
    #         bam_size = 9223372036854775807
    #         if file.extension == 'bam':
    #             if file.size < bam_size:
    #                 bamfile = file
    #                 bam_size = file.size
    #     print('small bam', bamfile.size)
    # get smallest bam file
Example #2
0
def run_task(request):
    if request.method == 'GET':
        print(request.GET)
        if 'action' in request.GET:
            action = request.GET['action']
            file_id = request.GET['file_id']

            file = File.get_object_or_404(pk=file_id)
            if action == "check":

                task_manifest = {}
                task_manifest['file'] = file.id
                task_manifest['action'] = action
                task = Task(user=request.user)

                task.manifest = task_manifest
                task.status = 'new'
                task.action = action
                task.user = request.user
                task.save()

                check_file.delay(task.id)

                file.status = 'scheduled'
                file.save()

    return redirect('files-index')
Example #3
0
def run_task(request):
    if request.method == 'GET':
        print(request.GET)
        if 'action' in request.GET:
            action = request.GET['action']
            file_id  = request.GET['file_id']

            file = File.get_object_or_404(pk=file_id)
            if action == "check":
                
                task_manifest = {}
                task_manifest['file'] = file.id
                task_manifest['action'] = action
                task = Task(user=request.user)
                
                task.manifest = task_manifest
                task.status = 'new'
                task.action = action
                task.user = request.user
                task.save()

                check_file.delay(task.id)

                file.status = 'scheduled'
                file.save()
            
    return redirect('files-index')
Example #4
0
def bulk_action(request):

    if request.method == 'POST':
        files = request.POST.getlist('files')
        action = request.POST['action']

        for file_id in files:

            # file = File.objects.get(pk=file_id)
            if request.user.is_staff:
                file = get_object_or_404(File, pk=file_id)
            else:
                file = get_object_or_404(File, pk=file_id, user=request.user)

            if action == "delete":
                file.delete()
            if action == "check":

                task_manifest = {}
                task_manifest['file'] = file.id
                task_manifest['action'] = action
                task = Task(user=request.user)

                task.manifest = task_manifest
                task.status = 'new'
                task.action = action
                task.user = request.user
                task.save()

                check_file.delay(task.id)

                file.status = 'scheduled'
                file.save()

    return redirect('files-index')
Example #5
0
def bulk_action(request):

    if request.method == 'POST':
        files = request.POST.getlist('files')
        action = request.POST['action']

        for file_id in files:


            # file = File.objects.get(pk=file_id)
            if request.user.is_staff:
                file = get_object_or_404(File, pk=file_id)
            else:
                file = get_object_or_404(File, pk=file_id, user=request.user)

            if action == "delete":
                file.delete()
            if action == "check":
                
                task_manifest = {}
                task_manifest['file'] = file.id
                task_manifest['action'] = action
                task = Task(user=request.user)
                
                task.manifest = task_manifest
                task.status = 'new'
                task.action = action
                task.user = request.user
                task.save()

                check_file.delay(task.id)

                file.status = 'scheduled'
                file.save()

    return redirect('files-index')
Example #6
0
def bulk_action(request, project_id):

    if request.user.is_staff:
        project = get_object_or_404(Project, pk=project_id)
    else:
        project = get_object_or_404(Project, pk=project_id, user=request.user)

    if request.method == 'POST':
        
        action = request.POST['action']

        print('POST', request.POST)

        model = request.POST['model']


        if model == 'files':
    
            files = request.POST.getlist('files')


            if action == 'analysis':

                request.session['files'] = files
                request.session['project_id'] = project_id
                
                return redirect('analysis-create')


            for file_id in files:
                file = File.objects.get(pk=file_id)
                if action == "delete":
                    file.delete()
                if action == "qc":
                    if file.file_type in ['fq', 'fastq', 'bam', 'vcf']:
                        task = Task()
                        task.name = 'QC ProjectFile %s' % (file.id)
                        task.type = 'qc'
                        task.action = 'qc'
                        task.status = 'new'
                        task.manifest = {
                            'input':file.location,
                            'project':project.id,
                            'file':file.id,
                            'type':'qc',
                        }
                        task.save()
                        run_qc.delay(task.id)
                if action == "check":
                   task_manifest = {}
                   task_manifest['file'] = file.id
                   task_manifest['action'] = action
                   task = Task(user=request.user)
                   task.manifest = task_manifest
                   task.status = 'new'
                   task.action = action
                   task.user = request.user
                   task.save()
                   check_file.delay(task.id)
                   file.status = 'scheduled'
                   file.save()







        if model == 'samples':
            samples = request.POST.getlist('samples')
            for sample_id in samples:
                sample = ProjectSample.objects.get(pk=sample_id)
                if action == "delete":
                    sample.delete()

            
    return redirect('projects-view', project_id=project_id)
Example #7
0
def bulk_action(request, project_id):

    if request.user.is_staff:
        project = get_object_or_404(Project, pk=project_id)
    else:
        project = get_object_or_404(Project, pk=project_id, user=request.user)

    if request.method == 'POST':
        
        action = request.POST['action']

        # print('POST', request.POST)

        model = request.POST['model']


        if model == 'files':
    
            files = request.POST.getlist('files')


            if action == 'analysis':

                request.session['files'] = files
                request.session['project_id'] = project_id
                
                return redirect('analysis-create')


            for file_id in files:
                file = File.objects.get(pk=file_id)
                if action == "delete":
                    file.delete()
                if action == "qc":
                    if file.file_type in ['fq', 'fastq', 'bam', 'vcf']:
                        task = Task()
                        task.name = 'QC ProjectFile %s' % (file.id)
                        task.type = 'qc'
                        task.action = 'qc'
                        task.status = 'new'
                        task.manifest = {
                            'input':file.location,
                            'project':project.id,
                            'file':file.id,
                            'type':'qc',
                        }
                        task.save()
                        run_qc.delay(task.id)
                if action == "check":
                   task_manifest = {}
                   task_manifest['file'] = file.id
                   task_manifest['action'] = action
                   task = Task(user=request.user)
                   task.manifest = task_manifest
                   task.status = 'new'
                   task.action = action
                   task.user = request.user
                   task.save()
                   check_file.delay(task.id)
                   file.status = 'scheduled'
                   file.save()







        if model == 'samples':
            samples = request.POST.getlist('samples')
            for sample_id in samples:
                sample = ProjectSample.objects.get(pk=sample_id)
                if action == "delete":
                    sample.delete()

            
    return redirect('projects-view', project_id=project_id)
Example #8
0
def index(request):

    query = ''
    args = []

    if request.method == 'POST':
        print(request.POST)
        files = request.POST.getlist('files')
        action = request.POST['action']
        query = request.POST['query']
        # print('query', query)
        if action == 'analysis':
            request.session['files'] = files
            return redirect('analysis-create')

        for file_id in files:

            # file = File.objects.get(pk=file_id)
            if request.user.is_staff:
                file = get_object_or_404(File, pk=file_id)
            else:
                file = get_object_or_404(File, pk=file_id, user=request.user)

            if action == "delete":
                file.delete()
            else:
                task_manifest = {}
                task_manifest['file'] = file.id
                task_manifest['action'] = action
                task = Task(user=request.user)

                task.manifest = task_manifest
                task.status = 'new'
                task.action = action
                task.user = request.user
                task.save()

                if action == "check":
                    check_file.delay(task.id)
                if action == "compress":
                    compress_file.delay(task.id)
                file.status = 'scheduled'
                file.save()

        status = request.POST.getlist('status')

        print('status', status)

        if len(status[0]) > 0:
            args.append(Q(status__in=status))

        extension = request.POST.getlist('extension')

        if len(extension[0]) > 0:
            print('extension', extension)
            args.append(Q(extension__in=extension))

        print('args', args)

    # Or the Q object with the ones remaining in the list
    if request.method == 'GET':
        print(request.GET)
        if 'orderby' in request.GET:
            orderby = request.GET['orderby'][0]
            order = request.GET['order'][0]
            if order == 'desc':
                order_string = '-{}'.format(orderby)
            else:
                order_string = orderby
        else:
            order_string = 'name'

    if request.user.is_staff:  #status='scheduled' size=0
        files = File.objects.filter(location__icontains=query,
                                    *args).order_by('sample')  #size
    else:
        files = File.objects.filter(user=request.user).order_by(order_string)

    files = File.objects.all().order_by('-id')

    files_summary = {}
    files_summary['status'] = dict(
        Counter(files.values_list('status', flat=True)))
    files_summary['file_type'] = dict(
        Counter(files.values_list('file_type', flat=True)))
    files_summary['extension'] = dict(
        Counter(files.values_list('extension', flat=True)))
    # files_summary['total_size'] = sum(files.values_list('size', flat=True))
    files_summary = 0
    context = {
        'query': query,
        'files': files,
        'n_files': len(files),
        'files_summary': files_summary
    }

    return render(request, 'files/index.html', context)
Example #9
0
def upload(request):
    if request.method == 'POST':
        form = UploadForm(request.POST, request.FILES)

        if form.is_valid():

            if request.user.is_authenticated:
                file = File.objects.create(user=request.user, status='new')
            else:
                file = File.objects.create(user=None, status='new')

            file.local_file = request.FILES.get('file')

            print('file')
            print(request.FILES.get('file'))

            filename = file.local_file.name.split('.')
            new_filename = []
            for tag in filename:
                new_filename.append(slugify(tag))

            file.local_file.name = ".".join(new_filename)

            # print('file.location ', file.location)

            #get name from inside vcf file
            #clean this...
            file.name = str(os.path.splitext(file.local_file.name)[0]).replace(
                '.vcf', '').replace('.gz', '').replace('.rar', '').replace(
                    '.zip', '').replace('._', ' ').replace('.', ' ')

            # file.shared_with_groups = form.cleaned_data['shared_with_groups']
            # file.shared_with_groups.set(form.cleaned_data['shared_with_groups'])

            file.save()

            f = file.local_file

            #fix permissions
            #os.chmod("%s/genomes/%s/" % (settings.BASE_DIR, file.user), 0777)

            if request.user.is_authenticated:
                file_path = "%s/media/%s/%s" % (settings.BASE_DIR,
                                                slugify(file.user), file.id)
            else:
                file_path = "%s/media/public/%s" % (settings.BASE_DIR, file.id)
            os.chmod(file_path, 0o777)

            file.location = '/' + file.local_file.url

            # AnnotateVariants.delay(file.id)

            task_manifest = {}
            task_manifest['file'] = file.id
            task_manifest['action'] = 'check'
            task = Task(user=request.user)

            task.manifest = task_manifest
            task.status = 'new'
            task.action = 'check'
            task.save()

            check_file.delay(task.id)

            file.status = 'scheduled'
            file.save()

            data = {
                'files': [{
                    'deleteType': 'DELETE',
                    'name': file.name,
                    'url': '',
                    'thumbnailUrl': '',
                    'type': 'image/png',
                    'deleteUrl': '',
                    'size': f.size
                }]
            }

            response = JSONResponse(data, mimetype=response_mimetype(request))
            response['Content-Disposition'] = 'inline; filename=files.json'
            return response
        else:
            print(form.errors)

    else:
        form = UploadForm()

    return render(request, 'files/upload.html', {'form': form})
Example #10
0
def index(request):

    query  = ''
    args = []

    if request.method == 'POST':

        # form = FileForm(request.POST)
        # if form.is_valid():
        #     pass

        # print(request.POST)
        files = request.POST.getlist('files')
        action = request.POST['action']
        query = request.POST['query']
        order_string ='sample'
        # print('query', query)
        if action == 'analysis':
            request.session['files'] = files
            return redirect('analysis-create')
        
        for file_id in files:

            # file = File.objects.get(pk=file_id)
            if request.user.is_staff:
                file = get_object_or_404(File, pk=file_id)
            else:
                file = get_object_or_404(File, pk=file_id, user=request.user)

            if action == "delete":
                file.delete()
            else:
                task_manifest = {}
                task_manifest['file'] = file.id
                task_manifest['action'] = action
                task = Task(user=request.user)
                
                task.manifest = task_manifest
                task.status = 'new'
                task.action = action
                task.user = request.user
                task.save()

                if action == "check":
                    check_file.delay(task.id)                
                if action == "compress":
                    compress_file.delay(task.id)
                file.status = 'scheduled'
                file.save()

        status = request.POST.getlist('status')
        
        print('status', status)

        if len(status[0]) > 0:
            args.append(Q(status__in=status))

        extension = request.POST.getlist('extension')

        if len(extension[0]) > 0:
            print('extension',extension)
            args.append(Q(extension__in=extension))

        print('args', args)

    else:
        # form = FileForm()
        print(request.GET)
        if 'orderby' in request.GET:
            orderby = request.GET['orderby']
            order = request.GET['order'][0]
            if order == 'desc':
                order_string = '-{}'.format(orderby)
            else:
                order_string = orderby
        else:
            order_string = 'name'

    # print(order_string, 'order_string')
    
    if request.user.is_staff:#status='scheduled' size=0
        # files = File.objects.filter(location__icontains=query, *args).order_by(order_string)#size
        files = File.objects.filter(location__regex=query, *args).order_by(order_string)#size
        
    else:
        files = File.objects.filter(user=request.user).order_by(order_string)
    #sample__isnull=True
    # files = File.objects.filter(*args).order_by('-id')

    files_summary = {}
    files_summary['status'] = dict(Counter(files.values_list('status', flat=True)))
    files_summary['file_type'] = dict(Counter(files.values_list('file_type', flat=True)))
    files_summary['extension'] = dict(Counter(files.values_list('extension', flat=True)))
    # files_summary['total_size'] = sum(files.values_list('size', flat=True))
    # files_summary = 0
    filetypes = []
    n_files = []
    for filetype in files_summary['extension']:
        # print(filetype, files_summary['extension'][filetype])
        filetypes.append(filetype)
        n_files.append(files_summary['extension'][filetype])
    files_summary['filetypes'] = filetypes
    files_summary['n_files'] = n_files


    context = {
        # 'form': form,
        'query':query,
        'files':files,
        'n_files':len(files),
        'files_summary':files_summary
    }

    return render(request, 'files/index.html', context)
Example #11
0
def upload(request):
    if request.method == 'POST':
        form = UploadForm(request.POST, request.FILES)
        
        if form.is_valid():
            
            if request.user.is_authenticated:
                file = File.objects.create(user=request.user, status='new')
            else:
                file = File.objects.create(user=None, status='new')

            file.local_file = request.FILES.get('file')
            
            print('file')
            print(request.FILES.get('file'))

            filename = file.local_file.name.split('.')
            new_filename = []
            for tag in filename:
                new_filename.append(slugify(tag))

            file.local_file.name = ".".join(new_filename)

            

            # print('file.location ', file.location)

            #get name from inside vcf file
            #clean this...
            file.name= str(os.path.splitext(file.local_file.name)[0]).replace('.vcf','').replace('.gz','').replace('.rar','').replace('.zip','').replace('._',' ').replace('.',' ')

            # file.shared_with_groups = form.cleaned_data['shared_with_groups']
            # file.shared_with_groups.set(form.cleaned_data['shared_with_groups'])
            
            file.save()
            
            f = file.local_file

            #fix permissions
            #os.chmod("%s/genomes/%s/" % (settings.BASE_DIR, file.user), 0777)

            if request.user.is_authenticated:
                file_path = "%s/media/%s/%s" % (settings.BASE_DIR, slugify(file.user), file.id)
            else:
                file_path = "%s/media/public/%s" % (settings.BASE_DIR, file.id)
            os.chmod(file_path, 0o777)

            file.location = '/'+file.local_file.url

            # AnnotateVariants.delay(file.id)
            
            task_manifest = {}
            task_manifest['file'] = file.id
            task_manifest['action'] = 'check'
            task = Task(user=request.user)
            
            task.manifest = task_manifest
            task.status = 'new'
            task.action = 'check'
            task.save()

            check_file.delay(task.id)

            file.status = 'scheduled'
            file.save()

            data = {'files': [{'deleteType': 'DELETE', 'name': file.name, 'url': '', 'thumbnailUrl': '', 'type': 'image/png', 'deleteUrl': '', 'size': f.size}]}

            response = JSONResponse(data, mimetype=response_mimetype(request))
            response['Content-Disposition'] = 'inline; filename=files.json'
            return response
        else:
            print(form.errors)

    else:
        form = UploadForm()

    return render(request, 'files/upload.html', {'form':form})