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
|
|
|
|