Some fixes for compatibility with python3
diff --git a/predictionio/__init__.py b/predictionio/__init__.py
index 8863f65..b76338e 100644
--- a/predictionio/__init__.py
+++ b/predictionio/__init__.py
@@ -14,7 +14,10 @@
# import packages
import re
-import httplib
+try:
+ import httplib
+except ImportError:
+ from http import client as httplib
import json
import urllib
diff --git a/predictionio/connection.py b/predictionio/connection.py
index 3efd9ab..0ce02dc 100644
--- a/predictionio/connection.py
+++ b/predictionio/connection.py
@@ -1,7 +1,20 @@
-import Queue
+try:
+ import Queue
+except ImportError:
+ import queue as Queue
import threading
-import httplib
+
+try:
+ import httplib
+except ImportError:
+ from http import client as httplib
+
+try:
+ from urllib import urlencode
+except ImportError:
+ from urllib.parse import urlencode
+
import urllib
import datetime
import logging
@@ -64,7 +77,7 @@
self.params = params
# use queue to implement response, store AsyncResponse object
self.response_q = Queue.Queue(1)
- self.qpath = "%s?%s" % (self.path, urllib.urlencode(self.params))
+ self.qpath = "%s?%s" % (self.path, urlencode(self.params))
self._response = None
# response function to be called to handle the response
self.rfunc = None
@@ -178,7 +191,7 @@
mod_headers["Connection"] = "keep-alive"
enc_body = None
if body: # if body is not empty
- enc_body = urllib.urlencode(body)
+ enc_body = urlencode(body)
mod_headers[
"Content-type"] = "application/x-www-form-urlencoded"
#mod_headers["Accept"] = "text/plain"
diff --git a/tests/predictionio_test.py b/tests/predictionio_test.py
index 9f2e8d7..9442019 100644
--- a/tests/predictionio_test.py
+++ b/tests/predictionio_test.py
@@ -6,7 +6,10 @@
import threading
import time
-import httplib
+try:
+ import httplib
+except ImportError:
+ from http import client as httplib
import urllib
APP_KEY = "GToKwk78As0LBp2fAx2YNUBPZFZvtwy6MJkGwRASiD6Q77JjBnTaXBxzBTd52ICE" # replace this with your AppKey
@@ -17,7 +20,7 @@
err = "Require PredictionIO Python SDK version >= %s" % MIN_VERSION
raise Exception(err)
-print predictionio.__version__
+#print predictionio.__version__
#predictionio.connection.enable_log()
class TestPredictionIO(unittest.TestCase):
@@ -81,7 +84,7 @@
# read, modify, write
user3 = client.get_user(uid3)
self.assertEqual(user3, {"pio_uid" : uid3, "pio_latlng" : [4.5,67.8], "pio_inactive" : True})
- del user3["pio_uid"]
+ del user3["pio_uid"]
user3["pio_latlng"] = [5.6,10.11]
user3["pio_inactive"] = False
user3["custom1"] = "food"
@@ -125,7 +128,7 @@
item3 = client.get_item(iid3)
item4 = client.get_item(iid4)
item5 = client.get_item(iid5)
-
+
del item1["pio_startT"] # pio_startT is automatically inserted, don't compare
self.assertEqual(item1, {"pio_iid": iid1, "pio_itypes": ("t1", "t2", "t3") } )
del item2["pio_startT"]
@@ -149,7 +152,7 @@
# others still exist
item3 = client.get_item(iid3)
self.assertEqual(item3, {"pio_iid": iid3, "pio_itypes": ("t2",), "pio_price": 4.99, "pio_profit": 2.0, "pio_startT": 12345667, "pio_endT": 4567788, "pio_latlng": [1.345, 9.876], "pio_inactive": True } )
-
+
# read, modify, write
del item3["pio_iid"]
item3_itypes = item3.pop("pio_itypes")
@@ -158,7 +161,7 @@
client.create_item(iid3, item3_itypes, item3)
updated_item3 = client.get_item(iid3)
self.assertEqual(updated_item3, {"pio_iid": iid3, "pio_itypes": ("t2",), "pio_price": 6.99, "pio_profit": 2.0, "pio_startT": 12345667, "pio_endT": 4567788, "pio_latlng": [1.345, 9.876], "pio_inactive": True, "custom1": "some value" } )
-
+
client.close()
def test_item(self):
@@ -213,12 +216,12 @@
client.identify("u111")
for i in range(100):
client.arecord_action_on_item("like", str(i))
-
+
n = 1
while n > 0:
n = client.pending_requests()
time.sleep(0.1)
- print n
+ #print n
client.close()
@@ -233,7 +236,7 @@
while n > 0:
n = client.pending_requests()
time.sleep(0.1)
- print n
+ #print n
client.close()