diff --git a/packages/flamenco/flamenco/exceptions.py b/packages/flamenco/flamenco/exceptions.py new file mode 100644 index 0000000000000000000000000000000000000000..9e88b11761bfc689fc03c2ae66e12fd668e63794 --- /dev/null +++ b/packages/flamenco/flamenco/exceptions.py @@ -0,0 +1,9 @@ +"""Flamenco-specific exceptions.""" + + +class FlamencoException(Exception): + """Base exception for all Flamenco-specific exceptions.""" + + +class JobSettingError(FlamencoException): + """Raised when a job's settings contains errors.""" diff --git a/packages/flamenco/flamenco/job_compilers/abstract_compiler.py b/packages/flamenco/flamenco/job_compilers/abstract_compiler.py index 1215b083b7eb9b3c8194641c7c16354d11d5f8f5..42326ccf157a0e49e171e77b06ca2b6e620f34d6 100644 --- a/packages/flamenco/flamenco/job_compilers/abstract_compiler.py +++ b/packages/flamenco/flamenco/job_compilers/abstract_compiler.py @@ -7,9 +7,32 @@ class AbstractJobCompiler(object): task_manager = attr.ib(cmp=False, hash=False) _log = attrs_extra.log('%s.AbstractJobType' % __name__) + REQUIRED_SETTINGS = [] + def compile(self, job): """Compiles the job into a list of tasks. Calls self.task_manager.create_task(...) to create the task in the database. """ raise NotImplementedError() + + def validate_job_settings(self, job): + """Raises an exception if required settings are missing. + + :raises: flamenco.exceptions.JobSettingError + """ + from pillarsdk import Resource + + job_settings = job['settings'] + if isinstance(job_settings, Resource): + job_settings = job_settings.to_dict() + + missing = [key for key in self.REQUIRED_SETTINGS + if key not in job_settings] + + if not missing: + return + + from flamenco import exceptions + raise exceptions.JobSettingError( + u'Job %s is missing required settings: %s' % (job[u'_id'], u', '.join(missing))) diff --git a/packages/flamenco/flamenco/job_compilers/blender_render.py b/packages/flamenco/flamenco/job_compilers/blender_render.py index 65a464d4da5340a1500bf3a8151163dabfddbb82..ffc34468d9c5d70c00e52541151d714f6d2860e6 100644 --- a/packages/flamenco/flamenco/job_compilers/blender_render.py +++ b/packages/flamenco/flamenco/job_compilers/blender_render.py @@ -1,3 +1,5 @@ +from pillar import attrs_extra + from .abstract_compiler import AbstractJobCompiler from . import commands, register_compiler @@ -5,9 +7,13 @@ from . import commands, register_compiler @register_compiler('blender-render') class BlenderRender(AbstractJobCompiler): """Basic Blender render job.""" + _log = attrs_extra.log('%s.BlenderRender' % __name__) + + REQUIRED_SETTINGS = ('blender_cmd', 'filepath', 'render_output', 'frames', 'chunk_size') def compile(self, job): self._log.info('Compiling job %s', job['_id']) + self.validate_job_settings(job) move_existing_task_id = self._make_move_out_of_way_task(job) task_count = 1 + self._make_render_tasks(job, move_existing_task_id)