|
@@ -37,12 +37,12 @@ except ImportError:
|
|
progressbar = None
|
|
progressbar = None
|
|
|
|
|
|
class InvalidCategory(Exception): pass
|
|
class InvalidCategory(Exception): pass
|
|
-class OptionsMissing(Exception): pass
|
|
|
|
|
|
+class OptionsError(Exception): pass
|
|
class AuthenticationError(Exception): pass
|
|
class AuthenticationError(Exception): pass
|
|
class RequestError(Exception): pass
|
|
class RequestError(Exception): pass
|
|
|
|
|
|
EXIT_CODES = {
|
|
EXIT_CODES = {
|
|
- OptionsMissing: 2,
|
|
|
|
|
|
+ OptionsError: 2,
|
|
InvalidCategory: 3,
|
|
InvalidCategory: 3,
|
|
RequestError: 3,
|
|
RequestError: 3,
|
|
AuthenticationError: 4,
|
|
AuthenticationError: 4,
|
|
@@ -102,6 +102,9 @@ def upload_youtube_video(youtube, options, video_path, total_videos, index):
|
|
description = u(options.description or "").decode("string-escape")
|
|
description = u(options.description or "").decode("string-escape")
|
|
else:
|
|
else:
|
|
description = options.description
|
|
description = options.description
|
|
|
|
+ if options.publish_at:
|
|
|
|
+ debug("Your video will remain private until specified date.")
|
|
|
|
+
|
|
tags = [u(s.strip()) for s in (options.tags or "").split(",")]
|
|
tags = [u(s.strip()) for s in (options.tags or "").split(",")]
|
|
ns = dict(title=title, n=index+1, total=total_videos)
|
|
ns = dict(title=title, n=index+1, total=total_videos)
|
|
title_template = u(options.title_template)
|
|
title_template = u(options.title_template)
|
|
@@ -116,7 +119,9 @@ def upload_youtube_video(youtube, options, video_path, total_videos, index):
|
|
"tags": tags,
|
|
"tags": tags,
|
|
},
|
|
},
|
|
"status": {
|
|
"status": {
|
|
- "privacyStatus": options.privacy,
|
|
|
|
|
|
+ "privacyStatus": ("private" if options.publish_at else options.privacy),
|
|
|
|
+ "publishAt": options.publish_at,
|
|
|
|
+
|
|
},
|
|
},
|
|
"recordingDetails": {
|
|
"recordingDetails": {
|
|
"location": lib.string_to_dict(options.location),
|
|
"location": lib.string_to_dict(options.location),
|
|
@@ -150,14 +155,18 @@ def get_youtube_handler(options):
|
|
return auth.get_resource(client_secrets, credentials,
|
|
return auth.get_resource(client_secrets, credentials,
|
|
get_code_callback=get_code_callback)
|
|
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):
|
|
|
|
+ """Check errors in options."""
|
|
required_options = ["title"]
|
|
required_options = ["title"]
|
|
missing = [opt for opt in required_options if not getattr(options, opt)]
|
|
missing = [opt for opt in required_options if not getattr(options, opt)]
|
|
if missing:
|
|
if missing:
|
|
parser.print_usage()
|
|
parser.print_usage()
|
|
msg = "Some required option are missing: {0}".format(", ".join(missing))
|
|
msg = "Some required option are missing: {0}".format(", ".join(missing))
|
|
- raise OptionsMissing(msg)
|
|
|
|
|
|
+ raise OptionsError(msg)
|
|
|
|
+
|
|
|
|
+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)
|
|
youtube = get_youtube_handler(options)
|
|
|
|
|
|
if youtube:
|
|
if youtube:
|
|
@@ -195,6 +204,8 @@ def main(arguments):
|
|
help='Video tags (separated by commas: "tag1, tag2,...")')
|
|
help='Video tags (separated by commas: "tag1, tag2,...")')
|
|
parser.add_option('', '--privacy', dest='privacy', metavar="STRING",
|
|
parser.add_option('', '--privacy', dest='privacy', metavar="STRING",
|
|
default="public", help='Privacy status (public | unlisted | private)')
|
|
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",
|
|
parser.add_option('', '--location', dest='location', type="string",
|
|
default=None, metavar="latitude=VAL,longitude=VAL[,altitude=VAL]",
|
|
default=None, metavar="latitude=VAL,longitude=VAL[,altitude=VAL]",
|
|
help='Video location"')
|
|
help='Video location"')
|