add error codes to exits

This commit is contained in:
Devin Neal 2018-12-25 19:51:03 -08:00
parent e7aff666bd
commit 2942485e4c
2 changed files with 16 additions and 7 deletions

View file

@ -76,8 +76,12 @@ def get_module(file_name):
if file_name == "-": if file_name == "-":
module = types.ModuleType("InputModule") module = types.ModuleType("InputModule")
code = "from big_ol_pile_of_manim_imports import *\n\n" + sys.stdin.read() code = "from big_ol_pile_of_manim_imports import *\n\n" + sys.stdin.read()
try:
exec(code, module.__dict__) exec(code, module.__dict__)
return module return module
except Exception as e:
print(f"Failed to render scene: {str(e)}")
sys.exit(2)
else: else:
module_name = file_name.replace(".py", "").replace(os.sep, ".") module_name = file_name.replace(".py", "").replace(os.sep, ".")
return importlib.import_module(module_name) return importlib.import_module(module_name)

View file

@ -49,13 +49,15 @@ def handle_scene(scene, **config):
sys.stdout = curr_stdout sys.stdout = curr_stdout
def is_scene(obj): def is_child_scene(obj, module):
if not inspect.isclass(obj): if not inspect.isclass(obj):
return False return False
if not issubclass(obj, Scene): if not issubclass(obj, Scene):
return False return False
if obj == Scene: if obj == Scene:
return False return False
if not obj.__module__.startswith(module.__name__):
return False
return True return True
@ -73,20 +75,20 @@ def prompt_user_for_choice(name_to_obj):
] ]
except KeyError: except KeyError:
print(manimlib.constants.INVALID_NUMBER_MESSAGE) print(manimlib.constants.INVALID_NUMBER_MESSAGE)
sys.exit() sys.exit(2)
user_input = input(manimlib.constants.CHOOSE_NUMBER_MESSAGE) user_input = input(manimlib.constants.CHOOSE_NUMBER_MESSAGE)
return [ return [
name_to_obj[num_to_name[int(num_str)]] name_to_obj[num_to_name[int(num_str)]]
for num_str in user_input.split(",") for num_str in user_input.split(",")
] ]
except EOFError:
sys.exit(1)
def get_scene_classes(scene_names_to_classes, config): def get_scene_classes(scene_names_to_classes, config):
if len(scene_names_to_classes) == 0: if len(scene_names_to_classes) == 0:
print(manimlib.constants.NO_SCENE_MESSAGE) print(manimlib.constants.NO_SCENE_MESSAGE)
return [] return []
if len(scene_names_to_classes) == 1:
return list(scene_names_to_classes.values())
if config["scene_name"] in scene_names_to_classes: if config["scene_name"] in scene_names_to_classes:
return [scene_names_to_classes[config["scene_name"]]] return [scene_names_to_classes[config["scene_name"]]]
if config["scene_name"] != "": if config["scene_name"] != "":
@ -99,7 +101,8 @@ def get_scene_classes(scene_names_to_classes, config):
def main(config): def main(config):
module = config["module"] module = config["module"]
scene_names_to_classes = dict(inspect.getmembers(module, is_scene)) scene_names_to_classes = dict(
inspect.getmembers(module, lambda x: is_child_scene(x, module)))
scene_kwargs = dict([ scene_kwargs = dict([
(key, config[key]) (key, config[key])
@ -125,11 +128,13 @@ def main(config):
try: try:
handle_scene(SceneClass(**scene_kwargs), **config) handle_scene(SceneClass(**scene_kwargs), **config)
play_finish_sound() play_finish_sound()
sys.exit(0)
except Exception: except Exception:
print("\n\n") print("\n\n")
traceback.print_exc() traceback.print_exc()
print("\n\n") print("\n\n")
play_error_sound() play_error_sound()
sys.exit(2)
if __name__ == "__main__": if __name__ == "__main__":