{ "name": "KeyError", "message": "'numberOfTimeRange not defined in section 4'", "stack": "--------------------------------------------------------------------------- KeyError Traceback (most recent call last) /Users/Malo/hydroscope/hydroscope/debug.ipynb Cell 2 line 8 5 start_dt = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(hours=8) 6 end_dt = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(hours=10) ----> 8 AWS_AROME_HD.query(start_dt, end_dt, test_region, 'test', './weather') File ~/hydroscope/hydroscope/weather/wx_model.py:344, in ForecastModel.query(self, start_dt, end_dt, geo_constraints, fname, temp_data_folder, format, clear) 341 if end_dt is None: 342 end_dt = self.run_datetime + self.forecast_duration --> 344 WxModel.query(self, start_dt, end_dt, geo_constraints, fname, temp_data_folder, format=format, clear=clear, run_dt=self.run_datetime) File ~/hydroscope/hydroscope/weather/wx_model.py:98, in WxModel.query(self, start_dt, end_dt, geo_constraints, fname, temp_data_folder, format, clear, run_dt) 96 time_constraint = iris.Constraint(time=lambda cell: start_dt <= cell.point < end_dt) 97 self.get_data(start_dt, end_dt, temp_data_folder, run_dt=run_dt) ---> 98 self.load_data(geo_constraints) 99 self.compile_data(time_constraint) 100 self.save_data(fname, format=format) File ~/hydroscope/hydroscope/weather/wx_model.py:131, in WxModel.load_data(self, geo_constraints) 123 \"\"\"Load the data into iris cube format 124 125 Parameters (...) 128 Constraints giving the area of interest to keep in the data 129 \"\"\" 130 for file in self.files: --> 131 self.cubes += [iris.load(file)] File ~/miniforge3/envs/hydroscope/lib/python3.12/site-packages/iris/__init__.py:330, in load(uris, constraints, callback) 306 def load(uris, constraints=None, callback=None): 307 \"\"\"Load any number of Cubes for each constraint. 308 309 For a full description of the arguments, please see the module (...) 328 329 \"\"\" --> 330 return _load_collection(uris, constraints, callback).merged().cubes() File ~/miniforge3/envs/hydroscope/lib/python3.12/site-packages/iris/__init__.py:298, in _load_collection(uris, constraints, callback) 296 try: 297 cubes = _generate_cubes(uris, callback, constraints) --> 298 result = _CubeFilterCollection.from_cubes(cubes, constraints) 299 except EOFError as e: 300 raise iris.exceptions.TranslationError( 301 \"The file appears empty or incomplete: {!r}\".format(str(e)) 302 ) File ~/miniforge3/envs/hydroscope/lib/python3.12/site-packages/iris/cube.py:95, in _CubeFilterCollection.from_cubes(cubes, constraints) 93 pairs = [_CubeFilter(constraint) for constraint in constraints] 94 collection = _CubeFilterCollection(pairs) ---> 95 for cube in cubes: 96 collection.add_cube(cube) 97 return collection File ~/miniforge3/envs/hydroscope/lib/python3.12/site-packages/iris/__init__.py:279, in _generate_cubes(uris, callback, constraints) 277 if scheme == \"file\": 278 part_names = [x[1] for x in groups] --> 279 for cube in iris.io.load_files(part_names, callback, constraints): 280 yield cube 281 elif scheme in [\"http\", \"https\"]: File ~/miniforge3/envs/hydroscope/lib/python3.12/site-packages/iris/io/__init__.py:222, in load_files(filenames, callback, constraints) 220 yield cube 221 else: --> 222 for cube in handling_format_spec.handler(fnames, callback): 223 yield cube File ~/miniforge3/envs/hydroscope/lib/python3.12/site-packages/iris/fileformats/rules.py:435, in load_cubes(filenames, user_callback, loader, filter_function) 432 return result 434 all_fields_and_filenames = _generate_all_fields_and_filenames() --> 435 for cube, field in _load_pairs_from_fields_and_filenames( 436 all_fields_and_filenames, 437 converter=loader.converter, 438 user_callback_wrapper=loadcubes_user_callback_wrapper, 439 ): 440 yield cube File ~/miniforge3/envs/hydroscope/lib/python3.12/site-packages/iris/fileformats/rules.py:360, in _load_pairs_from_fields_and_filenames(fields_and_filenames, converter, user_callback_wrapper) 357 results_needing_reference = [] 358 for field, filename in fields_and_filenames: 359 # Convert the field to a Cube, passing down the 'converter' function. --> 360 cube, factories, references = _make_cube(field, converter) 362 # Post modify the new cube with a user-callback. 363 # This is an ordinary Iris load callback, so it takes the filename. 364 cube = iris.io.run_callback(user_callback_wrapper, cube, field, filename) File ~/miniforge3/envs/hydroscope/lib/python3.12/site-packages/iris/fileformats/rules.py:295, in _make_cube(field, converter) 293 def _make_cube(field, converter): 294 # Convert the field to a Cube. --> 295 metadata = converter(field) 297 cube_data = field.core_data() 298 cube = iris.cube.Cube( 299 cube_data, 300 attributes=metadata.attributes, (...) 303 aux_coords_and_dims=metadata.aux_coords_and_dims, 304 ) File ~/miniforge3/envs/hydroscope/lib/python3.12/site-packages/iris_grib/_load_convert.py:2779, in convert(field) 2776 metadata[\"aux_coords_and_dims\"] = [] 2778 # Convert GRIB2 message to cube metadata. -> 2779 grib2_convert(field, metadata) 2781 result = ConversionMetadata._make(metadata.values()) 2782 else: File ~/miniforge3/envs/hydroscope/lib/python3.12/site-packages/iris_grib/_load_convert.py:2728, in grib2_convert(field, metadata) 2725 grid_definition_section(field.sections[3], metadata) 2727 # Section 4 - Product Definition Section (Product Definition Template) -> 2728 product_definition_section( 2729 field.sections[4], 2730 metadata, 2731 field.sections[0][\"discipline\"], 2732 field.sections[1][\"tablesVersion\"], 2733 rt_coord, 2734 ) 2736 # Section 5 - Data Representation Section (Data Representation Template) 2737 data_representation_section(field.sections[5]) File ~/miniforge3/envs/hydroscope/lib/python3.12/site-packages/iris_grib/_load_convert.py:2587, in product_definition_section(section, metadata, discipline, tablesVersion, rt_coord) 2583 product_definition_template_6(section, metadata, rt_coord) 2584 elif template == 8: 2585 # Process statistically processed values at a horizontal level or in a 2586 # horizontal layer in a continuous or non-continuous time interval. -> 2587 product_definition_template_8(section, metadata, rt_coord) 2588 elif template == 9: 2589 probability = product_definition_template_9(section, metadata, rt_coord) File ~/miniforge3/envs/hydroscope/lib/python3.12/site-packages/iris_grib/_load_convert.py:2226, in product_definition_template_8(section, metadata, frt_coord) 2223 data_cutoff(section[\"hoursAfterDataCutoff\"], section[\"minutesAfterDataCutoff\"]) 2225 # Create a cell method to represent the time statistic. -> 2226 time_statistic_cell_method = statistical_cell_method(section) 2227 # Add the forecast cell method to the metadata. 2228 metadata[\"cell_methods\"].append(time_statistic_cell_method) File ~/miniforge3/envs/hydroscope/lib/python3.12/site-packages/iris_grib/_load_convert.py:2051, in statistical_cell_method(section) 2036 \"\"\" 2037 Create a cell method representing a time statistic. 2038 (...) 2048 2049 \"\"\" 2050 # Handle the number of time ranges -- we currently only support one. -> 2051 n_time_ranges = section[\"numberOfTimeRange\"] 2052 if n_time_ranges != 1: 2053 if n_time_ranges == 0: File ~/miniforge3/envs/hydroscope/lib/python3.12/site-packages/iris_grib/message.py:462, in Section.__getitem__(self, key) 460 else: 461 emsg = f\"{key} not defined in section {self._number}\" --> 462 raise KeyError(emsg) 463 value = self._get_key_value(key) 465 self._cache[key] = value KeyError: 'numberOfTimeRange not defined in section 4'" }