Browse Source

minor refactors

Arnau Sanchez 9 years ago
parent
commit
dc85917d76
2 changed files with 17 additions and 15 deletions
  1. 9 9
      youtube_upload/main.py
  2. 8 6
      youtube_upload/upload_video.py

+ 9 - 9
youtube_upload/main.py

@@ -1,4 +1,4 @@
-#!/usr/bin/python2
+#!/usr/bin/env python
 # 
 # Upload videos to Youtube from the command-line using APIv3.
 #
@@ -51,7 +51,7 @@ debug = lib.debug
 
 def get_progress_info():
     """Return a function callback to update the progressbar."""
-    build = collections.namedtuple("ProgressInfo", ["callback", "finish"])
+    progressinfo = collections.namedtuple("ProgressInfo", ["callback", "finish"])
 
     if progressbar:
         widgets = [
@@ -66,9 +66,9 @@ def get_progress_info():
                 bar.maxval = total_size
                 bar.start()
             bar.update(completed)
-        return build(callback=_callback, finish=bar.finish)
+        return progressinfo(callback=_callback, finish=bar.finish)
     else:
-        return build(callback=None, finish=lambda: True)
+        return progressinfo(callback=None, finish=lambda: True)
 
 def get_category_id(category):
     """Return category ID from its name."""
@@ -91,12 +91,12 @@ def upload_video(youtube, options, video_path, total_videos, index):
     request_body = {
         "snippet": {
             "title": complete_title,
-            "tags": map(str.strip, (options.tags or "").split(",")),
             "description": description,
             "categoryId": category_id,
+            "tags": [s.strip() for s in (options.tags or "").split(",")],
         },
         "status": {
-            "privacyStatus": options.privacy
+            "privacyStatus": options.privacy,
         },
         "recordingDetails": {
             "location": lib.string_to_dict(options.location),
@@ -104,8 +104,8 @@ def upload_video(youtube, options, video_path, total_videos, index):
     }
 
     debug("Start upload: {0} ({1})".format(video_path, complete_title))
-    video_id = youtube_upload.upload_video.upload(youtube, video_path, request_body,
-        progress_callback=progress.callback)
+    video_id = youtube_upload.upload_video.upload(youtube, video_path, 
+        request_body, progress_callback=progress.callback)
     progress.finish()
     return video_id
 
@@ -115,7 +115,7 @@ def run_main(parser, options, args, output=sys.stdout):
     missing = [opt for opt in required_options if not getattr(options, opt)]
     if missing:
         parser.print_usage()
-        msg = "Some required option are missing: %s" % ", ".join(missing)
+        msg = "Some required option are missing: {0}".format(", ".join(missing))
         raise OptionsMissing(msg)
     home = os.path.expanduser("~")
     default_client_secrets = lib.get_first_existing_filename(

+ 8 - 6
youtube_upload/upload_video.py

@@ -1,17 +1,17 @@
 import httplib
 
+import googleapiclient.errors
 import apiclient.http
 import httplib2
-from googleapiclient.errors import ResumableUploadError
 
 import lib
 
 RETRIABLE_EXCEPTIONS = [
-    httplib2.HttpLib2Error, IOError, httplib.NotConnected,
+    IOError, googleapiclient.errors.ResumableUploadError,
+    httplib2.HttpLib2Error, httplib.NotConnected,
     httplib.IncompleteRead, httplib.ImproperConnectionState,
     httplib.CannotSendRequest, httplib.CannotSendHeader,
     httplib.ResponseNotReady, httplib.BadStatusLine,
-    ResumableUploadError
 ]
 
 def _upload_to_request(request, progress_callback):
@@ -22,15 +22,17 @@ def _upload_to_request(request, progress_callback):
             if "id" in response:
                 return response['id']
             else:
-                raise KeyError("The response has no 'id' field")
+                raise KeyError("Expected field 'id' not found in response")
         elif status and progress_callback:
             progress_callback(status.total_size, status.resumable_progress)
         
-def upload(resource, path, body, chunksize=1024*1024, progress_callback=None):
+def upload(resource, path, body, chunksize=1024*1024, 
+        progress_callback=None, max_retries=10):
     """Upload video to Youtube. Return video ID."""
     body_keys = ",".join(body.keys())
     media = apiclient.http.MediaFileUpload(path, chunksize=chunksize, 
         resumable=True, mimetype="application/octet-stream")
     request = resource.videos().insert(part=body_keys, body=body, media_body=media)
     upload_fun = lambda: _upload_to_request(request, progress_callback)
-    return lib.retriable_exceptions(upload_fun, RETRIABLE_EXCEPTIONS, max_retries=10)
+    return lib.retriable_exceptions(upload_fun, 
+        RETRIABLE_EXCEPTIONS, max_retries=max_retries)