[pypy-svn] r72231 - pypy/trunk/lib-python/modified-2.5.2
fijal at codespeak.net
fijal at codespeak.net
Mon Mar 15 01:53:00 CET 2010
Author: fijal
Date: Mon Mar 15 01:52:58 2010
New Revision: 72231
Modified:
pypy/trunk/lib-python/modified-2.5.2/socket.py
Log:
Avoid creating *args calls all over the place. I'm honestly inclined to
remove all exec there and simply write down methods (also docstrings don't
have to be in _socket)
Modified: pypy/trunk/lib-python/modified-2.5.2/socket.py
==============================================================================
--- pypy/trunk/lib-python/modified-2.5.2/socket.py (original)
+++ pypy/trunk/lib-python/modified-2.5.2/socket.py Mon Mar 15 01:52:58 2010
@@ -123,8 +123,8 @@
_socketmethods = (
'bind', 'connect', 'connect_ex', 'fileno', 'listen',
- 'getpeername', 'getsockname', 'getsockopt', 'setsockopt',
- 'sendall', 'setblocking',
+ 'getpeername', 'getsockname', 'setsockopt',
+ 'setblocking',
'settimeout', 'gettimeout', 'shutdown')
if sys.platform == "riscos":
@@ -198,11 +198,34 @@
type = property(lambda self: self._sock.type, doc="the socket type")
proto = property(lambda self: self._sock.proto, doc="the socket protocol")
- _s = ("def %s(self, *args): return self._sock.%s(*args)\n\n"
- "%s.__doc__ = _realsocket.%s.__doc__\n")
+ def sendall(self, data, flags=0):
+ """sendall(data[, flags])
+
+ Send a data string to the socket. For the optional flags
+ argument, see the Unix manual. This calls send() repeatedly
+ until all data is sent. If an error occurs, it's impossible
+ to tell how much data has been sent.
+ """
+ self._sock.sendall(data, flags)
+
+ def getsockopt(self, level, optname, buflen=None):
+ """getsockopt(level, option[, buffersize]) -> value
+
+ Get a socket option. See the Unix manual for level and option.
+ If a nonzero buffersize argument is given, the return value is a
+ string of that length; otherwise it is an integer.
+ """
+ if buflen is None:
+ return self._sock.getsockopt(level, optname)
+ return self._sock.getsockopt(level, optname, buflen)
+
+ _s = ("def %(name)s(self, %(args)s): return self._sock.%(name)s(%(args)s)\n\n"
+ "%(name)s.__doc__ = _realsocket.%(name)s.__doc__\n")
for _m in _socketmethods:
- exec _s % (_m, _m, _m, _m)
- del _m, _s
+ # yupi! we're on pypy, all code objects have this interface
+ argcount = getattr(_realsocket, _m).im_func.func_code.co_argcount - 1
+ exec _s % {'name': _m, 'args': ', '.join(['arg%d' % i for i in range(argcount)])}
+ del _m, _s, i, argcount
socket = SocketType = _socketobject
More information about the Pypy-commit
mailing list