Completed
Pull Request — devel (#90)
by Paolo
06:31
created

biosample.management.commands.patch_orphan_biosamples   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 114
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 8
eloc 61
dl 0
loc 114
rs 10
c 0
b 0
f 0

2 Functions

Rating   Name   Duplication   Size   Complexity  
A create_biosample_submission() 0 12 1
A update_submission_status() 0 7 2

1 Method

Rating   Name   Duplication   Size   Complexity  
B Command.handle() 0 63 5
1
#!/usr/bin/env python3
2
# -*- coding: utf-8 -*-
3
"""
4
Created on Tue May 26 17:21:28 2020
5
6
@author: Paolo Cozzi <[email protected]>
7
"""
8
9
import logging
10
11
from pyUSIrest.usi import Root
12
from pyUSIrest.exceptions import USIDataError
13
14
from django.core.management import BaseCommand
15
16
from biosample.helpers import get_manager_auth
17
from biosample.models import OrphanSubmission
18
from biosample.tasks.cleanup import get_orphan_samples
19
from common.constants import SUBMITTED, ERROR
20
21
# Get an instance of a logger
22
logger = logging.getLogger(__name__)
23
24
25
def create_biosample_submission(root, team):
26
    logger.debug("Creating a new submission")
27
28
    usi_team = root.get_team_by_name(team.name)
29
    usi_submission = usi_team.create_submission()
30
31
    submission = OrphanSubmission(
32
        usi_submission_name=usi_submission.name)
33
    submission.save()
34
35
    logger.debug("Created submission %s" % submission)
36
    return usi_submission, submission
37
38
39
def update_submission_status(submission):
40
    """Set SUBMITTED status to submission"""
41
42
    # update submission status
43
    if submission:
44
        submission.status = SUBMITTED
45
        submission.save()
46
47
48
class Command(BaseCommand):
49
    help = 'Get a JSON for biosample submission'
50
51
    def handle(self, *args, **options):
52
        # call commands and fill tables.
53
        logger.info("Called patch_orphan_samples")
54
55
        # get a new auth object
56
        auth = get_manager_auth()
57
58
        # get a new root object
59
        root = Root(auth)
60
61
        # some variables
62
        count = 1
63
        old_team = None
64
        usi_submission = None
65
        submission = None
66
67
        # iterate among orphan sample, create a BioSample submission
68
        # and then add biosample for patch
69
        for record in get_orphan_samples():
70
            (data, team, sample) = (
71
                record['data'], record['team'], record['sample'])
72
73
            if count % 100 == 0 or old_team != team:
74
                update_submission_status(submission)
75
76
                # create a new Biosample submission
77
                usi_submission, submission = create_biosample_submission(
78
                    root, team)
79
80
                # reset count and old_team
81
                count = 1
82
                old_team = team
83
84
            # add sample to submission
85
            try:
86
                logger.info("Submitting '%s'" % data['accession'])
87
                usi_submission.create_sample(data)
88
89
            except USIDataError as error:
90
                logger.error(
91
                    "Can't remove '%s': Error was '%s'" % (
92
                        data['accession'], str(error)))
93
                sample.status = ERROR
94
                sample.save()
95
                continue
96
97
            # update sample status and track submission
98
            sample.status = SUBMITTED
99
            sample.submission = submission
100
            sample.save()
101
102
            # update submission count
103
            submission.samples_count = count
104
            submission.save()
105
106
            # new element
107
            count += 1
108
109
        # update the last submission status
110
        update_submission_status(submission)
111
112
        # end the script
113
        logger.info("patch_orphan_samples ended")
114