SF.net SVN: jython:[7196] trunk/jython/Lib

[email protected] Fri, 11 Feb 2011 14:11:26 +0000
Newsgroups gmane.comp.lang.jython.cvs
Message-ID <[email protected]>
Revision: 7196
          http://jython.svn.sourceforge.net/jython/?rev=7196&view=rev
Author:   amak
Date:     2011-02-11 14:11:26 +0000 (Fri, 11 Feb 2011)

Log Message:
-----------
Adding repr methods to the internal address tuple types, so that they are more user friendly.

Finalizes http://bugs.jython.org/issue1697

Modified Paths:
--------------
    trunk/jython/Lib/socket.py
    trunk/jython/Lib/test/test_socket.py

Modified: trunk/jython/Lib/socket.py
===================================================================
--- trunk/jython/Lib/socket.py	2011-02-08 01:16:53 UTC (rev 7195)
+++ trunk/jython/Lib/socket.py	2011-02-11 14:11:26 UTC (rev 7196)
@@ -591,11 +591,8 @@
             assert protocol == IPPROTO_UDP, "Only IPPROTO_UDP supported on SOCK_DGRAM sockets"
         return _udpsocket()
 
-class _ip_address_t:
+class _ip_address_t: pass
 
-    def __str__(self):
-        return "('%s', %d)" % (self.sockaddr, self.port)
-
 class _ipv4_address_t(_ip_address_t):
 
     def __init__(self, sockaddr, port, jaddress):
@@ -614,6 +611,11 @@
     def __len__(self):
         return 2
 
+    def __str__(self):
+        return "('%s', %d)" % (self.sockaddr, self.port)
+
+    __repr__ = __str__
+
 class _ipv6_address_t(_ip_address_t):
 
     def __init__(self, sockaddr, port, jaddress):
@@ -636,6 +638,11 @@
     def __len__(self):
         return 4
 
+    def __str__(self):
+        return "('%s', %d, 0, %d)" % (self.sockaddr, self.port, self.jaddress.scopeId)
+
+    __repr__ = __str__
+
 def _get_jsockaddr(address_object, for_udp=False):
     if address_object is None:
         return java.net.InetSocketAddress(0) # Let the system pick an ephemeral port

Modified: trunk/jython/Lib/test/test_socket.py
===================================================================
--- trunk/jython/Lib/test/test_socket.py	2011-02-08 01:16:53 UTC (rev 7195)
+++ trunk/jython/Lib/test/test_socket.py	2011-02-11 14:11:26 UTC (rev 7196)
@@ -1508,6 +1508,7 @@
         self.failUnlessEqual(ipv4_address_tuple[1], 80)
         self.failUnlessRaises(IndexError, lambda: ipv4_address_tuple[2])
         self.failUnlessEqual(str(ipv4_address_tuple), "('127.0.0.1', 80)")
+        self.failUnlessEqual(repr(ipv4_address_tuple), "('127.0.0.1', 80)")
 
         ipv6_address_tuple = socket.getaddrinfo("localhost", 80, socket.AF_INET6, socket.SOCK_STREAM, 0, 0)[0][4]
         self.failUnless     (ipv6_address_tuple[0] in ["::1", "0:0:0:0:0:0:0:1"])
@@ -1519,7 +1520,10 @@
         except IndexError:
             self.fail("Failed to retrieve third element of ipv6 4-tuple")
         self.failUnlessRaises(IndexError, lambda: ipv6_address_tuple[4])
-        self.failUnless(str(ipv6_address_tuple) in ["('::1', 80)", "('0:0:0:0:0:0:0:1', 80)"])
+        # These str/repr tests may fail on some systems: the scope element of the tuple may be non-zero
+        # In this case, we'll have to change the test to use .startswith() or .split() to exclude the scope element
+        self.failUnless(str(ipv6_address_tuple) in ["('::1', 80, 0, 0)", "('0:0:0:0:0:0:0:1', 80, 0, 0)"])
+        self.failUnless(repr(ipv6_address_tuple) in ["('::1', 80, 0, 0)", "('0:0:0:0:0:0:0:1', 80, 0, 0)"])
 
 class TestJython_get_jsockaddr(unittest.TestCase):
     "These tests are specific to jython: they test a key internal routine"


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

------------------------------------------------------------------------------
The ultimate all-in-one performance toolkit: Intel(R) Parallel Studio XE:
Pinpoint memory and threading errors before they happen.
Find and fix more than 250 security defects in the development cycle.
Locate bottlenecks in serial and parallel code that limit performance.
http://p.sf.net/sfu/intel-dev2devfeb