Passed
Pull Request — master (#44)
by Paolo
05:38
created

biosample.management.commands.biosample_submit   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 90
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 3
eloc 42
dl 0
loc 90
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A Command.add_arguments() 0 5 1
A Command.handle() 0 47 2
1
#!/usr/bin/env python3
2
# -*- coding: utf-8 -*-
3
"""
4
Created on Thu Jun 14 15:30:47 2018
5
6
@author: Paolo Cozzi <[email protected]>
7
8
Send a submission as biosample manager user
9
10
"""
11
12
import logging
13
14
from django.core.management import BaseCommand
15
16
import pyUSIrest
17
18
from common.constants import SUBMITTED
19
from image_app.models import Submission
20
21
from biosample.helpers import get_manager_auth
22
from biosample.models import Submission as USISubmission
23
from biosample.tasks.submission import SplitSubmissionHelper, SubmissionHelper
24
25
26
# Get an instance of a logger
27
logger = logging.getLogger(__name__)
28
29
# change the default level for pyUSIrest logging
30
logging.getLogger('pyUSIrest.auth').setLevel(logging.INFO)
31
logging.getLogger('pyUSIrest.client').setLevel(logging.INFO)
32
33
34
class Command(BaseCommand):
35
    help = 'Submit to biosample a specific submission'
36
37
    def add_arguments(self, parser):
38
        parser.add_argument(
39
            '--submission',
40
            required=True,
41
            type=int)
42
43
    def handle(self, *args, **options):
44
        # call commands and fill tables.
45
        logger.info("Starting biosample_submission...")
46
47
        # get a submission from submission id
48
        submission_id = options['submission']
49
        submission_obj = Submission.objects.get(pk=submission_id)
50
51
        # split data in submission objects like biosample.tasks does
52
        submission_data_helper = SplitSubmissionHelper(submission_obj)
53
54
        # iterate over animal and samples
55
        submission_data_helper.process_data()
56
57
        # get an auth object
58
        auth = get_manager_auth()
59
60
        # get root object
61
        logger.debug("getting biosample root")
62
        root = pyUSIrest.client.Root(auth=auth)
63
64
        usi_submissions = USISubmission.objects.filter(
65
            pk__in=submission_data_helper.submission_ids)
66
67
        # ok get all biosample.model.Submission and iterate over them
68
        for usi_submission in usi_submissions:
69
70
            # define a submission helper object
71
            submission_helper = SubmissionHelper(
72
                submission_id=usi_submission.id)
73
74
            # assign class attributes
75
            submission_helper.auth = auth
76
            submission_helper.root = root
77
78
            # then call methods
79
            submission_helper.start_submission()
80
            submission_helper.add_samples()
81
            submission_helper.mark_success()
82
83
        # update submission status
84
        # TODO: use a biosample.tasks or helper method to do this
85
        submission_obj.status = SUBMITTED
86
        submission_obj.message = "Waiting for biosample validation"
87
        submission_obj.save()
88
89
        logger.info("Submission completed!")
90