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