From 641a429e665a316caa08ad163fd6fa8b63cef1d2 Mon Sep 17 00:00:00 2001 From: Grant Sanderson Date: Wed, 9 Jan 2019 12:49:43 -0800 Subject: [PATCH] Fixed stage_scenes, which required updating get_scene_output_directory and get_module --- manimlib/config.py | 2 +- manimlib/utils/output_directory_getters.py | 5 ++++- manimlib/stage_scenes.py => stage_scenes.py | 15 +++++++++++---- 3 files changed, 16 insertions(+), 6 deletions(-) rename manimlib/stage_scenes.py => stage_scenes.py (83%) diff --git a/manimlib/config.py b/manimlib/config.py index a5d78f0d..ac150bc1 100644 --- a/manimlib/config.py +++ b/manimlib/config.py @@ -88,7 +88,7 @@ def get_module(file_name): print(f"Failed to render scene: {str(e)}") sys.exit(2) else: - module_name = file_name.split(os.sep)[-1].replace(".py", "") + module_name = file_name.replace(os.sep, ".").replace(".py", "") spec = importlib.util.spec_from_file_location(module_name, file_name) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) diff --git a/manimlib/utils/output_directory_getters.py b/manimlib/utils/output_directory_getters.py index b1a536c8..113414aa 100644 --- a/manimlib/utils/output_directory_getters.py +++ b/manimlib/utils/output_directory_getters.py @@ -20,7 +20,10 @@ def guarantee_existance(path): def get_scene_output_directory(scene_class): - return guarantee_existance(os.path.join(VIDEO_DIR, scene_class.__module__)) + return guarantee_existance(os.path.join( + VIDEO_DIR, + scene_class.__module__.replace(".", os.path.sep) + )) def get_movie_output_directory(scene_class, camera_config, frame_duration): diff --git a/manimlib/stage_scenes.py b/stage_scenes.py similarity index 83% rename from manimlib/stage_scenes.py rename to stage_scenes.py index 23e0283f..5babab91 100644 --- a/manimlib/stage_scenes.py +++ b/stage_scenes.py @@ -1,19 +1,26 @@ +#!/usr/bin/env python import inspect import os import sys +import importlib from manimlib.constants import PRODUCTION_QUALITY_CAMERA_CONFIG from manimlib.constants import PRODUCTION_QUALITY_FRAME_DURATION -from manimlib.extract_scene import get_module -from manimlib.extract_scene import is_scene +from manimlib.config import get_module +from manimlib.extract_scene import is_child_scene from manimlib.utils.output_directory_getters import get_movie_output_directory def get_sorted_scene_classes(module_name): module = get_module(module_name) + importlib.import_module(module.__name__) line_to_scene = {} - for name, scene_class in inspect.getmembers(module, is_scene): - if inspect.getmodule(scene_class) != module: + name_scene_list = inspect.getmembers( + module, + lambda obj: is_child_scene(obj, module) + ) + for name, scene_class in name_scene_list: + if inspect.getmodule(scene_class).__name__ != module.__name__: continue lines, line_no = inspect.getsourcelines(scene_class) line_to_scene[line_no] = scene_class