Example #1
0
def pvw_start_session(request):
    """
        pvw_start_session provide the inizialization of paraviewweb_xmlrpc.py process
    """
    try:
        if request.method == 'GET' and request.user.is_authenticated():
            pvw_instance = None
            try:
                pvw_instance = ParaviewInstance.objects.get(user=request.user, deletion_time__exact=None)
                if request.session[str(pvw_instance.pid)].poll() is None:
                    request.session[str(pvw_instance.pid)].kill()
                    request.session[str(pvw_instance.pid)].wait()
                    pvw_instance.deletion_time = datetime.now()
                    pvw_instance.save()
                    raise Exception
            except Exception,e:
                if pvw_instance is not None:
                    pvw_instance.deletion_time = datetime.now()
                    pvw_instance.save()
                port = settings.PARAVIEWWEB_PORT  + ParaviewInstance.objects.filter(deletion_time__isnull=True).count()
                pvw_proces = subprocess.Popen(
                    [settings.PARAVIEW_PYTHON_BIN,
                     settings.PARAVIEWWEB_SERVER,
                    "-p "+str(port)],
                    #stdout=subprocess.PIPE, stderr=subprocess.PIPE
                )
                pvw_instance = ParaviewInstance(pid=pvw_proces.pid, port=port, user=request.user)
                pvw_instance.save()
                request.session[str(pvw_proces.pid)] = pvw_proces
                pvw_render_connector = ServerProxy('http://127.0.0.1:%s/api' % pvw_instance.port)
                #Wait that the process run.
                while True:
                    try:
                        result = pvw_render_connector.ready()
                        break
                    except Exception, e:
                        pass
                pass

            return HttpResponse(content='TRUE')