Python3 support python3
authorJohnny Wezel<j@wezel.name>
Sun, 07 Feb 2016 22:30:17 +0100
branchpython3
changeset 70 1fe2c20adeba
parent 65 50b5966b5566
child 71 b181f795cc0d
Python3 support
test/test_main.py
test/test_nicclient.py
test/test_parser.py
whois/__init__.py
whois/parser.py
whois/time_zones.py
whois/whois.py
--- a/test/test_main.py	Mon Sep 14 15:19:11 2015 +0100
+++ b/test/test_main.py	Sun Feb 07 22:30:17 2016 +0100
@@ -1,5 +1,12 @@
 # coding=utf-8
 
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
+from builtins import *
 import unittest
 from whois import extract_domain
 
--- a/test/test_nicclient.py	Mon Sep 14 15:19:11 2015 +0100
+++ b/test/test_nicclient.py	Sun Feb 07 22:30:17 2016 +0100
@@ -1,5 +1,12 @@
 # coding=utf-8
 
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
+from builtins import *
 import unittest
 from whois.whois import NICClient
 
--- a/test/test_parser.py	Mon Sep 14 15:19:11 2015 +0100
+++ b/test/test_parser.py	Sun Feb 07 22:30:17 2016 +0100
@@ -1,3 +1,10 @@
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
+from builtins import *
 import unittest
 
 import os
@@ -69,7 +76,7 @@
                 result = results.get(key)
                 expected = expected_results.get(key)
                 if expected != result:
-                    print "%s \t(%s):\t %s != %s" % (domain, key, result, expected)
+                    print("%s \t(%s):\t %s != %s" % (domain, key, result, expected))
                     fail += 1
             
         if fail:
--- a/whois/__init__.py	Mon Sep 14 15:19:11 2015 +0100
+++ b/whois/__init__.py	Sun Feb 07 22:30:17 2016 +0100
@@ -1,10 +1,17 @@
+from __future__ import print_function
+from __future__ import absolute_import
+from __future__ import unicode_literals
+from __future__ import division
+from future import standard_library
+standard_library.install_aliases()
+from builtins import *
 import re
 import sys
 import os
 import subprocess
 import socket
-from parser import WhoisEntry
-from whois import NICClient
+from .parser import WhoisEntry
+from .whois import NICClient
 
 
 def whois(url, command=False):
@@ -50,7 +57,7 @@
         if not line.startswith('#')
     ]
 
-    if type(url) is not unicode:
+    if type(url) is not str:
         url = url.decode('utf-8')
     url = re.sub('^.*://', '', url.encode('idna')).split('/')[0].lower()
     domain = []
@@ -67,6 +74,6 @@
     try:
         url = sys.argv[1]
     except IndexError:
-        print 'Usage: %s url' % sys.argv[0]
+        print('Usage: %s url' % sys.argv[0])
     else:
-        print whois(url)
+        print(whois(url))
--- a/whois/parser.py	Mon Sep 14 15:19:11 2015 +0100
+++ b/whois/parser.py	Sun Feb 07 22:30:17 2016 +0100
@@ -1,3 +1,12 @@
+from __future__ import absolute_import
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from future import standard_library
+standard_library.install_aliases()
+from builtins import *
+from builtins import str
+from past.builtins import basestring
 # coding=utf-8
 # parser.py - Module for parsing whois response data
 # Copyright (c) 2008 Andrey Petrov
@@ -11,7 +20,7 @@
 import re
 try:
     import dateutil.parser as dp
-    from time_zones import tz_data
+    from .time_zones import tz_data
     DATEUTIL = True
 except ImportError:
     DATEUTIL = False
@@ -110,7 +119,7 @@
         """The first time an attribute is called it will be calculated here.
         The attribute is then set to be accessed directly by subsequent calls.
         """
-        for attr, regex in self._regex.items():
+        for attr, regex in list(self._regex.items()):
             if regex:
                 values = []
                 for value in re.findall(regex, self.text, re.IGNORECASE):
--- a/whois/time_zones.py	Mon Sep 14 15:19:11 2015 +0100
+++ b/whois/time_zones.py	Sun Feb 07 22:30:17 2016 +0100
@@ -1,3 +1,10 @@
+from __future__ import unicode_literals
+from __future__ import print_function
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
+from builtins import *
 _tz_string = '''-12 Y
 -11 X NUT SST
 -10 W CKT HAST HST TAHT TKT
--- a/whois/whois.py	Mon Sep 14 15:19:11 2015 +0100
+++ b/whois/whois.py	Sun Feb 07 22:30:17 2016 +0100
@@ -24,6 +24,14 @@
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 THE SOFTWARE.
 """
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import division
+from __future__ import absolute_import
+from future import standard_library
+standard_library.install_aliases()
+from builtins import *
+from builtins import object
 import re
 import sys
 import socket
@@ -31,17 +39,7 @@
 
 
 def enforce_ascii(a):
-    if isinstance(a, str) or isinstance(a, unicode):
-        r = ""
-        for i in a:
-            if ord(i) >= 128:
-                r += "?"
-            else:
-                r += i
-        return r
-    else:
-        return a
-
+    return a if isinstance(a, bytes) else bytes([63 if ord(c) > 127 else ord(c) for c in a])
 
 class NICClient(object):
 
@@ -102,7 +100,7 @@
             s.connect((hostname, 43))
             # end takes bytes as an input
             queryBytes = None
-            if type(query) is not unicode:
+            if type(query) is not str:
                 query = query.decode('utf-8')
 
             if hostname == NICClient.DENICHOST:
@@ -121,12 +119,12 @@
                     break
             s.close()
         except socket.error as socketerror:
-            print 'Socket Error:', socketerror
+            print('Socket Error:', socketerror)
             return ''
         else:
             nhost = None
             response = enforce_ascii(response)
-            if 'with "=xxx"' in response:
+            if b'with "=xxx"' in response:
                 return self.whois(query, hostname, flags, True)
             if flags & NICClient.WHOIS_RECURSE and nhost is None:
                 nhost = self.findwhois_server(response.decode(), hostname, query)
@@ -136,8 +134,8 @@
 
     def choose_server(self, domain):
         """Choose initial lookup NIC host"""
-        if type(domain) is not unicode:
-            domain = domain.decode('utf-8').encode('idna')
+        if type(domain) is not str:
+            domain = domain.decode('utf-8').encode('idna').decode('utf-8')
         if domain.endswith("-NORID"):
             return NICClient.NORIDHOST
         pos = domain.rfind('.')
@@ -250,4 +248,4 @@
     options, args = parse_command_line(sys.argv)
     if options.b_quicklookup:
         flags = flags | NICClient.WHOIS_QUICK
-    print nic_client.whois_lookup(options.__dict__, args[1], flags)
+    print(nic_client.whois_lookup(options.__dict__, args[1], flags))