def processReplicaScripts(scriptsFile, replica):
    try:
        reader = csv.DictReader(scriptsFile, delimiter='\t')
    except (KeyboardInterrupt, SystemExit):
        raise
    except Exception as e:
        if hasattr(e, 'message'):
            return True, f'{e.message}', 0, 0
        else:
            return True, f'{e}', 0, 0
    # expected CSV structure:
    # Script    Step    Slot    Task Type   Oracle  Value
    last_script = None
    last_step = None
    last_script_num = 0
    last_step_num = 0
    _candidates = 0
    try:
        with transaction.atomic():
            for row in reader:
                # print(row['Script'], row['Step'], row['Slot'], row['Task Type'], row['Oracle'], row['Value'])
                _script, _step, _slot, _tasktype, _oracle, _value = row['Script'], row['Step'], row['Slot'], row['Task Type'], row['Oracle'], row['Value']
                if last_script_num != _script:
                    last_script = Script(replica=replica, script_num=_script, status=Script.STATUS_FREE, contactme=False, withdraw=False)
                    last_script.save()
                    last_script_num = _script
                    last_step = None
                    last_step_num = 0
                    _candidates = _candidates + 1
                if last_step_num != _step:
                    last_step = Step(script=last_script, step_num=_step, tasktype=_tasktype, oracle=_oracle)
                    last_step.save()
                    last_step_num = _step
                component = Component(step=last_step, slot_num=_slot, tasktype=_tasktype, value=_value)
                component.save()
    except KeyError:
        # rollback changes
        replica.scripts.all().delete()
        return True, 'Badly formed CSV file \n(expected: Script\tStep\tSlot\tTask Type\tOracle\tValue)', 0, 0
    except (KeyboardInterrupt, SystemExit):
        # rollback changes
        replica.scripts.all().delete()
        raise
    except Exception as e:
        # rollback changes
        replica.scripts.all().delete()
        if hasattr(e, 'message'):
            return True, f'{e.message}', 0, 0
        else:
            return True, f'{e}', 0, 0
    return False, '', _candidates, last_step_num
Exemple #2
0
def newscript_view(request, *args, **kwargs):
    if request.method == 'POST':
        form = NewScriptForm(request.POST)
        print(f'received data: {request.POST}')
        print(f'new form: {form}')
        if form.is_valid():
            print('form is valid')
            save_script = Script(name=request.POST['name'],
                                 description=request.POST['description'],
                                 content=request.POST['content'],
                                 user=request.user)
            print(f'script: {save_script}')
            save_script.save()
            print('script saved')
            return redirect(scriptdash_view)
        else:
            return render(request, 'newscript.html', {'form': form})
    elif request.method == 'GET':
        form = NewScriptForm()
    else:
        return HttpResponse(status=404)
    return render(request, 'newscript.html', {'form': form})