Browse Source

Support for python3

Arnau Sanchez 9 years ago
parent
commit
dcad19d648

+ 6 - 1
bin/youtube-upload

@@ -1,5 +1,10 @@
 #!/usr/bin/env python
-from youtube_upload import main
 
 if __name__ == '__main__':
+    
+    #Allows you to a relative import from the parent folder
+    import os.path, sys
+    sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir))    
+    
+    from youtube_upload import main    
     main.run()

+ 4 - 4
youtube_upload/auth/__init__.py

@@ -4,11 +4,11 @@ import json
 
 import googleapiclient.discovery
 import oauth2client
-import httplib2
+import httplib2 
 
-from .. import lib
-import console
-import browser
+from youtube_upload import lib
+from youtube_upload.auth import console
+from youtube_upload.auth import browser
 
 YOUTUBE_UPLOAD_SCOPE = ["https://www.googleapis.com/auth/youtube.upload", "https://www.googleapis.com/auth/youtube"]
 

+ 4 - 1
youtube_upload/auth/console.py

@@ -1,7 +1,10 @@
 import sys
 
 def get_code(authorize_url):
+    
     """Show authorization URL and return the code the user wrote."""
     message = "Check this link in your browser: {0}".format(authorize_url)
     sys.stderr.write(message + "\n")
-    return raw_input("Enter verification code: ")
+    try: input = raw_input #For Python2 compatability
+    except NameError: pass
+    return input("Enter verification code: ")

+ 7 - 3
youtube_upload/categories.py

@@ -1,5 +1,9 @@
-import urllib2
-import urllib
+try:
+    #import urllib2 
+    from urllib2 import urlopen    
+    import urllib
+except ImportError:
+    from urllib.request import urlopen
 import json
 
 URL = "https://www.googleapis.com/youtube/v3/videoCategories"
@@ -41,7 +45,7 @@ IDS = {
 def get(region_code="us", api_key=None):
     params = dict(part="snippet", regionCode=region_code, key=api_key)  
     full_url = URL + "?" + urllib.urlencode(params)
-    response = urllib2.urlopen(full_url)
+    response = urlopen(full_url)
     categories_info = json.loads(response.read())
     items = categories_info["items"]
     return dict((item["snippet"]["title"], item["id"]) for item in items)

+ 11 - 2
youtube_upload/lib.py

@@ -18,10 +18,19 @@ def default_sigint():
 def to_utf8(s):
     """Re-encode string from the default system encoding to UTF-8."""
     current = locale.getpreferredencoding()
-    return s.decode(current).encode("UTF-8") if s and current != "UTF-8" else s
-
+    if hasattr(s, 'decode'):#Python 3 workaround
+        return s.decode(current).encode("UTF-8") if s and current != "UTF-8" else s
+    else:
+        if isinstance(s, bytes):
+            s = bytes.decode(s)
+        return s
+       
 def debug(obj, fd=sys.stderr):
     """Write obj to standard error."""
+    try:
+        unicode
+    except NameError:
+        unicode = bytes
     string = str(obj.encode(get_encoding(fd), "backslashreplace")
                  if isinstance(obj, unicode) else obj)
     fd.write(string + "\n")

+ 10 - 7
youtube_upload/main.py

@@ -23,11 +23,11 @@ import collections
 import apiclient.errors
 import oauth2client
 
-import auth
-import upload_video
-import categories
-import lib
-import playlists
+from . import auth
+from . import upload_video
+from . import categories
+from . import lib
+from . import playlists
 
 # http://code.google.com/p/python-progressbar (>= 2.3)
 try:
@@ -93,7 +93,10 @@ def upload_youtube_video(youtube, options, video_path, total_videos, index):
     """Upload video with index (for split videos)."""
     u = lib.to_utf8
     title = u(options.title)
-    description = u(options.description or "").decode("string-escape")
+    if hasattr(u('string'), 'decode'):   
+        description = u(options.description or "").decode("string-escape")
+    else:
+        description = options.description
     tags = [u(s.strip()) for s in (options.tags or "").split(",")]
     ns = dict(title=title, n=index+1, total=total_videos)
     title_template = u(options.title_template)
@@ -119,7 +122,7 @@ def upload_youtube_video(youtube, options, video_path, total_videos, index):
     try:
         video_id = upload_video.upload(youtube, video_path, 
             request_body, progress_callback=progress.callback)
-    except apiclient.errors.HttpError, error:
+    except apiclient.errors.HttpError as error:
         raise RequestError("Server response: {0}".format(error.content.strip()))
     finally:
         progress.finish()

+ 1 - 1
youtube_upload/playlists.py

@@ -1,4 +1,4 @@
-from lib import debug
+from .lib import debug
 
 def get_playlist(youtube, title):
     """Return users's playlist ID by title (None if not found)"""

+ 5 - 2
youtube_upload/upload_video.py

@@ -1,10 +1,13 @@
-import httplib
+try:
+    import httplib
+except ImportError:
+    import http.client as httplib
 
 import googleapiclient.errors
 import apiclient.http
 import httplib2
 
-import lib
+from . import lib
 
 RETRIABLE_EXCEPTIONS = [
     IOError, httplib2.HttpLib2Error, httplib.NotConnected,