[Python-checkins] r72242 - in python/branches/py3k: Lib/ipaddr.py

gregory.p.smith python-checkins at python.org
Sun May 3 21:38:30 CEST 2009


Author: gregory.p.smith
Date: Sun May  3 21:38:29 2009
New Revision: 72242

Log:
Merged revisions 72241 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r72241 | gregory.p.smith | 2009-05-03 12:37:05 -0700 (Sun, 03 May 2009) | 3 lines
  
  Optimization: move RFC defined network constant construction out of
  the is_*() methods and into module private instances.
........


Modified:
   python/branches/py3k/   (props changed)
   python/branches/py3k/Lib/ipaddr.py

Modified: python/branches/py3k/Lib/ipaddr.py
==============================================================================
--- python/branches/py3k/Lib/ipaddr.py	(original)
+++ python/branches/py3k/Lib/ipaddr.py	Sun May  3 21:38:29 2009
@@ -26,6 +26,7 @@
 
 import struct
 
+
 class Error(Exception):
 
     """Base class for exceptions."""
@@ -537,6 +538,7 @@
 
     # Equivalent to 255.255.255.255 or 32 bits of 1's.
     _ALL_ONES = 0xffffffff
+    _version = 4
 
     def __init__(self, ipaddr):
         """Instantiate a new IPv4 object.
@@ -566,7 +568,6 @@
 
         """
         BaseIP.__init__(self)
-        self._version = 4
 
         # Efficient constructor from integer.
         if isinstance(ipaddr, int):
@@ -715,9 +716,10 @@
             A boolean, True if the address is reserved per RFC 1918.
 
         """
-        return (self in IPv4('10.0.0.0/8') or
-                self in IPv4('172.16.0.0/12') or
-                self in IPv4('192.168.0.0/16'))
+        for network in _IPV4_RFC1918_NETWORKS:
+            if self in network:
+                return True
+        return False
 
     @property
     def is_multicast(self):
@@ -728,7 +730,7 @@
             See RFC 3171 for details.
 
         """
-        return self in IPv4('224.0.0.0/4')
+        return self in _IPV4_RFC3171_MULTICAST
 
     @property
     def is_loopback(self):
@@ -738,7 +740,7 @@
             A boolean, True if the address is a loopback per RFC 3330.
 
         """
-        return self in IPv4('127.0.0.0/8')
+        return self in _IPV4_RFC3330_LOOPBACK
 
     @property
     def is_link_local(self):
@@ -748,7 +750,7 @@
             A boolean, True if the address is link-local per RFC 3927.
 
         """
-        return self in IPv4('169.254.0.0/16')
+        return self in _IPV4_RFC3927_LINK_LOCAL
 
     @property
     def version(self):
@@ -877,6 +879,7 @@
     """
 
     _ALL_ONES = (2**128) - 1
+    _version = 6
 
     def __init__(self, ipaddr):
         """Instantiate a new IPv6 object.
@@ -904,7 +907,6 @@
 
         """
         BaseIP.__init__(self)
-        self._version = 6
 
         # Efficient constructor from integer.
         if isinstance(ipaddr, int):
@@ -1044,7 +1046,7 @@
             See RFC 2373 2.7 for details.
 
         """
-        return self in IPv6('ff00::/8')
+        return self in _IPV6_RFC2373_MULTICAST
 
     @property
     def is_unspecified(self):
@@ -1055,7 +1057,7 @@
             RFC 2373 2.5.2.
 
         """
-        return self == IPv6('::')
+        return self == _IPV6_RFC2373_UNSPECIFIED
 
     @property
     def is_loopback(self):
@@ -1066,7 +1068,7 @@
             RFC 2373 2.5.3.
 
         """
-        return self == IPv6('::1')
+        return self == _IPV6_RFC2373_LOOPBACK
 
     @property
     def is_link_local(self):
@@ -1076,7 +1078,7 @@
             A boolean, True if the address is reserved per RFC 4291.
 
         """
-        return self in IPv6('fe80::/10')
+        return self in _IPV6_RFC4291_LINK_LOCAL
 
     @property
     def is_site_local(self):
@@ -1090,7 +1092,7 @@
             A boolean, True if the address is reserved per RFC 3513 2.5.6.
 
         """
-        return self in IPv6('fec0::/10')
+        return self in _IPV6_RFC3513_SITE_LOCAL
 
     @property
     def is_private(self):
@@ -1100,7 +1102,7 @@
             A boolean, True if the address is reserved per RFC 4193.
 
         """
-        return self in IPv6('fc00::/7')
+        return self in _IPV6_RFC4193_PRIVATE
 
     @property
     def version(self):
@@ -1347,3 +1349,20 @@
 
         """
         return self.prefixlen
+
+
+# IPv4 constants.
+_IPV4_RFC1918_NETWORKS = (IPv4('10.0.0.0/8'),
+                          IPv4('172.16.0.0/12'),
+                          IPv4('192.168.0.0/16'))
+_IPV4_RFC3171_MULTICAST = IPv4('224.0.0.0/4')
+_IPV4_RFC3330_LOOPBACK = IPv4('127.0.0.0/8')
+_IPV4_RFC3927_LINK_LOCAL = IPv4('169.254.0.0/16')
+
+# IPv6 constants.
+_IPV6_RFC2373_MULTICAST = IPv6('ff00::/8')
+_IPV6_RFC2373_UNSPECIFIED = IPv6('::')
+_IPV6_RFC2373_LOOPBACK = IPv6('::1')
+_IPV6_RFC4291_LINK_LOCAL = IPv6('fe80::/10')
+_IPV6_RFC3513_SITE_LOCAL = IPv6('fec0::/10')  # Deprecated by RFC3879.
+_IPV6_RFC4193_PRIVATE = IPv6('fc00::/7')


More information about the Python-checkins mailing list