def get_configuration(self): """Returns the job configuration represented by this JSON :returns: The job configuration :rtype: :class:`job.configuration.configuration.JobConfiguration`: """ config = JobConfiguration() for name, mount_dict in self._config['mounts'].items(): if mount_dict['type'] == 'host': config.add_mount(HostMountConfig(name, mount_dict['host_path'])) elif mount_dict['type'] == 'volume': config.add_mount( VolumeMountConfig(name, mount_dict['driver'], mount_dict['driver_opts'])) default_workspace = self._config['output_workspaces']['default'] if default_workspace: config.default_output_workspace = default_workspace for output, workspace in self._config['output_workspaces'][ 'outputs'].items(): config.add_output_workspace(output, workspace) config.priority = self._config['priority'] for name, value in self._config['settings'].items(): config.add_setting(name, value) return config
def test_convert_config_to_v6_json(self): """Tests calling convert_config_to_v6_json()""" # Try configuration with nothing set config = RecipeConfiguration() json = convert_config_to_v6_json(config) RecipeConfigurationV6(config=json.get_dict(), do_validate=True) # Revalidate # Try configuration with a variety of values config = RecipeConfiguration() config.add_mount(HostMountConfig('mount_1', '/the/host/path')) config.add_mount( VolumeMountConfig('mount_2', 'driver', { 'opt_1': 'foo', 'opt_2': 'bar' })) config.default_output_workspace = 'workspace_1' config.add_output_workspace('output_2', 'workspace_2') config.priority = 999 config.add_setting('setting_1', 'Hello') config.add_setting('setting_2', 'Scale!') json = convert_config_to_v6_json(config) RecipeConfigurationV6(config=json.get_dict(), do_validate=True) # Revalidate self.assertSetEqual(set(json.get_dict()['mounts'].keys()), {'mount_1', 'mount_2'}) self.assertEqual(json.get_dict()['priority'], 999) self.assertSetEqual(set(json.get_dict()['settings'].keys()), {'setting_1', 'setting_2'})
def test_add_mount(self): """Tests calling RecipeConfiguration.add_mount()""" configuration = RecipeConfiguration() host_mount = HostMountConfig('mount_1', '/the/host/path') configuration.add_mount(host_mount) vol_mount = VolumeMountConfig('mount_1', driver='driver', driver_opts={}) with self.assertRaises(InvalidRecipeConfiguration) as context: configuration.add_mount(vol_mount) self.assertEqual(context.exception.error.name, 'DUPLICATE_MOUNT')