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.)
This commit is contained in:
2019-01-31 11:33:21 +01:00
parent 41306350da
commit c4d000a896

View File

@@ -666,8 +666,7 @@ class ExecCommand(AbstractSubprocessCommand):
await self.subprocess(shlex.split(settings['cmd']))
@command_executor('blender_render')
class BlenderRenderCommand(AbstractSubprocessCommand):
class AbstractBlenderCommand(AbstractSubprocessCommand):
re_global_progress = attr.ib(init=False)
re_time = attr.ib(init=False)
re_remaining = attr.ib(init=False)
@@ -709,23 +708,6 @@ class BlenderRenderCommand(AbstractSubprocessCommand):
return 'blender_cmd %r does not exist' % cmd[0]
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)
if err:
return err
@@ -779,14 +761,6 @@ class BlenderRenderCommand(AbstractSubprocessCommand):
'--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
def parse_render_line(self, line: str) -> typing.Optional[dict]:
@@ -865,6 +839,43 @@ class BlenderRenderCommand(AbstractSubprocessCommand):
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')
class BlenderRenderProgressiveCommand(BlenderRenderCommand):
def validate(self, settings: Settings):
@@ -995,6 +1006,7 @@ class MergeProgressiveRendersCommand(AbstractSubprocessCommand):
shutil.move(str(src), str(dst))
# TODO(Sybren): maybe subclass AbstractBlenderCommand instead?
@command_executor('blender_render_audio')
class BlenderRenderAudioCommand(BlenderRenderCommand):
def validate(self, settings: Settings):