Rearrange how passing in no module or scenes is handled

This commit is contained in:
Grant Sanderson 2021-01-02 22:20:13 -08:00
parent 93fe783b80
commit e01496e8bd
2 changed files with 34 additions and 34 deletions

View file

@ -1,13 +1,18 @@
import inspect
import itertools as it
import sys
import logging
from manimlib.scene.scene import Scene
from manimlib.scene.scene import BlankScene
from manimlib.config import get_custom_defaults
import manimlib.constants
class BlankScene(Scene):
def construct(self):
exec(get_custom_defaults()["universal_import_line"])
self.embed()
def is_child_scene(obj, module):
if not inspect.isclass(obj):
return False
@ -21,31 +26,29 @@ def is_child_scene(obj, module):
def prompt_user_for_choice(scene_classes):
num_to_class = {}
for count, scene_class in zip(it.count(1), scene_classes):
name_to_class = {}
for scene_class in scene_classes:
name = scene_class.__name__
print("%d: %s" % (count, name))
num_to_class[count] = scene_class
print(name)
name_to_class[name] = scene_class
try:
user_input = input(manimlib.constants.CHOOSE_NUMBER_MESSAGE)
user_input = input(
"\nThat module has mulziple scenes, which "
"ones would you like to render?\n Scene Name: "
)
return [
num_to_class[int(num_str)]
for num_str in user_input.split(",")
name_to_class[user_input]
for num_str in user_input.replace(" ", "").split(",")
]
except KeyError:
print(manimlib.constants.INVALID_NUMBER_MESSAGE)
logging.log(logging.ERROR, "Invalid scene")
sys.exit(2)
user_input = input(manimlib.constants.CHOOSE_NUMBER_MESSAGE)
return [
num_to_class[int(num_str)]
for num_str in user_input.split(",")
]
except EOFError:
sys.exit(1)
def get_scenes_to_render(scene_classes, config):
scene_kwargs = dict([
def get_scene_config(config):
return dict([
(key, config[key])
for key in [
"window_config",
@ -59,19 +62,17 @@ def get_scenes_to_render(scene_classes, config):
]
])
if len(config["scene_names"]) == 0:
# If no module or scenes were passed in, just run the blank scene
return [BlankScene(**scene_kwargs)]
def get_scenes_to_render(scene_classes, scene_config, config):
if config["write_all"]:
return [sc(**scene_kwargs) for sc in scene_classes]
return [sc(**scene_config) for sc in scene_classes]
result = []
for scene_name in config["scene_names"]:
found = False
for scene_class in scene_classes:
if scene_class.__name__ == scene_name:
scene = scene_class(**scene_kwargs)
scene = scene_class(**scene_config)
result.append(scene)
found = True
break
@ -85,14 +86,14 @@ def get_scenes_to_render(scene_classes, config):
)
if result:
return result
result = [scene_classes[0]] if len(scene_classes) == 1 else prompt_user_for_choice(scene_classes)
return [scene_class(**scene_kwargs) for scene_class in result]
if len(scene_classes) == 1:
result = [scene_classes[0]]
else:
result = prompt_user_for_choice(scene_classes)
return [scene_class(**scene_config) for scene_class in result]
def get_scene_classes_from_module(module):
if module is None:
# If no module was passed in, just run the blank scene
return []
if hasattr(module, "SCENES_IN_ORDER"):
return module.SCENES_IN_ORDER
else:
@ -107,6 +108,11 @@ def get_scene_classes_from_module(module):
def main(config):
module = config["module"]
scene_config = get_scene_config(config)
if module is None:
# If no module was passed in, just play the blank scene
return [BlankScene(**scene_config)]
all_scene_classes = get_scene_classes_from_module(module)
scenes = get_scenes_to_render(all_scene_classes, config)
scenes = get_scenes_to_render(all_scene_classes, scene_config, config)
return scenes

View file

@ -575,9 +575,3 @@ class Scene(Container):
class EndSceneEarlyException(Exception):
pass
class BlankScene(Scene):
def construct(self):
exec(get_custom_defaults()["universal_import_line"])
self.embed()