2015-05-06 17:58:34 -07:00
|
|
|
import sys
|
|
|
|
import getopt
|
|
|
|
import imp
|
|
|
|
import itertools as it
|
2015-05-07 21:28:02 -07:00
|
|
|
from helpers import cammel_case_initials
|
2015-05-06 17:58:34 -07:00
|
|
|
|
2015-05-07 21:28:02 -07:00
|
|
|
from constants import *
|
2015-05-06 17:58:34 -07:00
|
|
|
|
2015-05-07 21:28:02 -07:00
|
|
|
HELP_MESSAGE = """
|
|
|
|
<script name> [-s <scene name or initials> -a <arg_string>]
|
|
|
|
"""
|
|
|
|
SCENE_NOT_FOUND_MESSAGE = """
|
|
|
|
No scene name or ititials \"%s\" and arg string \"%s\"
|
|
|
|
"""
|
|
|
|
MULTIPE_SCENES_FOUND_MESSAGE = """
|
|
|
|
Multiple Scene/arg pairs satisfying this
|
|
|
|
description, choose from the following list:
|
|
|
|
"""
|
|
|
|
CHOOSE_NUMBER_MESSAGE = "Choose a number from above: "
|
|
|
|
INVALID_NUMBER_MESSAGE = "Invalid number!"
|
|
|
|
|
|
|
|
def find_scene_class_and_args(scene_string, args_extension,
|
|
|
|
scene_classes):
|
|
|
|
possible_results = []
|
|
|
|
for SceneClass in scene_classes:
|
|
|
|
possible_names = map(str.lower, (
|
|
|
|
"",
|
|
|
|
SceneClass.__name__,
|
|
|
|
cammel_case_initials(SceneClass.__name__)
|
|
|
|
))
|
|
|
|
if scene_string.lower() in possible_names:
|
|
|
|
if len(SceneClass.args_list) == 0:
|
|
|
|
possible_results.append((SceneClass, ()))
|
|
|
|
for args in SceneClass.args_list:
|
|
|
|
assert(isinstance(args, tuple))
|
|
|
|
this_args_extension = SceneClass.args_to_string(*args)
|
|
|
|
if args_extension.lower() in ("", this_args_extension.lower()):
|
|
|
|
possible_results.append((SceneClass, args))
|
|
|
|
num_matches = len(possible_results)
|
|
|
|
if num_matches == 0:
|
|
|
|
print SCENE_NOT_FOUND_MESSAGE%(scene_string, args_extension)
|
2015-05-06 17:58:34 -07:00
|
|
|
sys.exit(0)
|
2015-05-07 21:28:02 -07:00
|
|
|
elif num_matches == 1:
|
2015-05-06 17:58:34 -07:00
|
|
|
index = 0
|
|
|
|
else:
|
2015-05-07 21:28:02 -07:00
|
|
|
print MULTIPE_SCENES_FOUND_MESSAGE
|
2015-05-06 17:58:34 -07:00
|
|
|
count = 0
|
2015-05-07 21:28:02 -07:00
|
|
|
for SceneClass, args in possible_results:
|
|
|
|
print "%d: %s%s"%(
|
2015-05-06 17:58:34 -07:00
|
|
|
count,
|
2015-05-07 21:28:02 -07:00
|
|
|
SceneClass.__name__,
|
|
|
|
SceneClass.args_to_string(*args),
|
2015-05-06 17:58:34 -07:00
|
|
|
)
|
|
|
|
count += 1
|
2015-05-07 21:28:02 -07:00
|
|
|
try:
|
|
|
|
index = input(CHOOSE_NUMBER_MESSAGE)
|
|
|
|
assert(type(index) == int)
|
|
|
|
assert(index in range(num_matches))
|
|
|
|
except:
|
|
|
|
print INVALID_NUMBER_MESSAGE
|
|
|
|
sys.exit(0)
|
|
|
|
return possible_results[index]
|
2015-05-06 17:58:34 -07:00
|
|
|
|
2015-05-07 21:28:02 -07:00
|
|
|
def command_line_create_scene(sys_argv, scene_classes, movie_prefix = ""):
|
2015-05-06 17:58:34 -07:00
|
|
|
try:
|
2015-05-07 21:28:02 -07:00
|
|
|
opts, args = getopt.getopt(sys_argv, "ho:s:a:l")
|
2015-05-06 17:58:34 -07:00
|
|
|
except getopt.GetoptError as err:
|
|
|
|
print str(err)
|
|
|
|
sys.exit(2)
|
2015-05-07 21:28:02 -07:00
|
|
|
scene_string = ""
|
2015-05-06 17:58:34 -07:00
|
|
|
args_extension = ""
|
2015-05-07 21:28:02 -07:00
|
|
|
display_config = PRODUCTION_QUALITY_DISPLAY_CONFIG
|
2015-05-06 17:58:34 -07:00
|
|
|
for opt, arg in opts:
|
|
|
|
if opt == '-h':
|
2015-05-07 21:28:02 -07:00
|
|
|
print HELP_MESSAGE
|
2015-05-06 17:58:34 -07:00
|
|
|
return
|
2015-05-07 21:28:02 -07:00
|
|
|
elif opt == '-s':
|
|
|
|
scene_string = arg
|
|
|
|
elif opt == '-a':
|
2015-05-06 17:58:34 -07:00
|
|
|
args_extension = arg
|
2015-05-07 21:28:02 -07:00
|
|
|
elif opt == '-l':
|
|
|
|
display_config = LOW_QUALITY_DISPLAY_CONFIG
|
2015-05-17 15:08:51 -07:00
|
|
|
if len(args) > 0:
|
|
|
|
scene_string = args[0]
|
|
|
|
if len(args) > 1:
|
|
|
|
args_extension = args[1]
|
2015-05-07 21:28:02 -07:00
|
|
|
SceneClass, args = find_scene_class_and_args(
|
|
|
|
scene_string,
|
2015-05-06 17:58:34 -07:00
|
|
|
args_extension,
|
2015-05-07 21:28:02 -07:00
|
|
|
scene_classes
|
2015-05-06 17:58:34 -07:00
|
|
|
)
|
2015-05-07 21:28:02 -07:00
|
|
|
name = SceneClass.__name__ + SceneClass.args_to_string(*args)
|
2015-05-12 14:51:21 -07:00
|
|
|
print "Constructing %s..."%name
|
2015-05-07 21:28:02 -07:00
|
|
|
scene = SceneClass(*args, display_config = display_config)
|
|
|
|
scene.write_to_movie(movie_prefix + name)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-05-06 17:58:34 -07:00
|
|
|
|