1#
2# Copyright 2005-2018 ECMWF.
3#
4# This software is licensed under the terms of the Apache Licence Version 2.0
5# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
6#
7# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
8# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
9#
10
11import traceback
12import sys
13
14from gribapi import *
15
16INPUT = '../../data/reduced_latlon_surface.grib1'
17VERBOSE = 1  # verbose error reporting
18
19
20def example():
21    f = open(INPUT)
22
23    while 1:
24        gid = grib_new_from_file(f)
25        if gid is None:
26            break
27
28        iterid = grib_keys_iterator_new(gid, 'ls')
29
30        # Different types of keys can be skipped
31        # grib_skip_computed(iterid)
32        # grib_skip_coded(iterid)
33        # grib_skip_edition_specific(iterid)
34        # grib_skip_duplicates(iterid)
35        # grib_skip_read_only(iterid)
36        # grib_skip_function(iterid)
37
38        while grib_keys_iterator_next(iterid):
39            keyname = grib_keys_iterator_get_name(iterid)
40            keyval = grib_get_string(iterid, keyname)
41            print "%s = %s" % (keyname, keyval)
42
43        grib_keys_iterator_delete(iterid)
44        grib_release(gid)
45
46    f.close()
47
48
49def main():
50    try:
51        example()
52    except GribInternalError, err:
53        if VERBOSE:
54            traceback.print_exc(file=sys.stderr)
55        else:
56            print >>sys.stderr, err.msg
57
58        return 1
59
60if __name__ == "__main__":
61    sys.exit(main())
62