404

[ Avaa Bypassed ]




Upload:

Command:

elspacio@3.16.83.167: ~ $
"""Selectors module.

This module allows high-level and efficient I/O multiplexing, built upon the
`select` module primitives.
"""


from abc import ABCMeta, abstractmethod
from collections import namedtuple, Mapping
import math
import select
import sys


# generic events, that must be mapped to implementation-specific ones
EVENT_READ = (1 << 0)
EVENT_WRITE = (1 << 1)


def _fileobj_to_fd(fileobj):
    """Return a file descriptor from a file object.

    Parameters:
    fileobj -- file object or file descriptor

    Returns:
    corresponding file descriptor

    Raises:
    ValueError if the object is invalid
    """
    if isinstance(fileobj, int):
        fd = fileobj
    else:
        try:
            fd = int(fileobj.fileno())
        except (AttributeError, TypeError, ValueError):
            raise ValueError("Invalid file object: "
                             "{!r}".format(fileobj)) from None
    if fd < 0:
        raise ValueError("Invalid file descriptor: {}".format(fd))
    return fd


SelectorKey = namedtuple('SelectorKey', ['fileobj', 'fd', 'events', 'data'])
"""Object used to associate a file object to its backing file descriptor,
selected event mask and attached data."""


class _SelectorMapping(Mapping):
    """Mapping of file objects to selector keys."""

    def __init__(self, selector):
        self._selector = selector

    def __len__(self):
        return len(self._selector._fd_to_key)

    def __getitem__(self, fileobj):
        try:
            fd = self._selector._fileobj_lookup(fileobj)
            return self._selector._fd_to_key[fd]
        except KeyError:
            raise KeyError("{!r} is not registered".format(fileobj)) from None

    def __iter__(self):
        return iter(self._selector._fd_to_key)


class BaseSelector(metaclass=ABCMeta):
    """Selector abstract base class.

    A selector supports registering file objects to be monitored for specific
    I/O events.

    A file object is a file descriptor or any object with a `fileno()` method.
    An arbitrary object can be attached to the file object, which can be used
    for example to store context information, a callback, etc.

    A selector can use various implementations (select(), poll(), epoll()...)
    depending on the platform. The default `Selector` class uses the most
    efficient implementation on the current platform.
    """

    @abstractmethod
    def register(self, fileobj, events, data=None):
        """Register a file object.

        Parameters:
        fileobj -- file object or file descriptor
        events  -- events to monitor (bitwise mask of EVENT_READ|EVENT_WRITE)
        data    -- attached data

        Returns:
        SelectorKey instance

        Raises:
        ValueError if events is invalid
        KeyError if fileobj is already registered
        OSError if fileobj is closed or otherwise is unacceptable to
                the underlying system call (if a system call is made)

        Note:
        OSError may or may not be raised
        """
        raise NotImplementedError

    @abstractmethod
    def unregister(self, fileobj):
        """Unregister a file object.

        Parameters:
        fileobj -- file object or file descriptor

        Returns:
        SelectorKey instance

        Raises:
        KeyError if fileobj is not registered

        Note:
        If fileobj is registered but has since been closed this does
        *not* raise OSError (even if the wrapped syscall does)
        """
        raise NotImplementedError

    def modify(self, fileobj, events, data=None):
        """Change a registered file object monitored events or attached data.

        Parameters:
        fileobj -- file object or file descriptor
        events  -- events to monitor (bitwise mask of EVENT_READ|EVENT_WRITE)
        data    -- attached data

        Returns:
        SelectorKey instance

        Raises:
        Anything that unregister() or register() raises
        """
        self.unregister(fileobj)
        return self.register(fileobj, events, data)

    @abstractmethod
    def select(self, timeout=None):
        """Perform the actual selection, until some monitored file objects are
        ready or a timeout expires.

        Parameters:
        timeout -- if timeout > 0, this specifies the maximum wait time, in
                   seconds
                   if timeout <= 0, the select() call won't block, and will
                   report the currently ready file objects
                   if timeout is None, select() will block until a monitored
                   file object becomes ready

        Returns:
        list of (key, events) for ready file objects
        `events` is a bitwise mask of EVENT_READ|EVENT_WRITE
        """
        raise NotImplementedError

    def close(self):
        """Close the selector.

        This must be called to make sure that any underlying resource is freed.
        """
        pass

    def get_key(self, fileobj):
        """Return the key associated to a registered file object.

        Returns:
        SelectorKey for this file object
        """
        mapping = self.get_map()
        try:
            if mapping is None:
                raise KeyError
            return mapping[fileobj]
        except KeyError:
            raise KeyError("{!r} is not registered".format(fileobj)) from None

    @abstractmethod
    def get_map(self):
        """Return a mapping of file objects to selector keys."""
        raise NotImplementedError

    def __enter__(self):
        return self

    def __exit__(self, *args):
        self.close()


class _BaseSelectorImpl(BaseSelector):
    """Base selector implementation."""

    def __init__(self):
        # this maps file descriptors to keys
        self._fd_to_key = {}
        # read-only mapping returned by get_map()
        self._map = _SelectorMapping(self)

    def _fileobj_lookup(self, fileobj):
        """Return a file descriptor from a file object.

        This wraps _fileobj_to_fd() to do an exhaustive search in case
        the object is invalid but we still have it in our map.  This
        is used by unregister() so we can unregister an object that
        was previously registered even if it is closed.  It is also
        used by _SelectorMapping.
        """
        try:
            return _fileobj_to_fd(fileobj)
        except ValueError:
            # Do an exhaustive search.
            for key in self._fd_to_key.values():
                if key.fileobj is fileobj:
                    return key.fd
            # Raise ValueError after all.
            raise

    def register(self, fileobj, events, data=None):
        if (not events) or (events & ~(EVENT_READ | EVENT_WRITE)):
            raise ValueError("Invalid events: {!r}".format(events))

        key = SelectorKey(fileobj, self._fileobj_lookup(fileobj), events, data)

        if key.fd in self._fd_to_key:
            raise KeyError("{!r} (FD {}) is already registered"
                           .format(fileobj, key.fd))

        self._fd_to_key[key.fd] = key
        return key

    def unregister(self, fileobj):
        try:
            key = self._fd_to_key.pop(self._fileobj_lookup(fileobj))
        except KeyError:
            raise KeyError("{!r} is not registered".format(fileobj)) from None
        return key

    def modify(self, fileobj, events, data=None):
        # TODO: Subclasses can probably optimize this even further.
        try:
            key = self._fd_to_key[self._fileobj_lookup(fileobj)]
        except KeyError:
            raise KeyError("{!r} is not registered".format(fileobj)) from None
        if events != key.events:
            self.unregister(fileobj)
            key = self.register(fileobj, events, data)
        elif data != key.data:
            # Use a shortcut to update the data.
            key = key._replace(data=data)
            self._fd_to_key[key.fd] = key
        return key

    def close(self):
        self._fd_to_key.clear()
        self._map = None

    def get_map(self):
        return self._map

    def _key_from_fd(self, fd):
        """Return the key associated to a given file descriptor.

        Parameters:
        fd -- file descriptor

        Returns:
        corresponding key, or None if not found
        """
        try:
            return self._fd_to_key[fd]
        except KeyError:
            return None


class SelectSelector(_BaseSelectorImpl):
    """Select-based selector."""

    def __init__(self):
        super().__init__()
        self._readers = set()
        self._writers = set()

    def register(self, fileobj, events, data=None):
        key = super().register(fileobj, events, data)
        if events & EVENT_READ:
            self._readers.add(key.fd)
        if events & EVENT_WRITE:
            self._writers.add(key.fd)
        return key

    def unregister(self, fileobj):
        key = super().unregister(fileobj)
        self._readers.discard(key.fd)
        self._writers.discard(key.fd)
        return key

    if sys.platform == 'win32':
        def _select(self, r, w, _, timeout=None):
            r, w, x = select.select(r, w, w, timeout)
            return r, w + x, []
    else:
        _select = select.select

    def select(self, timeout=None):
        timeout = None if timeout is None else max(timeout, 0)
        ready = []
        try:
            r, w, _ = self._select(self._readers, self._writers, [], timeout)
        except InterruptedError:
            return ready
        r = set(r)
        w = set(w)
        for fd in r | w:
            events = 0
            if fd in r:
                events |= EVENT_READ
            if fd in w:
                events |= EVENT_WRITE

            key = self._key_from_fd(fd)
            if key:
                ready.append((key, events & key.events))
        return ready


if hasattr(select, 'poll'):

    class PollSelector(_BaseSelectorImpl):
        """Poll-based selector."""

        def __init__(self):
            super().__init__()
            self._poll = select.poll()

        def register(self, fileobj, events, data=None):
            key = super().register(fileobj, events, data)
            poll_events = 0
            if events & EVENT_READ:
                poll_events |= select.POLLIN
            if events & EVENT_WRITE:
                poll_events |= select.POLLOUT
            self._poll.register(key.fd, poll_events)
            return key

        def unregister(self, fileobj):
            key = super().unregister(fileobj)
            self._poll.unregister(key.fd)
            return key

        def select(self, timeout=None):
            if timeout is None:
                timeout = None
            elif timeout <= 0:
                timeout = 0
            else:
                # poll() has a resolution of 1 millisecond, round away from
                # zero to wait *at least* timeout seconds.
                timeout = math.ceil(timeout * 1e3)
            ready = []
            try:
                fd_event_list = self._poll.poll(timeout)
            except InterruptedError:
                return ready
            for fd, event in fd_event_list:
                events = 0
                if event & ~select.POLLIN:
                    events |= EVENT_WRITE
                if event & ~select.POLLOUT:
                    events |= EVENT_READ

                key = self._key_from_fd(fd)
                if key:
                    ready.append((key, events & key.events))
            return ready


if hasattr(select, 'epoll'):

    class EpollSelector(_BaseSelectorImpl):
        """Epoll-based selector."""

        def __init__(self):
            super().__init__()
            self._epoll = select.epoll()

        def fileno(self):
            return self._epoll.fileno()

        def register(self, fileobj, events, data=None):
            key = super().register(fileobj, events, data)
            epoll_events = 0
            if events & EVENT_READ:
                epoll_events |= select.EPOLLIN
            if events & EVENT_WRITE:
                epoll_events |= select.EPOLLOUT
            try:
                self._epoll.register(key.fd, epoll_events)
            except BaseException:
                super().unregister(fileobj)
                raise
            return key

        def unregister(self, fileobj):
            key = super().unregister(fileobj)
            try:
                self._epoll.unregister(key.fd)
            except OSError:
                # This can happen if the FD was closed since it
                # was registered.
                pass
            return key

        def select(self, timeout=None):
            if timeout is None:
                timeout = -1
            elif timeout <= 0:
                timeout = 0
            else:
                # epoll_wait() has a resolution of 1 millisecond, round away
                # from zero to wait *at least* timeout seconds.
                timeout = math.ceil(timeout * 1e3) * 1e-3

            # epoll_wait() expects `maxevents` to be greater than zero;
            # we want to make sure that `select()` can be called when no
            # FD is registered.
            max_ev = max(len(self._fd_to_key), 1)

            ready = []
            try:
                fd_event_list = self._epoll.poll(timeout, max_ev)
            except InterruptedError:
                return ready
            for fd, event in fd_event_list:
                events = 0
                if event & ~select.EPOLLIN:
                    events |= EVENT_WRITE
                if event & ~select.EPOLLOUT:
                    events |= EVENT_READ

                key = self._key_from_fd(fd)
                if key:
                    ready.append((key, events & key.events))
            return ready

        def close(self):
            try:
                self._epoll.close()
            finally:
                super().close()


if hasattr(select, 'kqueue'):

    class KqueueSelector(_BaseSelectorImpl):
        """Kqueue-based selector."""

        def __init__(self):
            super().__init__()
            self._kqueue = select.kqueue()

        def fileno(self):
            return self._kqueue.fileno()

        def register(self, fileobj, events, data=None):
            key = super().register(fileobj, events, data)
            try:
                if events & EVENT_READ:
                    kev = select.kevent(key.fd, select.KQ_FILTER_READ,
                                        select.KQ_EV_ADD)
                    self._kqueue.control([kev], 0, 0)
                if events & EVENT_WRITE:
                    kev = select.kevent(key.fd, select.KQ_FILTER_WRITE,
                                        select.KQ_EV_ADD)
                    self._kqueue.control([kev], 0, 0)
            except BaseException:
                super().unregister(fileobj)
                raise
            return key

        def unregister(self, fileobj):
            key = super().unregister(fileobj)
            if key.events & EVENT_READ:
                kev = select.kevent(key.fd, select.KQ_FILTER_READ,
                                    select.KQ_EV_DELETE)
                try:
                    self._kqueue.control([kev], 0, 0)
                except OSError:
                    # This can happen if the FD was closed since it
                    # was registered.
                    pass
            if key.events & EVENT_WRITE:
                kev = select.kevent(key.fd, select.KQ_FILTER_WRITE,
                                    select.KQ_EV_DELETE)
                try:
                    self._kqueue.control([kev], 0, 0)
                except OSError:
                    # See comment above.
                    pass
            return key

        def select(self, timeout=None):
            timeout = None if timeout is None else max(timeout, 0)
            max_ev = len(self._fd_to_key)
            ready = []
            try:
                kev_list = self._kqueue.control(None, max_ev, timeout)
            except InterruptedError:
                return ready
            for kev in kev_list:
                fd = kev.ident
                flag = kev.filter
                events = 0
                if flag == select.KQ_FILTER_READ:
                    events |= EVENT_READ
                if flag == select.KQ_FILTER_WRITE:
                    events |= EVENT_WRITE

                key = self._key_from_fd(fd)
                if key:
                    ready.append((key, events & key.events))
            return ready

        def close(self):
            try:
                self._kqueue.close()
            finally:
                super().close()


# Choose the best implementation: roughly, epoll|kqueue > poll > select.
# select() also can't accept a FD > FD_SETSIZE (usually around 1024)
if 'KqueueSelector' in globals():
    DefaultSelector = KqueueSelector
elif 'EpollSelector' in globals():
    DefaultSelector = EpollSelector
elif 'PollSelector' in globals():
    DefaultSelector = PollSelector
else:
    DefaultSelector = SelectSelector

Filemanager

Name Type Size Permission Actions
__pycache__ Folder 0755
asyncio Folder 0755
collections Folder 0755
concurrent Folder 0755
config-3.4m Folder 0755
ctypes Folder 0755
curses Folder 0755
dbm Folder 0755
distutils Folder 0755
email Folder 0755
encodings Folder 0755
ensurepip Folder 0755
html Folder 0755
http Folder 0755
idlelib Folder 0755
importlib Folder 0755
json Folder 0755
lib-dynload Folder 0755
lib2to3 Folder 0755
logging Folder 0755
multiprocessing Folder 0755
plat-linux Folder 0755
pydoc_data Folder 0755
site-packages Folder 0755
sqlite3 Folder 0755
test Folder 0755
unittest Folder 0755
urllib Folder 0755
venv Folder 0755
wsgiref Folder 0755
xml Folder 0755
xmlrpc Folder 0755
__future__.py File 4.48 KB 0644
__phello__.foo.py File 64 B 0644
_bootlocale.py File 1.27 KB 0644
_collections_abc.py File 19.43 KB 0644
_compat_pickle.py File 8.12 KB 0644
_dummy_thread.py File 4.76 KB 0644
_markupbase.py File 14.26 KB 0644
_osx_support.py File 18.65 KB 0644
_pyio.py File 72.16 KB 0644
_sitebuiltins.py File 3.04 KB 0644
_strptime.py File 21.54 KB 0644
_sysconfigdata.py File 28.05 KB 0644
_threading_local.py File 7.24 KB 0644
_weakrefset.py File 5.57 KB 0644
abc.py File 8.42 KB 0644
aifc.py File 30.84 KB 0644
antigravity.py File 475 B 0644
argparse.py File 87.92 KB 0644
ast.py File 11.75 KB 0644
asynchat.py File 11.55 KB 0644
asyncore.py File 20.51 KB 0644
base64.py File 19.71 KB 0755
bdb.py File 22.81 KB 0644
binhex.py File 13.6 KB 0644
bisect.py File 2.53 KB 0644
bz2.py File 18.42 KB 0644
cProfile.py File 5.2 KB 0755
calendar.py File 22.4 KB 0644
cgi.py File 35.1 KB 0755
cgitb.py File 11.76 KB 0644
chunk.py File 5.3 KB 0644
cmd.py File 14.51 KB 0644
code.py File 9.8 KB 0644
codecs.py File 35.07 KB 0644
codeop.py File 5.85 KB 0644
colorsys.py File 3.97 KB 0644
compileall.py File 9.39 KB 0644
configparser.py File 48.53 KB 0644
contextlib.py File 11.37 KB 0644
copy.py File 8.79 KB 0644
copyreg.py File 6.67 KB 0644
crypt.py File 1.83 KB 0644
csv.py File 15.81 KB 0644
datetime.py File 74.03 KB 0644
decimal.py File 223.33 KB 0644
difflib.py File 79.77 KB 0644
dis.py File 16.76 KB 0644
doctest.py File 102.04 KB 0644
dummy_threading.py File 2.75 KB 0644
enum.py File 21.03 KB 0644
filecmp.py File 9.6 KB 0644
fileinput.py File 14.52 KB 0644
fnmatch.py File 3.09 KB 0644
formatter.py File 14.82 KB 0644
fractions.py File 22.66 KB 0644
ftplib.py File 37.63 KB 0644
functools.py File 27.84 KB 0644
genericpath.py File 3.79 KB 0644
getopt.py File 7.31 KB 0644
getpass.py File 5.93 KB 0644
gettext.py File 20.28 KB 0644
glob.py File 3.38 KB 0644
gzip.py File 23.74 KB 0644
hashlib.py File 9.62 KB 0644
heapq.py File 17.58 KB 0644
hmac.py File 4.94 KB 0644
imaplib.py File 49.09 KB 0644
imghdr.py File 3.45 KB 0644
imp.py File 9.75 KB 0644
inspect.py File 102.19 KB 0644
io.py File 3.32 KB 0644
ipaddress.py File 69.92 KB 0644
keyword.py File 2.17 KB 0755
linecache.py File 3.86 KB 0644
locale.py File 72.78 KB 0644
lzma.py File 18.92 KB 0644
macpath.py File 5.49 KB 0644
macurl2path.py File 2.67 KB 0644
mailbox.py File 76.54 KB 0644
mailcap.py File 7.26 KB 0644
mimetypes.py File 20.29 KB 0644
modulefinder.py File 22.87 KB 0644
netrc.py File 5.61 KB 0644
nntplib.py File 42.07 KB 0644
ntpath.py File 20 KB 0644
nturl2path.py File 2.39 KB 0644
numbers.py File 10 KB 0644
opcode.py File 5.31 KB 0644
operator.py File 8.98 KB 0644
optparse.py File 58.93 KB 0644
os.py File 33.09 KB 0644
pathlib.py File 41.47 KB 0644
pdb.py File 59.56 KB 0755
pickle.py File 54.68 KB 0644
pickletools.py File 89.61 KB 0644
pipes.py File 8.71 KB 0644
pkgutil.py File 20.72 KB 0644
platform.py File 45.67 KB 0755
plistlib.py File 31.05 KB 0644
poplib.py File 13.98 KB 0644
posixpath.py File 13.13 KB 0644
pprint.py File 14.57 KB 0644
profile.py File 21.52 KB 0755
pstats.py File 25.7 KB 0644
pty.py File 4.65 KB 0644
py_compile.py File 6.94 KB 0644
pyclbr.py File 13.2 KB 0644
pydoc.py File 100.6 KB 0755
queue.py File 8.63 KB 0644
quopri.py File 7.09 KB 0755
random.py File 25.47 KB 0644
re.py File 15.24 KB 0644
reprlib.py File 4.99 KB 0644
rlcompleter.py File 5.93 KB 0644
runpy.py File 10.56 KB 0644
sched.py File 6.21 KB 0644
selectors.py File 16.7 KB 0644
shelve.py File 8.33 KB 0644
shlex.py File 11.28 KB 0644
shutil.py File 38.97 KB 0644
site.py File 21.05 KB 0644
smtpd.py File 29.29 KB 0755
smtplib.py File 38.06 KB 0755
sndhdr.py File 6.11 KB 0644
socket.py File 18.62 KB 0644
socketserver.py File 23.8 KB 0644
sre_compile.py File 19.44 KB 0644
sre_constants.py File 7.1 KB 0644
sre_parse.py File 30.69 KB 0644
ssl.py File 33.93 KB 0644
stat.py File 4.3 KB 0644
statistics.py File 19.1 KB 0644
string.py File 11.18 KB 0644
stringprep.py File 12.61 KB 0644
struct.py File 257 B 0644
subprocess.py File 63.04 KB 0644
sunau.py File 17.67 KB 0644
symbol.py File 2 KB 0755
symtable.py File 7.23 KB 0644
sysconfig.py File 24.05 KB 0644
tabnanny.py File 11.14 KB 0755
tarfile.py File 89.41 KB 0755
telnetlib.py File 22.53 KB 0644
tempfile.py File 22 KB 0644
textwrap.py File 18.83 KB 0644
this.py File 1003 B 0644
threading.py File 47.66 KB 0644
timeit.py File 11.69 KB 0755
token.py File 2.96 KB 0644
tokenize.py File 25 KB 0644
trace.py File 30.75 KB 0755
traceback.py File 10.91 KB 0644
tracemalloc.py File 15.28 KB 0644
tty.py File 879 B 0644
types.py File 5.28 KB 0644
uu.py File 6.61 KB 0755
uuid.py File 23.17 KB 0644
warnings.py File 13.97 KB 0644
wave.py File 17.27 KB 0644
weakref.py File 18.93 KB 0644
webbrowser.py File 20.93 KB 0755
xdrlib.py File 5.77 KB 0644
zipfile.py File 66.94 KB 0644