Skip to content
Snippets Groups Projects
Commit c4d000a8 authored by Sybren A. Stüvel's avatar Sybren A. Stüvel
Browse files

Separated BlenderRenderCommand into an abstract superclass

This superclass AbstractBlenderCommand takes less parameters so that it'll
be easier to add Blender commands that don't use certain parameters (such
as frame range, render format, etc.)
parent 41306350
No related branches found
No related tags found
No related merge requests found
...@@ -666,8 +666,7 @@ class ExecCommand(AbstractSubprocessCommand): ...@@ -666,8 +666,7 @@ class ExecCommand(AbstractSubprocessCommand):
await self.subprocess(shlex.split(settings['cmd'])) await self.subprocess(shlex.split(settings['cmd']))
@command_executor('blender_render') class AbstractBlenderCommand(AbstractSubprocessCommand):
class BlenderRenderCommand(AbstractSubprocessCommand):
re_global_progress = attr.ib(init=False) re_global_progress = attr.ib(init=False)
re_time = attr.ib(init=False) re_time = attr.ib(init=False)
re_remaining = attr.ib(init=False) re_remaining = attr.ib(init=False)
...@@ -709,23 +708,6 @@ class BlenderRenderCommand(AbstractSubprocessCommand): ...@@ -709,23 +708,6 @@ class BlenderRenderCommand(AbstractSubprocessCommand):
return 'blender_cmd %r does not exist' % cmd[0] return 'blender_cmd %r does not exist' % cmd[0]
settings['blender_cmd'] = cmd settings['blender_cmd'] = cmd
render_output, err = self._setting(settings, 'render_output', False)
if err:
return err
if render_output:
outpath = Path(render_output).parent
try:
outpath.mkdir(parents=True, exist_ok=True)
except Exception as ex:
return '"render_output": dir %s cannot be created: %s' % (outpath, ex)
_, err = self._setting(settings, 'frames', False)
if err:
return err
_, err = self._setting(settings, 'render_format', False)
if err:
return err
filepath, err = self._setting(settings, 'filepath', True) filepath, err = self._setting(settings, 'filepath', True)
if err: if err:
return err return err
...@@ -779,14 +761,6 @@ class BlenderRenderCommand(AbstractSubprocessCommand): ...@@ -779,14 +761,6 @@ class BlenderRenderCommand(AbstractSubprocessCommand):
'--python', override_filepath.as_posix(), '--python', override_filepath.as_posix(),
]) ])
if settings.get('python_expr'):
cmd.extend(['--python-expr', settings['python_expr']])
if settings.get('render_output'):
cmd.extend(['--render-output', settings['render_output']])
if settings.get('format'):
cmd.extend(['--render-format', settings['format']])
if settings.get('frames'):
cmd.extend(['--render-frame', settings['frames']])
return cmd return cmd
def parse_render_line(self, line: str) -> typing.Optional[dict]: def parse_render_line(self, line: str) -> typing.Optional[dict]:
...@@ -865,6 +839,43 @@ class BlenderRenderCommand(AbstractSubprocessCommand): ...@@ -865,6 +839,43 @@ class BlenderRenderCommand(AbstractSubprocessCommand):
return 'pid=%d > %s' % (self.proc.pid, line) return 'pid=%d > %s' % (self.proc.pid, line)
@command_executor('blender_render')
class BlenderRenderCommand(AbstractBlenderCommand):
def validate(self, settings: Settings):
render_output, err = self._setting(settings, 'render_output', False)
if err:
return err
if render_output:
outpath = Path(render_output).parent
try:
outpath.mkdir(parents=True, exist_ok=True)
except Exception as ex:
return '"render_output": dir %s cannot be created: %s' % (outpath, ex)
_, err = self._setting(settings, 'frames', False)
if err:
return err
_, err = self._setting(settings, 'render_format', False)
if err:
return err
return super().validate(settings)
async def _build_blender_cmd(self, settings) -> typing.List[str]:
cmd = await super()._build_blender_cmd(settings)
if settings.get('python_expr'):
cmd.extend(['--python-expr', settings['python_expr']])
if settings.get('render_output'):
cmd.extend(['--render-output', settings['render_output']])
if settings.get('format'):
cmd.extend(['--render-format', settings['format']])
if settings.get('frames'):
cmd.extend(['--render-frame', settings['frames']])
return cmd
@command_executor('blender_render_progressive') @command_executor('blender_render_progressive')
class BlenderRenderProgressiveCommand(BlenderRenderCommand): class BlenderRenderProgressiveCommand(BlenderRenderCommand):
def validate(self, settings: Settings): def validate(self, settings: Settings):
...@@ -995,6 +1006,7 @@ class MergeProgressiveRendersCommand(AbstractSubprocessCommand): ...@@ -995,6 +1006,7 @@ class MergeProgressiveRendersCommand(AbstractSubprocessCommand):
shutil.move(str(src), str(dst)) shutil.move(str(src), str(dst))
# TODO(Sybren): maybe subclass AbstractBlenderCommand instead?
@command_executor('blender_render_audio') @command_executor('blender_render_audio')
class BlenderRenderAudioCommand(BlenderRenderCommand): class BlenderRenderAudioCommand(BlenderRenderCommand):
def validate(self, settings: Settings): def validate(self, settings: Settings):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment