Browse Source

Merge branch 'master' of https://github.com/Bene81/youtube-upload into Bene81-master

Arnau Sanchez 9 years ago
parent
commit
5e4847f1d2
1 changed files with 22 additions and 5 deletions
  1. 22 5
      youtube_upload/main.py

+ 22 - 5
youtube_upload/main.py

@@ -37,12 +37,12 @@ except ImportError:
     progressbar = None
 
 class InvalidCategory(Exception): pass
-class OptionsMissing(Exception): pass
+class OptionsError(Exception): pass
 class AuthenticationError(Exception): pass
 class RequestError(Exception): pass
 
 EXIT_CODES = {
-    OptionsMissing: 2,
+    OptionsError: 2,
     InvalidCategory: 3,
     RequestError: 3,
     AuthenticationError: 4,
@@ -117,6 +117,8 @@ def upload_youtube_video(youtube, options, video_path, total_videos, index):
         },
         "status": {
             "privacyStatus": options.privacy,
+            "publishAt": options.publish_at,
+
         },
         "recordingDetails": {
             "location": lib.string_to_dict(options.location),
@@ -150,14 +152,27 @@ def get_youtube_handler(options):
     return auth.get_resource(client_secrets, credentials,
         get_code_callback=get_code_callback)
 
-def run_main(parser, options, args, output=sys.stdout):
-    """Run the main scripts from the parsed options/args."""
+def parse_options_error(parser, options):
     required_options = ["title"]
     missing = [opt for opt in required_options if not getattr(options, opt)]
     if missing:
         parser.print_usage()
         msg = "Some required option are missing: {0}".format(", ".join(missing))
-        raise OptionsMissing(msg)
+        raise OptionsError(msg)
+    scheduled = getattr(options, "publish_at") != None
+    if scheduled:
+        if getattr(options, "privacy") == "listed":
+            parser.print_usage()
+            msg = "The 'publish-at' option will publish your video for all audiences. It can not be used with '--privacy=listed'."
+            raise OptionsError(msg)
+        setattr(options, "privacy", "private")
+        debug("Your video will remain private until specified date.")
+
+    """Run the main scripts from the parsed options/args."""
+
+def run_main(parser, options, args, output=sys.stdout):
+    """Run the main scripts from the parsed options/args."""
+    parse_options_error(parser, options)
     youtube = get_youtube_handler(options)
 
     if youtube:
@@ -195,6 +210,8 @@ def main(arguments):
         help='Video tags (separated by commas: "tag1, tag2,...")')
     parser.add_option('', '--privacy', dest='privacy', metavar="STRING",
         default="public", help='Privacy status (public | unlisted | private)')
+    parser.add_option('', '--publish-at', dest='publish_at', metavar="datetime",
+       default=None, help='Publish Date: YYYY-MM-DDThh:mm:ss.sZ')
     parser.add_option('', '--location', dest='location', type="string",
         default=None, metavar="latitude=VAL,longitude=VAL[,altitude=VAL]",
         help='Video location"')