Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def onChild(pid, fromparent, toparent):
try:
response = self._server._marshaled_dispatch(data)
self._sendResponse(response)
line = _str(fromparent.readline())
toparent.write(_b('done\n'))
toparent.flush()
except:
logger(name='pathos.xmlrpc', level=30).error(print_exc_info())
os._exit(0)
and derives from python's base HTTP request handler. Intended to
handle requests for a `pathos.XMLRPCServer`.
"""
__all__ = ['XMLRPCRequestHandler']
import os
import xmlrpclib
from BaseHTTPServer import BaseHTTPRequestHandler
from pathos import logger
from pathos.util import print_exc_info, spawn2
class XMLRPCRequestHandler(BaseHTTPRequestHandler):
''' create a XML-RPC request handler '''
_debug = logger(name="pathos.xmlrpc", level=30) # logging.WARN
def do_POST(self):
""" Access point from HTTP handler """
def onParent(pid, fromchild, tochild):
self._server._registerChild(pid, fromchild)
tochild.write('done\n')
tochild.flush()
def onChild(pid, fromparent, toparent):
try:
response = self._server._marshaled_dispatch(data)
self._sendResponse(response)
line = fromparent.readline()
toparent.write('done\n')
command -- command string to be executed
host -- hostname of execution target [default = None (i.e. run locally)]
bg -- run as background process? [default = True]
'''
#XXX: options, background, stdin can be set w/ kwds (also name, launcher)
bg = bool(bg) # overrides 'background'
if host in [None, '']:
from pathos.connection import Pipe
launcher = Pipe(**kwds)
launcher(command=command, background=bg)
else:
from pathos.secure import Pipe
opt = kwds.pop('options', '-q')
launcher = Pipe(**kwds)
launcher(options=opt, command=command, host=host, background=bg)
pathos.logger().info('executing {%s}', launcher.message)
launcher.launch()
#response = launcher.response()
#launcher.kill()
#return response
return launcher
profile: file to configure the user's environment [default='.bash_profile']
'''
if host is None: #XXX: and...?
profile = ''
else:
profile = 'source %s; ' % profile
file = '~/bin/%s.py' % server #XXX: _should_ be on the $PATH
if port is None: port = randomport(host)
command = "%s -p %s" % (file,port)
rserver = execute(command, host, bg=True)
response = rserver.response()
pathos.logger().info('response = %r', response)
if response in ['', None]: #XXX: other responses allowed (?)
pass
else: #XXX: not really error checking...
pathos.logger().error('invalid response = %r', response)
from time import sleep
delay = 2.0
sleep(delay)
return rserver
def randomport(host=None):
'''select a open port on a (possibly) remote host
Inputs:
host -- hostname on which to select a open port
'''
from pathos.portpicker import randomport
if not host:
return randomport()
from pathos.secure import Pipe
from pathos.portpicker import __file__ as src
# make sure src is a .py file, not .pyc or .pyo
src = src.rstrip('co')
launcher = Pipe() #XXX: use pox.which / which_python?
launcher(command='python', host=host, background=False, stdin=open(src))
pathos.logger().info('executing {python <%s} on %s', src, host)
launcher.launch()
try:
rport = int(launcher.response())
except:
from pathos.secure import TunnelException
raise TunnelException("failure to pick remote port")
# return remote port number
return rport