Example #1
0
 def connect_tcp(self, host, port, timeout = None):
     yield self.reactor.started
     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     hostaddr = yield self.resolve(host)
     trns = ConnectingSocketTransport(self.reactor, sock, (hostaddr, port))
     trns2 = yield trns.connect(timeout)
     rreturn(trns2)
Example #2
0
 def connect_tcp(self, host, port, timeout=None):
     yield self.reactor.started
     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     hostaddr = yield self.resolve(host)
     trns = ConnectingSocketTransport(self.reactor, sock, (hostaddr, port))
     trns2 = yield trns.connect(timeout)
     rreturn(trns2)
Example #3
0
 def connect_udp(self, host, port, broadcast=False):
     yield self.reactor.started
     sock = self._open_udp_sock("0.0.0.0", 0, broadcast)
     hostaddr = yield self.resolve(host)
     trns = ConnectingSocketTransport(self.reactor, sock, (hostaddr, port))
     trns2 = yield trns.connect()
     rreturn(trns2)
Example #4
0
 def listen_tcp(self, port, host="0.0.0.0", backlog=40):
     yield self.reactor.started
     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     sock.setblocking(False)
     sock.bind((host, port))
     sock.listen(backlog)
     rreturn(ListeningSocketTransport(self.reactor, sock))
Example #5
0
 def connect_udp(self, host, port, broadcast = False):
     yield self.reactor.started
     sock = self._open_udp_sock("0.0.0.0", 0, broadcast)
     hostaddr = yield self.resolve(host)
     trns = ConnectingSocketTransport(self.reactor, sock, (hostaddr, port))
     trns2 = yield trns.connect()
     rreturn(trns2)
Example #6
0
 def wrap_ssl_client(self,
                     transport,
                     keyfile=None,
                     certfile=None,
                     ca_certs=None,
                     cert_reqs=None,
                     ssl_version=None):
     yield self.reactor.started
     if ssl_version is None:
         ssl_version = ssl.PROTOCOL_SSLv23
     if cert_reqs is None:
         cert_reqs = ssl.CERT_NONE
     sslsock = ssl.wrap_socket(transport.fileobj,
                               keyfile=keyfile,
                               certfile=certfile,
                               ca_certs=ca_certs,
                               cert_reqs=cert_reqs,
                               ssl_version=ssl_version,
                               server_side=False,
                               do_handshake_on_connect=False,
                               suppress_ragged_eofs=True)
     transport.detach()
     handshaker = SslHandshakingTransport(self.reactor, sslsock)
     ssltrns = yield handshaker.handshake()
     rreturn(ssltrns)
Example #7
0
    def run(self,
            args,
            input=None,
            retcodes=(0, ),
            cwd=None,
            env=None,
            shell=False):
        proc = yield self.spawn(args, cwd, env, shell)

        if input:

            @reactive
            def write_all_stdin():
                yield proc.stdin.write(input)
                yield proc.stdin.close()

            self.reactor.call(write_all_stdin)
        else:
            yield proc.stdin.close()

        stdout_dfr = proc.stdout.read_all()
        stderr_dfr = proc.stderr.read_all()
        rc = yield proc.wait()
        stdout_data = yield stdout_dfr
        stderr_data = yield stderr_dfr

        if retcodes and rc not in retcodes:
            raise ProcessExecutionError("unexpected return code", rc,
                                        stdout_data, stderr_data)
        else:
            rreturn((rc, stdout_data, stderr_data))
Example #8
0
 def listen_tcp(self, port, host = "0.0.0.0", backlog = 40):
     yield self.reactor.started
     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     sock.setblocking(False)
     sock.bind((host, port))
     sock.listen(backlog)
     rreturn(ListeningSocketTransport(self.reactor, sock))
Example #9
0
 def connect_ssl(self, host, port, timeout = None, keyfile = None, 
         certfile = None, ca_certs = None, cert_reqs = None, ssl_version = None):
     trns = yield self.connect_tcp(host, port, timeout)
     ssltrns = yield self.wrap_ssl_client(trns, keyfile = keyfile, 
         certfile = certfile, cert_reqs = cert_reqs, ca_certs = ca_certs,
         ssl_version = ssl_version)
     rreturn(ssltrns)
Example #10
0
 def pipe(self):
     yield self.reactor.started
     rfd, wfd = os.pipe()
     rf = os.fdopen(rfd, "r")
     wf = os.fdopen(wfd, "w")
     rtrns = PipeTransport(self.reactor, rf, "r")
     wtrns = PipeTransport(self.reactor, wf, "w")
     rreturn((rtrns, wtrns))
Example #11
0
 def spawn(self, args, cwd = None, env = None, shell = False):
     yield self.reactor.started
     self._install_child_handler()
     p = subprocess.Popen(args, stdin = subprocess.PIPE, stdout = subprocess.PIPE,
         stderr = subprocess.PIPE, cwd = cwd, env = env, shell = shell)
     proc = Process(self.reactor, p, args)
     self.processes[proc.pid] = proc
     rreturn(proc)
Example #12
0
 def pipe(self):
     yield self.reactor.started
     rfd, wfd = os.pipe()
     rf = os.fdopen(rfd, "r")
     wf = os.fdopen(wfd, "w")
     rtrns = PipeTransport(self.reactor, rf, "r")
     wtrns = PipeTransport(self.reactor, wf, "w")
     rreturn((rtrns, wtrns))
Example #13
0
 def listen_tcp(self, port, host="0.0.0.0", backlog=40):
     yield self.reactor.started
     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     if sys.platform != "win32":
         sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
     sock.bind((host, port))
     sock.listen(backlog)
     trns = ListeningSocketTransport(self.reactor, sock)
     rreturn(trns)
Example #14
0
 def listen_tcp(self, port, host = "0.0.0.0", backlog = 40):
     yield self.reactor.started
     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     if sys.platform != "win32":
         sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
     sock.bind((host, port))
     sock.listen(backlog)
     trns = ListeningSocketTransport(self.reactor, sock)
     rreturn(trns)
Example #15
0
 def open(self, filename, mode="r"):
     yield self.reactor.started
     CONV = {
         "r": "r",
         "w": "w",
         "a": "w",
         "r+": "rw",
         "w+": "rw",
         "a+": "rw"
     }
     mode2 = CONV[mode.lower().replace("b", "").replace("t", "")]
     fileobj = open(filename, mode, 0)
     rreturn(FileTransport(self.reactor, fileobj, mode2))
Example #16
0
 def spawn(self, args, cwd=None, env=None, shell=False):
     yield self.reactor.started
     self._install_child_handler()
     p = subprocess.Popen(args,
                          stdin=subprocess.PIPE,
                          stdout=subprocess.PIPE,
                          stderr=subprocess.PIPE,
                          cwd=cwd,
                          env=env,
                          shell=shell)
     proc = Process(self.reactor, p, args)
     self.processes[proc.pid] = proc
     rreturn(proc)
Example #17
0
 def wrap_ssl_server(self, transport, keyfile, certfile, ca_certs = None, 
         cert_reqs = None, ssl_version = None):
     yield self.reactor.started
     if ssl_version is None:
         ssl_version = ssl.PROTOCOL_SSLv23
     if cert_reqs is None:
         cert_reqs = ssl.CERT_NONE
     sslsock = ssl.wrap_socket(transport.fileobj, keyfile = keyfile, 
         certfile = certfile, ca_certs = ca_certs, cert_reqs = cert_reqs, 
         ssl_version = ssl_version, server_side = True, do_handshake_on_connect = False, 
         suppress_ragged_eofs = True)
     transport.detach()
     ssltrns = SslListeninglSocketTransport(self.reactor, sslsock)
     rreturn(ssltrns)
Example #18
0
 def listen_ssl(self,
                port,
                host="0.0.0.0",
                backlog=40,
                keyfile=None,
                certfile=None,
                ca_certs=None,
                cert_reqs=None,
                ssl_version=None):
     listener = yield self.listen_tcp(port, host, backlog)
     ssl_listener = self.wrap_ssl_server(listener,
                                         keyfile,
                                         certfile,
                                         ca_certs=ca_certs,
                                         cert_reqs=cert_reqs,
                                         ssl_version=ssl_version)
     rreturn(ssl_listener)
Example #19
0
 def connect_ssl(self,
                 host,
                 port,
                 timeout=None,
                 keyfile=None,
                 certfile=None,
                 ca_certs=None,
                 cert_reqs=None,
                 ssl_version=None):
     trns = yield self.connect_tcp(host, port, timeout)
     ssltrns = yield self.wrap_ssl_client(trns,
                                          keyfile=keyfile,
                                          certfile=certfile,
                                          cert_reqs=cert_reqs,
                                          ca_certs=ca_certs,
                                          ssl_version=ssl_version)
     rreturn(ssltrns)
Example #20
0
    def connect_tcp(self, host, port, timeout = None):
        def connect_finished(size, overlapped):
            trns_dfr.set(trns)

        yield self.reactor.started
        hostaddr = yield self.resolve(host)
        trns_dfr = ReactorDeferred(self.reactor)
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.setblocking(False)
        sock.bind(('0.0.0.0', 0)) # ConnectEx requires the socket to be bound
        # this is required here to register the new socket with its IOCP
        trns = SocketStreamTransport(self.reactor, sock)
        overlapped = self.reactor._get_overlapped(connect_finished)
        try:
            win32file.ConnectEx(sock.fileno(), (hostaddr, port), overlapped)
        except Exception:
            self.reactor._discard_overlapped(overlapped)
            raise
        yield trns_dfr
        rreturn(trns)
Example #21
0
    def connect_tcp(self, host, port, timeout=None):
        def connect_finished(size, overlapped):
            trns_dfr.set(trns)

        yield self.reactor.started
        hostaddr = yield self.resolve(host)
        trns_dfr = ReactorDeferred(self.reactor)
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.setblocking(False)
        sock.bind(('0.0.0.0', 0))  # ConnectEx requires the socket to be bound
        # this is required here to register the new socket with its IOCP
        trns = SocketStreamTransport(self.reactor, sock)
        overlapped = self.reactor._get_overlapped(connect_finished)
        try:
            win32file.ConnectEx(sock.fileno(), (hostaddr, port), overlapped)
        except Exception:
            self.reactor._discard_overlapped(overlapped)
            raise
        yield trns_dfr
        rreturn(trns)
Example #22
0
    def run(self, args, input = None, retcodes = (0,), cwd = None, env = None,
            shell = False):
        proc = yield self.spawn(args, cwd, env, shell)

        if input:
            @reactive
            def write_all_stdin():
                yield proc.stdin.write(input)
                yield proc.stdin.close()
            self.reactor.call(write_all_stdin)
        else:
            yield proc.stdin.close()

        stdout_dfr = proc.stdout.read_all()
        stderr_dfr = proc.stderr.read_all()
        rc = yield proc.wait()
        stdout_data = yield stdout_dfr
        stderr_data = yield stderr_dfr

        if retcodes and rc not in retcodes:
            raise ProcessExecutionError("unexpected return code", rc, stdout_data, stderr_data)
        else:
            rreturn((rc, stdout_data, stderr_data))
Example #23
0
 def _get_process(self):
     # find an empty worker
     minimal_proc = None
     for proc in self.processes:
         if not proc.queue:
             rreturn(proc)
         if minimal_proc is None or minimal_proc.queue_size() > proc.queue_size():
             minimal_proc = proc
     
     # otherwise, see if we can spawn a new worker
     if len(self.processes) < self.max_processes:
         proc = yield self.process_factory()
         proc2 = PooledProcess(proc)
         self.processes.add(proc2)
         self.reactor.call(self._collector, proc2)
         rreturn(proc2)
     
     # no, just return the minimal woker
     rreturn(minimal_proc)
Example #24
0
    def _get_process(self):
        # find an empty worker
        minimal_proc = None
        for proc in self.processes:
            if not proc.queue:
                rreturn(proc)
            if minimal_proc is None or minimal_proc.queue_size(
            ) > proc.queue_size():
                minimal_proc = proc

        # otherwise, see if we can spawn a new worker
        if len(self.processes) < self.max_processes:
            proc = yield self.process_factory()
            proc2 = PooledProcess(proc)
            self.processes.add(proc2)
            self.reactor.call(self._collector, proc2)
            rreturn(proc2)

        # no, just return the minimal woker
        rreturn(minimal_proc)
Example #25
0
 def from_proc(cls, msg, proc):
     stdout = yield proc.stdout.read_all()
     stderr = yield proc.stderr.read_all()
     rreturn(cls(msg, proc.returncode, stdout, stderr))
Example #26
0
 def joined(self, dfrlist):
     reslist = []
     for dfr in dfrlist:
         res = yield dfr
         reslist.append(res)
     rreturn(reslist)
Example #27
0
 def resolve(self, hostname, family = socket.AF_INET):
     res = yield self.getaddrinfo(hostname, family = family)
     rreturn(res[0][4][0])
Example #28
0
 def open_udp(self, port, host = "0.0.0.0", broadcast = False):
     yield self.reactor.started
     sock = self._open_udp_sock(host, port, broadcast)
     trns = DatagramSocketTransport(self.reactor, sock)
     rreturn(trns)
Example #29
0
 def enqueue(self, func, args, kwargs):
     dfr = yield self.client._call(func, args, kwargs)
     dfr.register(lambda isexc, obj: self.queue.discard(dfr))
     self.queue.add(dfr)
     rreturn(dfr)
Example #30
0
 def _call(self, func, args, kwargs):
     proc = yield self._get_process()
     dfr = yield proc.enqueue(func, args, kwargs)
     rreturn(dfr)
Example #31
0
 def from_proc(cls, msg, proc):
     stdout = yield proc.stdout.read_all()
     stderr = yield proc.stderr.read_all()
     rreturn (cls(msg, proc.returncode, stdout, stderr))
Example #32
0
 def enqueue(self, func, args, kwargs):
     dfr = yield self.client._call(func, args, kwargs)
     dfr.register(lambda isexc, obj: self.queue.discard(dfr))
     self.queue.add(dfr)
     rreturn(dfr)
Example #33
0
 def open(self, filename, mode):
     yield self.reactor.started
     fobj, access = win32iocp.WinFile.open(filename, mode)
     rreturn(FileTransport(self.reactor, fobj, access))
Example #34
0
 def accept(self):
     handshaking_trns = yield ListeningSocketTransport.accept()
     trns = yield handshaking_trns.handshake()
     rreturn(trns)
Example #35
0
 def serve(self, handler_factory, port, host = "0.0.0.0", backlog = 40):
     listener = yield self.listen_tcp(port, host, backlog)
     server = SocketServer(self.reactor, handler_factory, listener)
     self.reactor.call(server.start)
     rreturn(server)
Example #36
0
 def open(self, filename, mode = "r"):
     yield self.reactor.started
     CONV = {"r" : "r", "w" : "w", "a" : "w", "r+" : "rw", "w+" : "rw", "a+" : "rw"}
     mode2 = CONV[mode.lower().replace("b", "").replace("t", "")]
     fileobj = open(filename, mode, 0)
     rreturn(FileTransport(self.reactor, fileobj, mode2))
Example #37
0
 def call(self, func, *args, **kwargs):
     dfr = yield self._call(func, args, kwargs)
     res = yield dfr
     rreturn(res)
Example #38
0
 def call(self, func, *args, **kwargs):
     dfr = yield self._call(func, args, kwargs)
     res = yield dfr
     rreturn(res)
Example #39
0
 def _call(self, func, args, kwargs):
     proc = yield self._get_process()
     dfr = yield proc.enqueue(func, args, kwargs)
     rreturn(dfr)
Example #40
0
 def open(self, filename, mode):
     yield self.reactor.started
     fobj, access = win32iocp.WinFile.open(filename, mode)
     rreturn(FileTransport(self.reactor, fobj, access))
Example #41
0
 def listen_ssl(self, port, host = "0.0.0.0", backlog = 40, keyfile = None, 
         certfile = None, ca_certs = None, cert_reqs = None, ssl_version = None):
     listener = yield self.listen_tcp(port, host, backlog)
     ssl_listener = self.wrap_ssl_server(listener, keyfile, certfile, 
         ca_certs = ca_certs, cert_reqs = cert_reqs, ssl_version = ssl_version)
     rreturn(ssl_listener)
Example #42
0
 def pipe(self):
     yield self.reactor.started
     rh, wh = win32iocp.create_overlapped_pipe()
     rtrns = PipeTransport(self.reactor, win32iocp.WinFile(rh), "r")
     wtrns = PipeTransport(self.reactor, win32iocp.WinFile(wh), "w")
     rreturn((rtrns, wtrns))
Example #43
0
 def joined(self, dfrlist):
     reslist = []
     for dfr in dfrlist:
         res = yield dfr
         reslist.append(res)
     rreturn(reslist)
Example #44
0
 def read(self, count):
     data = yield PipeTransport.read(self, count)
     if data:
         self._rpos += len(data)
     rreturn(data)
Example #45
0
 def pipe(self):
     yield self.reactor.started
     rh, wh = win32iocp.create_overlapped_pipe()
     rtrns = PipeTransport(self.reactor, win32iocp.WinFile(rh), "r")
     wtrns = PipeTransport(self.reactor, win32iocp.WinFile(wh), "w")
     rreturn((rtrns, wtrns))
Example #46
0
 def read(self, count):
     data = yield PipeTransport.read(self, count)
     if data:
         self._rpos += len(data)
     rreturn(data)
Example #47
0
 def open_udp(self, port, host="0.0.0.0", broadcast=False):
     yield self.reactor.started
     sock = self._open_udp_sock(host, port, broadcast)
     trns = DatagramSocketTransport(self.reactor, sock)
     rreturn(trns)
Example #48
0
 def accept(self):
     handshaking_trns = yield ListeningSocketTransport.accept()
     trns = yield handshaking_trns.handshake()
     rreturn(trns)