Ejemplo n.º 1
0
def getSandboxProcess(subenvironment, solutions, usePipe=False):
    masArgs = {
        'name': 'subenv_%d' % (subenvironment.pk, ),
        'infra': "Centralised",
        'env': "c4jason.CartagoEnvironment",
        # 'env': "Env(2, 2000)",
        'agents': [],
    }
    solutionFiles = {
        'agents': [],
        'artifacts': [],
        'orgs': [],
    }
    specs = []
    for solution in solutions:
        envUser = solution.envUser
        agents, artifacts, orgs = SolutionSpecification.parse_repair_xml(
            solution)
        specs.append(agents)

        solutionFiles['agents'].append(solution.agents.path)
        if artifacts:
            solutionFiles['artifacts'].append(artifacts)
        if orgs:
            solutionFiles['orgs'].append(orgs)
    agents = [elem for row in specs for elem in row]
    # TODO I'm in need of dire refactoring
    pathSuffix = '_s%s.asl' % (subenvironment.id, )
    for agentZip in subenvironment.agent_set.all():
        for masterAgent in get_agent_name_list(agentZip.file.path):
            if masterAgent.endswith(pathSuffix):
                agentName = os.path.splitext(masterAgent)[0]
                agents.append({
                    'arch': 'c4jason.CAgentArch',
                    'name': agentName,
                    'no': agentZip.cardinality
                })
    agents.append({
        'arch': 'c4jason.CAgentArch',
        'name': 'prime_agent_s_%s' % (subenvironment.envType, ),
    })
    masArgs['agents'] = agents

    conn = None
    args = (subenvironment, solutionFiles, masArgs)
    if usePipe:
        conn = Pipe()
        args += (conn[1], )
    return (Process(target=runInSandbox, args=args), conn)
Ejemplo n.º 2
0
def getSandboxProcess(subenvironment, solutions, usePipe=False):
    masArgs = {
        'name': 'subenv_%d' % (subenvironment.pk,),
        'infra': "Centralised",
        'env': "c4jason.CartagoEnvironment",
        # 'env': "Env(2, 2000)",
        'agents': [ ],
    }
    solutionFiles = {
        'agents': [ ],
        'artifacts': [ ],
        'orgs': [ ],
    }
    specs = [ ]
    for solution in solutions:
        envUser = solution.envUser
        agents, artifacts, orgs = SolutionSpecification.parse_repair_xml(solution)
        specs.append(agents)

        solutionFiles['agents'].append(solution.agents.path)
        if artifacts:
            solutionFiles['artifacts'].append(artifacts)
        if orgs:
            solutionFiles['orgs'].append(orgs)
    agents = [ elem for row in specs for elem in row ]
    # TODO I'm in need of dire refactoring
    pathSuffix = '_s%s.asl' % (subenvironment.id,)
    for agentZip in subenvironment.agent_set.all():
        for masterAgent in get_agent_name_list(agentZip.file.path):
            if masterAgent.endswith(pathSuffix):
                agentName = os.path.splitext(masterAgent)[0]
                agents.append({
                    'arch': 'c4jason.CAgentArch',
                    'name': agentName,
                    'no' : agentZip.cardinality
                })
    agents.append({
        'arch': 'c4jason.CAgentArch',
        'name': 'prime_agent_s_%s' % (subenvironment.envType,),
    })
    masArgs['agents'] = agents

    conn = None
    args = (subenvironment, solutionFiles, masArgs)
    if usePipe:
        conn = Pipe()
        args += (conn[1],)
    return (Process(target=runInSandbox, args=args), conn)
Ejemplo n.º 3
0
def index_common(request, postSolution=None, postSubEnv=None, others=False):
    is_post = (request.method == 'POST')
    user = request.user
    envUser = get_object_or_404(EnvUser, user=user)

    userSolutions = Solution.objects.filter(envUser=envUser)
    subEnvironments = SubEnvironment.objects.get_solved_by_user(user)
    unsubEnvironments = SubEnvironment.objects.get_unsolved_by_user(user)

    agentFilter = {}
    if not user.is_superuser:
        agentFilter['envUser__user'] = user
    agentQueryset = EnvAgent.objects.filter(**agentFilter)

    active_subenv = None
    active_solution = None

    allSolutions = []
    for subenv_index, subEnvironment in enumerate(subEnvironments):
        subenvs = SubEnvironment.objects.filter(pk=subEnvironment.pk)
        SolutionForm = make_special_solution_form(envUser,
                                                  subenvs,
                                                  singleSubEnv=True)
        solutions = userSolutions.filter(subEnvironment__in=subenvs)

        forms = []
        for soln_index, solution in enumerate(solutions):
            SolutionFormSet = make_single_solution_formset(SolutionForm,
                                                           solution,
                                                           extra=0)
            if is_post and solution == postSolution:
                formset = SolutionFormSet(request.POST, request.FILES)
                if formset.is_valid():
                    return handle_solution_formset(
                        formset, {
                            'envUser': envUser,
                            'subEnvironment': subEnvironment,
                        })
                else:
                    active_subenv = {
                        'id': subEnvironment.id,
                        'index': subenv_index,
                    }
                    active_solution = soln_index
            else:
                formset = SolutionFormSet()

            agentFiles = get_agent_name_list(solution.agents.path)
            choices = [(filename, filename) for filename in agentFiles]
            AgentForm = make_custom_agent_form({
                'queryset': agentQueryset,
            }, {
                'choices': choices,
            })

            config = solution.get_config_filepath()
            aaData = SolutionSpecification.parseAgentMapping(config)
            rowIds = [row[0][0] for row in aaData]

            forms.append({
                'form': formset,
                'agent_form': AgentForm(),
                'obj': solution,
                'is_novel': False,
                'table': {
                    'aaData': json.dumps(aaData),
                    'rowIds': json.dumps(rowIds),
                },
            })

        if is_post and subEnvironment == postSubEnv:
            form = SolutionForm(request.POST, request.FILES)
            if form.is_valid():
                return handle_solution_form(form, {
                    'envUser': envUser,
                    'subEnvironment': subEnvironment,
                })
            else:
                active_subenv = {
                    'id': subEnvironment.id,
                    'index': subenv_index,
                }
                active_solution = len(solutions)
        else:
            form = SolutionForm()
        forms.append({
            'form': form,
            'obj': subEnvironment,
            'is_novel': True,
        })

        allSolutions.append({
            'subEnvironment': subEnvironment,
            'forms': forms,
        })

    SolutionFormSet = make_solution_formset(envUser, userSolutions,
                                            unsubEnvironments)
    if is_post and others:
        othersFormset = SolutionFormSet(request.POST, request.FILES)
        if othersFormset.is_valid():
            return handle_solution_formset(othersFormset, {
                'envUser': envUser,
            },
                                           are_novel=True)
        else:
            active_subenv = {
                'index': len(subEnvironments),
            }
    else:
        othersFormset = SolutionFormSet()

    AgentForm = make_custom_agent_form({
        'queryset': agentQueryset,
    }, {
        'choices': [],
    })

    return render_to_response('solution/index.html', {
        'allSolutions': allSolutions,
        'othersFormset': othersFormset,
        'agentForm': AgentForm(),
        'active_subenv': active_subenv,
        'active_solution': active_solution,
    },
                              context_instance=RequestContext(request))