2015-05-06 17:58:34 -07:00
|
|
|
import sys
|
|
|
|
import getopt
|
|
|
|
import imp
|
|
|
|
import itertools as it
|
2015-06-10 22:00:35 -07:00
|
|
|
import inspect
|
2015-05-07 21:28:02 -07:00
|
|
|
from helpers import cammel_case_initials
|
2015-06-10 22:00:35 -07:00
|
|
|
from scene import Scene
|
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 = """
|
2015-06-10 22:00:35 -07:00
|
|
|
<script name> [<scene name or initials>] [<arg_string>]
|
2015-05-07 21:28:02 -07:00
|
|
|
"""
|
|
|
|
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-06-10 22:00:35 -07:00
|
|
|
def command_line_create_scene(sys_argv, movie_prefix = ""):
|
|
|
|
scene_classes = [
|
|
|
|
pair[1]
|
|
|
|
for pair in inspect.getmembers(
|
|
|
|
sys.modules["__main__"],
|
|
|
|
lambda obj : inspect.isclass(obj) and \
|
|
|
|
issubclass(obj, Scene) and \
|
|
|
|
obj != Scene
|
|
|
|
)
|
|
|
|
]
|
2015-05-06 17:58:34 -07:00
|
|
|
try:
|
2015-06-10 22:00:35 -07:00
|
|
|
opts, args = getopt.getopt(sys_argv, "h:l:p")
|
2015-05-06 17:58:34 -07:00
|
|
|
except getopt.GetoptError as err:
|
|
|
|
print str(err)
|
|
|
|
sys.exit(2)
|
2015-06-10 22:00:35 -07:00
|
|
|
|
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-06-09 11:51:40 -07:00
|
|
|
preview = False
|
2015-06-10 22:00:35 -07:00
|
|
|
|
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 == '-l':
|
|
|
|
display_config = LOW_QUALITY_DISPLAY_CONFIG
|
2015-06-09 11:51:40 -07:00
|
|
|
elif opt == '-p':
|
|
|
|
display_config = LOW_QUALITY_DISPLAY_CONFIG
|
|
|
|
preview = True
|
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)
|
2015-06-09 11:51:40 -07:00
|
|
|
if preview:
|
|
|
|
scene.preview()
|
|
|
|
else:
|
|
|
|
scene.write_to_movie(movie_prefix + name)
|
2015-05-07 21:28:02 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-05-06 17:58:34 -07:00
|
|
|
|