diff --git a/lib/iris/experimental/fieldsfile.py b/lib/iris/experimental/fieldsfile.py index f8cefe0669..039fddca90 100644 --- a/lib/iris/experimental/fieldsfile.py +++ b/lib/iris/experimental/fieldsfile.py @@ -145,7 +145,7 @@ def load(filenames, callback=None): erroneous results. """ - loader = Loader(_collations_from_filename, {}, _convert_collation, None) + loader = Loader(_collations_from_filename, {}, _convert_collation) return CubeList(load_cubes(filenames, callback, loader, None)) diff --git a/lib/iris/fileformats/rules.py b/lib/iris/fileformats/rules.py index 137aec545e..3fefabda15 100644 --- a/lib/iris/fileformats/rules.py +++ b/lib/iris/fileformats/rules.py @@ -850,11 +850,9 @@ def _ensure_aligned(regrid_cache, src_cube, target_cube): return result_cube -_loader_attrs = ('field_generator', 'field_generator_kwargs', - 'converter', 'legacy_custom_rules') +_loader_attrs = ('field_generator', 'field_generator_kwargs', 'converter') class Loader(collections.namedtuple('Loader', _loader_attrs)): - def __new__(cls, field_generator, field_generator_kwargs, converter, - legacy_custom_rules=None): + def __new__(cls, field_generator, field_generator_kwargs, converter): """ Create a definition of a field-based Cube loader. @@ -870,21 +868,9 @@ def __new__(cls, field_generator, field_generator_kwargs, converter, * converter A callable that converts a field object into a Cube. - Kwargs: - - * legacy_custom_rules - An object with a callable `verify` attribute with two - parameters: (cube, field). Legacy method for modifying - Cubes during the load process. Default is None. - - .. deprecated:: 1.9 - """ - if legacy_custom_rules is not None: - warn_deprecated('The `legacy_custom_rules` attribute is ' - 'deprecated.') return tuple.__new__(cls, (field_generator, field_generator_kwargs, - converter, legacy_custom_rules)) + converter)) ConversionMetadata = collections.namedtuple('ConversionMetadata', @@ -950,7 +936,7 @@ def _resolve_factory_references(cube, factories, concrete_reference_targets, def _load_pairs_from_fields_and_filenames(fields_and_filenames, converter, - user_callback_wrapper=None): + user_callback=None): # The underlying mechanism for the public 'load_pairs_from_fields' and # 'load_cubes'. # Slightly more complicated than 'load_pairs_from_fields', only because it @@ -963,8 +949,7 @@ def _load_pairs_from_fields_and_filenames(fields_and_filenames, converter, # Post modify the new cube with a user-callback. # This is an ordinary Iris load callback, so it takes the filename. - cube = iris.io.run_callback(user_callback_wrapper, - cube, field, filename) + cube = iris.io.run_callback(user_callback, cube, field, filename) # Callback mechanism may return None, which must not be yielded. if cube is None: continue @@ -1027,23 +1012,10 @@ def _generate_all_fields_and_filenames(): if filter_function is None or filter_function(field): yield (field, filename) - def loadcubes_user_callback_wrapper(cube, field, filename): - # First run any custom user-provided rules. - if loader.legacy_custom_rules: - warn_deprecated('The `legacy_custom_rules` attribute of ' - 'the `loader` is deprecated.') - loader.legacy_custom_rules.verify(cube, field) - - # Then also run user-provided original callback function. - result = cube - if user_callback is not None: - result = user_callback(cube, field, filename) - return result - all_fields_and_filenames = _generate_all_fields_and_filenames() for cube, field in _load_pairs_from_fields_and_filenames( all_fields_and_filenames, converter=loader.converter, - user_callback_wrapper=loadcubes_user_callback_wrapper): + user_callback=user_callback): yield cube diff --git a/lib/iris/tests/unit/fileformats/grib/test_load_cubes.py b/lib/iris/tests/unit/fileformats/grib/test_load_cubes.py index f3559a1676..bc2357b819 100644 --- a/lib/iris/tests/unit/fileformats/grib/test_load_cubes.py +++ b/lib/iris/tests/unit/fileformats/grib/test_load_cubes.py @@ -45,9 +45,8 @@ def _test(self, mode, generator, converter): kw_args = {} else: kw_args = {'auto_regularise': mock.sentinel.REGULARISE} - loader = iris.fileformats.rules.Loader( - generator, kw_args, - converter, None) + loader = iris.fileformats.rules.Loader(generator, kw_args, + converter) rules_load.assert_called_once_with(mock.sentinel.FILES, mock.sentinel.CALLBACK, loader) diff --git a/lib/iris/tests/unit/fileformats/rules/test_Loader.py b/lib/iris/tests/unit/fileformats/rules/test_Loader.py index 63a69b31e9..e08e31ded6 100644 --- a/lib/iris/tests/unit/fileformats/rules/test_Loader.py +++ b/lib/iris/tests/unit/fileformats/rules/test_Loader.py @@ -1,4 +1,4 @@ -# (C) British Crown Copyright 2015, Met Office +# (C) British Crown Copyright 2015 - 2016, Met Office # # This file is part of Iris. # @@ -39,34 +39,17 @@ def test_normal(self): self.assertIs(loader.field_generator_kwargs, mock.sentinel.GEN_FUNC_KWARGS) self.assertIs(loader.converter, mock.sentinel.CONVERTER) - self.assertIs(loader.legacy_custom_rules, None) def test_normal_with_explicit_none(self): with mock.patch('warnings.warn') as warn: loader = Loader(mock.sentinel.GEN_FUNC, mock.sentinel.GEN_FUNC_KWARGS, - mock.sentinel.CONVERTER, None) + mock.sentinel.CONVERTER) self.assertEqual(warn.call_count, 0) self.assertIs(loader.field_generator, mock.sentinel.GEN_FUNC) self.assertIs(loader.field_generator_kwargs, mock.sentinel.GEN_FUNC_KWARGS) self.assertIs(loader.converter, mock.sentinel.CONVERTER) - self.assertIs(loader.legacy_custom_rules, None) - - def test_deprecated_custom_rules(self): - with mock.patch('warnings.warn') as warn: - loader = Loader(mock.sentinel.GEN_FUNC, - mock.sentinel.GEN_FUNC_KWARGS, - mock.sentinel.CONVERTER, - mock.sentinel.CUSTOM_RULES) - self.assertEqual(warn.call_count, 1) - self.assertEqual(warn.call_args[0][0], - 'The `legacy_custom_rules` attribute is deprecated.') - self.assertIs(loader.field_generator, mock.sentinel.GEN_FUNC) - self.assertIs(loader.field_generator_kwargs, - mock.sentinel.GEN_FUNC_KWARGS) - self.assertIs(loader.converter, mock.sentinel.CONVERTER) - self.assertIs(loader.legacy_custom_rules, mock.sentinel.CUSTOM_RULES) if __name__ == '__main__': diff --git a/lib/iris/tests/unit/fileformats/test_rules.py b/lib/iris/tests/unit/fileformats/test_rules.py index a41d1b48a7..dcc1ffa468 100644 --- a/lib/iris/tests/unit/fileformats/test_rules.py +++ b/lib/iris/tests/unit/fileformats/test_rules.py @@ -117,7 +117,7 @@ def converter(field): return ConversionMetadata([factory], [], '', '', '', {}, [], [], []) # Finish by making a fake Loader - fake_loader = Loader(field_generator, {}, converter, None) + fake_loader = Loader(field_generator, {}, converter) cubes = load_cubes(['fake_filename'], None, fake_loader) # Check the result is a generator with a single entry. @@ -191,7 +191,7 @@ def converter(field): src.cell_methods, dim_coords_and_dims, aux_coords_and_dims) # Finish by making a fake Loader - fake_loader = Loader(field_generator, {}, converter, None) + fake_loader = Loader(field_generator, {}, converter) cubes = load_cubes(['fake_filename'], None, fake_loader) # Check the result is a generator containing two Cubes.