Skip to content

Commit 90d1d4b

Browse files
committed
Move window, timeline and project creation into management commands
1 parent 6cf37e2 commit 90d1d4b

File tree

4 files changed

+37
-28
lines changed

4 files changed

+37
-28
lines changed

demosys/__init__.py

+4-11
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,9 @@
1+
from demosys.conf import settings
12

2-
def setup(settings_override=None):
3-
"""
4-
Initialize effects and prepare for running
53

6-
:param settings_override: (dict) keyword overrides for settings
7-
"""
8-
from demosys.effects.registry import effects
9-
from demosys.conf import settings
10-
if settings_override:
11-
settings.update(**settings_override)
12-
13-
effects.polulate(settings.EFFECTS)
4+
def setup(**kwargs):
5+
"""Initialize"""
6+
settings.update(**kwargs)
147

158

169
def run(*args, **kwargs):

demosys/management/base.py

+19
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import argparse
22
from importlib import import_module
33

4+
from demosys.conf import settings
5+
from demosys.utils.module_loading import import_string
6+
47

58
class CommandError(Exception):
69
pass
@@ -100,3 +103,19 @@ def try_import(self, name):
100103
pass
101104
else:
102105
raise ImportError("{} conflicts with an existing python module".format(name))
106+
107+
108+
class RunCommand(BaseCommand):
109+
110+
def create_window(self):
111+
window_cls_name = settings.WINDOW.get('class', 'demosys.context.glfw.GLFW_Window')
112+
window_cls = import_string(window_cls_name)
113+
window = window_cls()
114+
window.print_context_info()
115+
return window
116+
117+
def create_project(self):
118+
return import_string(settings.PROJECT)()
119+
120+
def create_timeline(self, project):
121+
return import_string(settings.TIMELINE)(project)

demosys/management/commands/run.py

+6-13
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,20 @@
11
import demosys
2-
from demosys.management.base import BaseCommand
2+
from demosys.management.base import RunCommand
33
from demosys.exceptions import ImproperlyConfigured
44
from demosys.utils.module_loading import import_string
55
from demosys.conf import settings
66

77

8-
class Command(BaseCommand):
8+
class Command(RunCommand):
99
help = "Run using the configured effect manager"
1010

1111
def add_arguments(self, parser):
1212
pass
1313

1414
def handle(self, *args, **options):
1515
demosys.setup()
16-
manager_path = getattr(settings, 'EFFECT_MANAGER')
17-
if not manager_path:
18-
raise ImproperlyConfigured("EFFECT_MANAGER not properly configured in settings")
19-
print(manager_path)
20-
try:
21-
manager_cls = import_string(manager_path)
22-
except ImportError as err:
23-
raise ImproperlyConfigured(
24-
"EFFECT_MANAGER '{}' failed to initialize: {}".format(manager_path, err))
16+
window = self.create_window()
17+
project = self.create_project()
18+
timeline = self.create_timeline(project)
2519

26-
manager = manager_cls()
27-
demosys.run(manager=manager)
20+
demosys.run(window=window, project=project, timeline=timeline)

demosys/management/commands/runeffect.py

+8-4
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,21 @@
22
Run a specific effect
33
"""
44
import demosys
5-
from demosys.management.base import CreateCommand
5+
from demosys.management.base import RunCommand
66
from demosys.project.default import Project
7+
from demosys.timeline.single import Timeline
78

89

9-
class Command(CreateCommand):
10+
class Command(RunCommand):
1011
help = "Runs an effect"
1112

1213
def add_arguments(self, parser):
1314
parser.add_argument("name", help="Name of the effect")
1415

1516
def handle(self, *args, **options):
16-
demosys.setup(settings_override={'EFFECTS': [options['name']]})
17+
demosys.setup(EFFECTS=[options['name']])
18+
window = self.create_window()
1719
project = Project(effect_module=options['name'])
18-
demosys.run(project=project)
20+
timeline = Timeline(project)
21+
22+
demosys.run(window=window, project=project, timeline=timeline)

0 commit comments

Comments
 (0)