diff --git a/eventlet/api.py b/eventlet/api.py index 95c1ae8..4ff0bc3 100644 --- a/eventlet/api.py +++ b/eventlet/api.py @@ -150,9 +150,9 @@ def trampoline(fd, read=None, write=None, timeout=None, timeout_exc=TimeoutError t = hub.schedule_call_global(timeout, current.throw, timeout_exc) try: if read: - listener = hub.add("read", fileno, cb) + listener = hub.add(hub.READ, fileno, cb) if write: - listener = hub.add("write", fileno, cb) + listener = hub.add(hub.WRITE, fileno, cb) try: return hub.switch() finally: @@ -206,9 +206,9 @@ def select(read_list, write_list, error_list, timeout=None): try: for k, v in ds.iteritems(): if v.get('read'): - hub.add('read', k, on_read) + hub.add(hub.READ, k, on_read) if v.get('write'): - hub.add_writer('write', k, on_write) + hub.add(hub.WRITE, k, on_write) descriptors.append(k) try: return hub.switch() diff --git a/eventlet/hubs/hub.py b/eventlet/hubs/hub.py index 3479df7..6da9a9f 100644 --- a/eventlet/hubs/hub.py +++ b/eventlet/hubs/hub.py @@ -25,9 +25,12 @@ import time from eventlet.support import greenlets as greenlet from eventlet.timer import Timer, LocalTimer +READ="read" +WRITE="write" + class FdListener(object): def __init__(self, evtype, fileno, cb): - assert (evtype == 'read' or evtype == 'write') + assert (evtype is READ or evtype is WRITE) self.evtype = evtype self.fileno = fileno self.cb = cb @@ -54,9 +57,12 @@ class BaseHub(object): specific to a particular underlying event architecture. """ SYSTEM_EXCEPTIONS = (KeyboardInterrupt, SystemExit) + + READ = READ + WRITE = WRITE def __init__(self, clock=time.time): - self.listeners = {'read':{}, 'write':{}} + self.listeners = {READ:{}, WRITE:{}} self.closed_fds = [] self.clock = clock @@ -78,7 +84,7 @@ class BaseHub(object): def add(self, evtype, fileno, cb): """ Signals an intent to or write a particular file descriptor. - The *evtype* argument is either the string 'read' or the string 'write'. + The *evtype* argument is either the constant READ or WRITE. The *fileno* argument is the file number of the file of interest. @@ -106,8 +112,8 @@ class BaseHub(object): def remove_descriptor(self, fileno): """ Completely remove all listeners for this fileno.""" - self.listeners['read'].pop(fileno, None) - self.listeners['write'].pop(fileno, None) + self.listeners[READ].pop(fileno, None) + self.listeners[WRITE].pop(fileno, None) def stop(self): self.abort() @@ -304,10 +310,10 @@ class BaseHub(object): # for debugging: def get_readers(self): - return self.listeners['read'] + return self.listeners[READ] def get_writers(self): - return self.listeners['write'] + return self.listeners[WRITE] def get_timers_count(hub): return max(len(x) for x in [hub.timers, hub.next_timers]) diff --git a/eventlet/hubs/libevent.py b/eventlet/hubs/libevent.py index bd328dc..ef94cc8 100644 --- a/eventlet/hubs/libevent.py +++ b/eventlet/hubs/libevent.py @@ -24,7 +24,7 @@ import traceback import event from eventlet import api -from eventlet.hubs.hub import BaseHub, FdListener +from eventlet.hubs.hub import BaseHub, FdListener, READ, WRITE class event_wrapper(object): @@ -129,9 +129,9 @@ class Hub(BaseHub): running = property(_getrunning, _setrunning) def add(self, evtype, fileno, cb): - if evtype == 'read': + if evtype is READ: evt = event.read(fileno, cb, fileno) - elif evtype == 'write': + elif evtype is WRITE: evt = event.write(fileno, cb, fileno) listener = FdListener(evtype, fileno, evt) @@ -179,12 +179,6 @@ class Hub(BaseHub): self.events_to_add.append(wrapper) return wrapper - def get_readers(self): - return self.listeners['read'] - - def get_writers(self): - return self.listeners['write'] - def _version_info(self): baseversion = event.__version__ return baseversion diff --git a/eventlet/hubs/poll.py b/eventlet/hubs/poll.py index a84a572..fda0f78 100644 --- a/eventlet/hubs/poll.py +++ b/eventlet/hubs/poll.py @@ -26,13 +26,13 @@ import errno from time import sleep import time -from eventlet.hubs import hub +from eventlet.hubs.hub import BaseHub, READ, WRITE EXC_MASK = select.POLLERR | select.POLLHUP READ_MASK = select.POLLIN WRITE_MASK = select.POLLOUT -class Hub(hub.BaseHub): +class Hub(BaseHub): def __init__(self, clock=time.time): super(Hub, self).__init__(clock) self.poll = select.poll() @@ -52,9 +52,9 @@ class Hub(hub.BaseHub): def register(self, fileno): mask = 0 - if self.listeners['read'].get(fileno): + if self.listeners[READ].get(fileno): mask |= READ_MASK - if self.listeners['write'].get(fileno): + if self.listeners[WRITE].get(fileno): mask |= WRITE_MASK if mask: self.poll.register(fileno, mask) @@ -72,8 +72,8 @@ class Hub(hub.BaseHub): pass def wait(self, seconds=None): - readers = self.listeners['read'] - writers = self.listeners['write'] + readers = self.listeners[READ] + writers = self.listeners[WRITE] if not readers and not writers: if seconds: diff --git a/eventlet/hubs/selects.py b/eventlet/hubs/selects.py index e6354a9..dcfde51 100644 --- a/eventlet/hubs/selects.py +++ b/eventlet/hubs/selects.py @@ -23,9 +23,9 @@ import select import errno import time -from eventlet.hubs import hub +from eventlet.hubs.hub import BaseHub, READ, WRITE -class Hub(hub.BaseHub): +class Hub(BaseHub): def _remove_closed_fds(self): """ Iterate through fds that have had their socket objects recently closed, removing the ones that are actually closed per the operating system. @@ -38,8 +38,8 @@ class Hub(hub.BaseHub): self.remove_descriptor(fd) def wait(self, seconds=None): - readers = self.listeners['read'] - writers = self.listeners['write'] + readers = self.listeners[READ] + writers = self.listeners[WRITE] if not readers and not writers: if seconds: time.sleep(seconds) diff --git a/eventlet/hubs/twistedr.py b/eventlet/hubs/twistedr.py index a54da0d..93ed454 100644 --- a/eventlet/hubs/twistedr.py +++ b/eventlet/hubs/twistedr.py @@ -23,7 +23,7 @@ import sys import threading from twisted.internet.base import DelayedCall as TwistedDelayedCall from eventlet import api -from eventlet.hubs import hub +from eventlet.hubs.hub import FdListener, READ, WRITE class DelayedCall(TwistedDelayedCall): @@ -74,11 +74,11 @@ class socket_rwdescriptor(hub.FdListener): disconnected = False def doRead(self): - if self.evtype == 'read': + if self.evtype is READ: self.cb(self) def doWrite(self): - if self.evtype == 'write': + if self.evtype == WRITE: self.cb(self) def connectionLost(self, reason): @@ -130,9 +130,9 @@ class BaseTwistedHub(object): def add(self, evtype, fileno, cb): from twisted.internet import reactor descriptor = socket_rwdescriptor(evtype, fileno, cb) - if evtype == 'read': + if evtype is READ: reactor.addReader(descriptor) - if evtype == 'write': + if evtype is WRITE: reactor.addWriter(descriptor) return descriptor