Example #1
0
class Command(BaseCommand):
    help = 'Update task status and verification details given the contents of a CSV'
    sde_plugin = None

    def configure(self):
        self.sde_plugin = PlugInExperience(self.config)
        self.config.opts.add('csv_file', "CSV file")

    def sde_connect(self):
        if not self.sde_plugin:
            raise Error('Requires initialization')
        try:
            self.sde_plugin.connect()
        except APIError as err:
            raise Error('Unable to connect to SD Elements. Please review URL, id,'
                        ' and password in configuration file. Reason: %s' % (str(err)))

    def handle(self):
        if not self.config['csv_file']:
            raise UsageError('Missing csv_file')

        self.sde_connect()

        with open(self.config['csv_file'], 'r') as csvfile:
            reader = csv.DictReader(csvfile)

            if not reader.fieldnames:
                raise Error('Empty CSV file')

            # Remove extra white space in headings
            for i in range(len(reader.fieldnames)):
                reader.fieldnames[i] = reader.fieldnames[i].strip()

            if len(reader.fieldnames) <= 1:
                raise Error('Please make sure CSV file has task id field and at least one more field.')

            try:
                for row in reader:
                    if 'task id' not in reader.fieldnames:
                        raise Error('Please make sure task id field exists.')
                    task_id = row['task id']
                    if 'verification note' in reader.fieldnames and 'verification status' not in reader.fieldnames:
                        raise Error('Please make sure a verification status field exists along with verification note.')
                    if 'task status' in reader.fieldnames:
                        status = row['task status']
                        self.sde_plugin.update_task_status(task_id, status)
                    if 'task note' in reader.fieldnames:
                        text_note = row['task note']
                        self.sde_plugin.add_task_text_note(task_id, text_note)
                    if 'verification status' in reader.fieldnames:
                        verification_status = row['verification status']
                        if 'verification note' in reader.fieldnames:
                            finding_ref = row['verification note']
                        else:
                            finding_ref = ''
                        self.sde_plugin.add_manual_analysis_note(task_id, verification_status, finding_ref)

            except csv.Error, csv_err:
                raise Error('Unable to parse CSV file, line %d: %s' % (reader.line_num, csv_err))

        return True