From bb03ac0dae9830968ae971ab53143e2d539d7a3a Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Tue, 21 Mar 2006 18:17:25 +0000 Subject: Correct API design mistake from rev. 43126: make socket attributes readonly properties. --- Doc/lib/libsocket.tex | 34 +++++++++++++++++++--------------- Lib/socket.py | 22 ++++------------------ Lib/test/test_socket.py | 10 +++++----- 3 files changed, 28 insertions(+), 38 deletions(-) diff --git a/Doc/lib/libsocket.tex b/Doc/lib/libsocket.tex index fd43b1d..04d467a 100644 --- a/Doc/lib/libsocket.tex +++ b/Doc/lib/libsocket.tex @@ -654,21 +654,6 @@ Note that the \method{connect()} operation is subject to the timeout setting, and in general it is recommended to call \method{settimeout()} before calling \method{connect()}. -\begin{methoddesc}[socket]{getfamily}{} -Return the socket family, as given to the \class{socket} constructor. -\versionadded{2.5} -\end{methoddesc} - -\begin{methoddesc}[socket]{gettype}{} -Return the socket type, as given to the \class{socket} constructor. -\versionadded{2.5} -\end{methoddesc} - -\begin{methoddesc}[socket]{getproto}{} -Return the socket protocol, as given to the \class{socket} constructor. -\versionadded{2.5} -\end{methoddesc} - \begin{methoddesc}[socket]{setsockopt}{level, optname, value} Set the value of the given socket option (see the \UNIX{} manual page \manpage{setsockopt}{2}). The needed symbolic constants are defined in @@ -692,6 +677,25 @@ use \method{recv()} and \method{send()} without \var{flags} argument instead. +Socket objects also have these (read-only) attributes that correspond +to the values given to the \class{socket} constructor. + +\begin{memberdesc}[socket]{family} +The socket family. +\versionadded{2.5} +\end{memberdesc} + +\begin{memberdesc}[socket]{type} +The socket type. +\versionadded{2.5} +\end{memberdesc} + +\begin{memberdesc}[socket]{proto} +The socket protocol. +\versionadded{2.5} +\end{memberdesc} + + \subsection{SSL Objects \label{ssl-objects}} SSL objects have the following methods. diff --git a/Lib/socket.py b/Lib/socket.py index 3dc59c4..7e49192 100644 --- a/Lib/socket.py +++ b/Lib/socket.py @@ -182,24 +182,10 @@ class _socketobject(object): Return a regular file object corresponding to the socket. The mode and bufsize arguments are as for the built-in open() function.""" return _fileobject(self._sock, mode, bufsize) - - def getfamily(self): - """getfamily() -> socket family - - Return the socket family.""" - return self._sock.family - - def gettype(self): - """gettype() -> socket type - - Return the socket type.""" - return self._sock.type - - def getproto(self): - """getproto() -> socket protocol - - Return the socket protocol.""" - return self._sock.proto + + family = property(lambda self: self._sock.family, doc="the socket family") + 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") diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index 5a851fc..592e897 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -469,12 +469,12 @@ class GeneralModuleTests(unittest.TestCase): sock.close() self.assertRaises(socket.error, sock.send, "spam") - def testNewGetMethods(self): - # testing getfamily(), gettype() and getprotocol() + def testNewAttributes(self): + # testing .family, .type and .protocol sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.assertEqual(sock.getfamily(), socket.AF_INET) - self.assertEqual(sock.gettype(), socket.SOCK_STREAM) - self.assertEqual(sock.getproto(), 0) + self.assertEqual(sock.family, socket.AF_INET) + self.assertEqual(sock.type, socket.SOCK_STREAM) + self.assertEqual(sock.proto, 0) sock.close() class BasicTCPTest(SocketConnectedTest): -- cgit v0.12