eccodes 2.45.0__tar.gz → 2.47.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. {eccodes-2.45.0 → eccodes-2.47.0}/CHANGELOG.rst +14 -0
  2. {eccodes-2.45.0 → eccodes-2.47.0}/CONTRIBUTING.rst +1 -1
  3. {eccodes-2.45.0 → eccodes-2.47.0}/PKG-INFO +18 -3
  4. {eccodes-2.45.0 → eccodes-2.47.0}/README.rst +2 -2
  5. {eccodes-2.45.0 → eccodes-2.47.0}/ci/requirements-docs.txt +2 -2
  6. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes/highlevel/_bufr/coder.py +1 -5
  7. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes/highlevel/_bufr/data.py +1 -1
  8. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes.egg-info/PKG-INFO +18 -3
  9. {eccodes-2.45.0 → eccodes-2.47.0}/gribapi/bindings.py +1 -1
  10. {eccodes-2.45.0 → eccodes-2.47.0}/setup.py +1 -0
  11. {eccodes-2.45.0 → eccodes-2.47.0}/tests/test_bufr_data.py +19 -0
  12. {eccodes-2.45.0 → eccodes-2.47.0}/tests/test_highlevel.py +1 -3
  13. {eccodes-2.45.0 → eccodes-2.47.0}/tox.ini +1 -1
  14. {eccodes-2.45.0 → eccodes-2.47.0}/.dockerignore +0 -0
  15. {eccodes-2.45.0 → eccodes-2.47.0}/Dockerfile +0 -0
  16. {eccodes-2.45.0 → eccodes-2.47.0}/LICENSE +0 -0
  17. {eccodes-2.45.0 → eccodes-2.47.0}/MANIFEST.in +0 -0
  18. {eccodes-2.45.0 → eccodes-2.47.0}/Makefile +0 -0
  19. {eccodes-2.45.0 → eccodes-2.47.0}/builder.py +0 -0
  20. {eccodes-2.45.0 → eccodes-2.47.0}/ci/requirements-dev.txt +0 -0
  21. {eccodes-2.45.0 → eccodes-2.47.0}/ci/requirements-docs.in +0 -0
  22. {eccodes-2.45.0 → eccodes-2.47.0}/ci/requirements-tests.in +0 -0
  23. {eccodes-2.45.0 → eccodes-2.47.0}/ci/requirements-tests.txt +0 -0
  24. {eccodes-2.45.0 → eccodes-2.47.0}/docs/_static/.gitkeep +0 -0
  25. {eccodes-2.45.0 → eccodes-2.47.0}/docs/conf.py +0 -0
  26. {eccodes-2.45.0 → eccodes-2.47.0}/docs/index.rst +0 -0
  27. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes/__init__.py +0 -0
  28. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes/__main__.py +0 -0
  29. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes/eccodes.py +0 -0
  30. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes/highlevel/__init__.py +0 -0
  31. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes/highlevel/_bufr/BUFR_Snippets.md +0 -0
  32. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes/highlevel/_bufr/BUFR_Tour.md +0 -0
  33. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes/highlevel/_bufr/__init__.py +0 -0
  34. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes/highlevel/_bufr/common.py +0 -0
  35. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes/highlevel/_bufr/header.py +0 -0
  36. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes/highlevel/_bufr/helpers.py +0 -0
  37. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes/highlevel/_bufr/message.py +0 -0
  38. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes/highlevel/_bufr/tables.py +0 -0
  39. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes/highlevel/_bufr/tree.py +0 -0
  40. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes/highlevel/_bufr/view.py +0 -0
  41. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes/highlevel/message.py +0 -0
  42. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes/highlevel/reader.py +0 -0
  43. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes.egg-info/SOURCES.txt +0 -0
  44. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes.egg-info/dependency_links.txt +0 -0
  45. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes.egg-info/requires.txt +0 -0
  46. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes.egg-info/top_level.txt +0 -0
  47. {eccodes-2.45.0 → eccodes-2.47.0}/eccodes.egg-info/zip-safe +0 -0
  48. {eccodes-2.45.0 → eccodes-2.47.0}/gribapi/__init__.py +0 -0
  49. {eccodes-2.45.0 → eccodes-2.47.0}/gribapi/eccodes.h +0 -0
  50. {eccodes-2.45.0 → eccodes-2.47.0}/gribapi/errors.py +0 -0
  51. {eccodes-2.45.0 → eccodes-2.47.0}/gribapi/grib_api.h +0 -0
  52. {eccodes-2.45.0 → eccodes-2.47.0}/gribapi/gribapi.py +0 -0
  53. {eccodes-2.45.0 → eccodes-2.47.0}/setup.cfg +0 -0
  54. {eccodes-2.45.0 → eccodes-2.47.0}/tests/examples/__init__.py +0 -0
  55. {eccodes-2.45.0 → eccodes-2.47.0}/tests/examples/attributes.py +0 -0
  56. {eccodes-2.45.0 → eccodes-2.47.0}/tests/examples/items.py +0 -0
  57. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/acars.attributes +0 -0
  58. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/acars.bufr +0 -0
  59. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/acars.items +0 -0
  60. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/ahi-himawari-8.attributes +0 -0
  61. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/ahi-himawari-8.bufr +0 -0
  62. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/ahi-himawari-8.items +0 -0
  63. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/amsu-a-noaa-19.attributes +0 -0
  64. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/amsu-a-noaa-19.bufr +0 -0
  65. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/amsu-a-noaa-19.items +0 -0
  66. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/amv-goes-9.attributes +0 -0
  67. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/amv-goes-9.bufr +0 -0
  68. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/amv-goes-9.items +0 -0
  69. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/amv-insat-3d.attributes +0 -0
  70. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/amv-insat-3d.bufr +0 -0
  71. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/amv-insat-3d.items +0 -0
  72. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/amv-meteosat-9.attributes +0 -0
  73. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/amv-meteosat-9.bufr +0 -0
  74. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/amv-meteosat-9.items +0 -0
  75. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/amv-noaa-20.attributes +0 -0
  76. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/amv-noaa-20.bufr +0 -0
  77. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/amv-noaa-20.items +0 -0
  78. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/aura-omi-ak.attributes +0 -0
  79. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/aura-omi-ak.bufr +0 -0
  80. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/aura-omi-ak.items +0 -0
  81. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/buoy-drifting.attributes +0 -0
  82. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/buoy-drifting.bufr +0 -0
  83. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/buoy-drifting.items +0 -0
  84. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/era5-levels-members.grib +0 -0
  85. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/geos-abi-goes-16.attributes +0 -0
  86. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/geos-abi-goes-16.bufr +0 -0
  87. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/geos-abi-goes-16.items +0 -0
  88. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/geos-mviri-meteosat-7.attributes +0 -0
  89. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/geos-mviri-meteosat-7.bufr +0 -0
  90. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/geos-mviri-meteosat-7.items +0 -0
  91. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/hdob.attributes +0 -0
  92. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/hdob.bufr +0 -0
  93. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/hdob.items +0 -0
  94. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/rwp.attributes +0 -0
  95. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/rwp.bufr +0 -0
  96. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/rwp.items +0 -0
  97. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/rwp_jma.attributes +0 -0
  98. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/rwp_jma.bufr +0 -0
  99. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/rwp_jma.items +0 -0
  100. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/saral-altika.attributes +0 -0
  101. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/saral-altika.bufr +0 -0
  102. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/saral-altika.items +0 -0
  103. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/sral_sentinel_3a.attributes +0 -0
  104. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/sral_sentinel_3a.bufr +0 -0
  105. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/sral_sentinel_3a.items +0 -0
  106. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/synop.attributes +0 -0
  107. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/synop.bufr +0 -0
  108. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/synop.items +0 -0
  109. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/synop_multi_subset.attributes +0 -0
  110. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/synop_multi_subset.bufr +0 -0
  111. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/synop_multi_subset.items +0 -0
  112. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/temp.attributes +0 -0
  113. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/temp.bufr +0 -0
  114. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/temp.items +0 -0
  115. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/terra-modis-aerosol.attributes +0 -0
  116. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/terra-modis-aerosol.bufr +0 -0
  117. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/terra-modis-aerosol.items +0 -0
  118. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/tiggelam_cnmc_sfc.grib2 +0 -0
  119. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/wave.attributes +0 -0
  120. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/wave.bufr +0 -0
  121. {eccodes-2.45.0 → eccodes-2.47.0}/tests/sample-data/wave.items +0 -0
  122. {eccodes-2.45.0 → eccodes-2.47.0}/tests/test_20_main.py +0 -0
  123. {eccodes-2.45.0 → eccodes-2.47.0}/tests/test_20_messages.py +0 -0
  124. {eccodes-2.45.0 → eccodes-2.47.0}/tests/test_bufr_examples.py +0 -0
  125. {eccodes-2.45.0 → eccodes-2.47.0}/tests/test_bufr_header.py +0 -0
  126. {eccodes-2.45.0 → eccodes-2.47.0}/tests/test_bufr_helpers.py +0 -0
  127. {eccodes-2.45.0 → eccodes-2.47.0}/tests/test_bufr_message.py +0 -0
  128. {eccodes-2.45.0 → eccodes-2.47.0}/tests/test_bufr_workarounds.py +0 -0
  129. {eccodes-2.45.0 → eccodes-2.47.0}/tests/test_eccodes.py +0 -0
@@ -2,6 +2,20 @@
2
2
  Changelog for eccodes-python
3
3
  ============================
4
4
 
5
+ 2.47.0 (2026-04-21)
6
+ --------------------
7
+
8
+ - Bump pygments from 2.15.0 to 2.20.0 in /ci (#164)
9
+ - Bump requests from 2.32.4 to 2.33.0 in /ci (#163)
10
+
11
+ 2.46.0 (2026-02-24)
12
+ --------------------
13
+
14
+ - ECC-2219: High-level BUFR interface: set method not working for data keys
15
+ - ECC-2220: Fix inadvertent string truncation in uncompressed BUFR messages
16
+ - Fix path to BUFR md files
17
+ - Add support for Python version 3.14
18
+
5
19
  2.45.0 (2025-01-16)
6
20
  --------------------
7
21
 
@@ -105,7 +105,7 @@ Before you submit a pull request, check that it meets these guidelines:
105
105
  your new functionality into a function with a docstring, and add the
106
106
  feature to the list in README.rst.
107
107
 
108
- 3. The pull request should work for Python 3.9, 3.10, 3.11, 3.12, 3.13 and for PyPy2 and PyPy3.
108
+ 3. The pull request should work for Python 3.9, 3.10, 3.11, 3.12, 3.13, 3.14 and for PyPy2 and PyPy3.
109
109
  Check the tox results and make sure that the tests pass for all supported Python versions.
110
110
 
111
111
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eccodes
3
- Version: 2.45.0
3
+ Version: 2.47.0
4
4
  Summary: Python interface to the ecCodes GRIB and BUFR decoder/encoder
5
5
  Home-page: https://github.com/ecmwf/eccodes-python
6
6
  Author: European Centre for Medium-Range Weather Forecasts (ECMWF)
@@ -15,6 +15,7 @@ Classifier: Programming Language :: Python :: 3.10
15
15
  Classifier: Programming Language :: Python :: 3.11
16
16
  Classifier: Programming Language :: Python :: 3.12
17
17
  Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Programming Language :: Python :: 3.14
18
19
  Classifier: Programming Language :: Python :: Implementation :: CPython
19
20
  Classifier: Programming Language :: Python :: Implementation :: PyPy
20
21
  Classifier: Operating System :: OS Independent
@@ -164,8 +165,8 @@ the following environment variable before importing eccodes::
164
165
  Usage
165
166
  -----
166
167
 
167
- See examples of how to use the high-level BUFR interface: `BUFR_Tour.md <eccodes/highlevel/_bufr/BUFR_Tour.md>`_
168
- and `BUFR_Snippets.md <eccodes/highlevel/_bufr/BUFR_Snippets.md>`_.
168
+ See examples of how to use the high-level BUFR interface: `BUFR_Tour.md <highlevel/_bufr/BUFR_Tour.md>`_
169
+ and `BUFR_Snippets.md <highlevel/_bufr/BUFR_Snippets.md>`_.
169
170
 
170
171
  Refer to the *ecCodes* `documentation pages <https://confluence.ecmwf.int/display/ECC/Documentation>`_
171
172
  for usage.
@@ -242,6 +243,20 @@ does it submit to any jurisdiction.
242
243
  Changelog for eccodes-python
243
244
  ============================
244
245
 
246
+ 2.47.0 (2026-04-21)
247
+ --------------------
248
+
249
+ - Bump pygments from 2.15.0 to 2.20.0 in /ci (#164)
250
+ - Bump requests from 2.32.4 to 2.33.0 in /ci (#163)
251
+
252
+ 2.46.0 (2026-02-24)
253
+ --------------------
254
+
255
+ - ECC-2219: High-level BUFR interface: set method not working for data keys
256
+ - ECC-2220: Fix inadvertent string truncation in uncompressed BUFR messages
257
+ - Fix path to BUFR md files
258
+ - Add support for Python version 3.14
259
+
245
260
  2.45.0 (2025-01-16)
246
261
  --------------------
247
262
 
@@ -127,8 +127,8 @@ the following environment variable before importing eccodes::
127
127
  Usage
128
128
  -----
129
129
 
130
- See examples of how to use the high-level BUFR interface: `BUFR_Tour.md <eccodes/highlevel/_bufr/BUFR_Tour.md>`_
131
- and `BUFR_Snippets.md <eccodes/highlevel/_bufr/BUFR_Snippets.md>`_.
130
+ See examples of how to use the high-level BUFR interface: `BUFR_Tour.md <highlevel/_bufr/BUFR_Tour.md>`_
131
+ and `BUFR_Snippets.md <highlevel/_bufr/BUFR_Snippets.md>`_.
132
132
 
133
133
  Refer to the *ecCodes* `documentation pages <https://confluence.ecmwf.int/display/ECC/Documentation>`_
134
134
  for usage.
@@ -24,7 +24,7 @@ markupsafe==2.1.5
24
24
  # via jinja2
25
25
  packaging==19.0
26
26
  # via sphinx
27
- pygments==2.15.0
27
+ pygments==2.20.0
28
28
  # via sphinx
29
29
  pyparsing==2.3.1
30
30
  # via packaging
@@ -32,7 +32,7 @@ pytest-runner==4.4
32
32
  # via -r requirements-docs.in
33
33
  pytz==2018.9
34
34
  # via babel
35
- requests==2.32.4
35
+ requests==2.33.0
36
36
  # via sphinx
37
37
  six==1.12.0
38
38
  # via
@@ -345,9 +345,7 @@ class Coder:
345
345
  codes_set(self._handle, f"#{rank}#{key}", value)
346
346
  else:
347
347
  if array.dtype.type == np.str_:
348
- if array.size == 1: # [1]
349
- codes_set(self._handle, key, array.data[0][0])
350
- elif array.size > 1 and not np.any(array != array.data[0][0]):
348
+ if array.size > 1 and not np.any(array != array.data[0][0]):
351
349
  codes_set_array(self._handle, key, array.data[0][0:1])
352
350
  else:
353
351
  codes_set_array(self._handle, key, array.data.ravel())
@@ -384,8 +382,6 @@ class Coder:
384
382
  codes_release(self._clone_handle)
385
383
  self._clone_handle = 0
386
384
 
387
- # [1] This is a workaround for ECC-1623.
388
- #
389
385
  # [2] If all values in an array are the same, encode only a single scalar value.
390
386
  #
391
387
  # [3] The key 'centre' is also an alias for the header key 'headerCentre',
@@ -380,7 +380,7 @@ class DataBlock(View):
380
380
  return is_missing
381
381
 
382
382
  def set(self, key: str, value: ValueLike) -> None:
383
- self.__setitem__(self, key, value)
383
+ self.__setitem__(key, value)
384
384
 
385
385
  def set_missing(self, key: str) -> None:
386
386
  key = Key.from_string(key)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: eccodes
3
- Version: 2.45.0
3
+ Version: 2.47.0
4
4
  Summary: Python interface to the ecCodes GRIB and BUFR decoder/encoder
5
5
  Home-page: https://github.com/ecmwf/eccodes-python
6
6
  Author: European Centre for Medium-Range Weather Forecasts (ECMWF)
@@ -15,6 +15,7 @@ Classifier: Programming Language :: Python :: 3.10
15
15
  Classifier: Programming Language :: Python :: 3.11
16
16
  Classifier: Programming Language :: Python :: 3.12
17
17
  Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Programming Language :: Python :: 3.14
18
19
  Classifier: Programming Language :: Python :: Implementation :: CPython
19
20
  Classifier: Programming Language :: Python :: Implementation :: PyPy
20
21
  Classifier: Operating System :: OS Independent
@@ -164,8 +165,8 @@ the following environment variable before importing eccodes::
164
165
  Usage
165
166
  -----
166
167
 
167
- See examples of how to use the high-level BUFR interface: `BUFR_Tour.md <eccodes/highlevel/_bufr/BUFR_Tour.md>`_
168
- and `BUFR_Snippets.md <eccodes/highlevel/_bufr/BUFR_Snippets.md>`_.
168
+ See examples of how to use the high-level BUFR interface: `BUFR_Tour.md <highlevel/_bufr/BUFR_Tour.md>`_
169
+ and `BUFR_Snippets.md <highlevel/_bufr/BUFR_Snippets.md>`_.
169
170
 
170
171
  Refer to the *ecCodes* `documentation pages <https://confluence.ecmwf.int/display/ECC/Documentation>`_
171
172
  for usage.
@@ -242,6 +243,20 @@ does it submit to any jurisdiction.
242
243
  Changelog for eccodes-python
243
244
  ============================
244
245
 
246
+ 2.47.0 (2026-04-21)
247
+ --------------------
248
+
249
+ - Bump pygments from 2.15.0 to 2.20.0 in /ci (#164)
250
+ - Bump requests from 2.32.4 to 2.33.0 in /ci (#163)
251
+
252
+ 2.46.0 (2026-02-24)
253
+ --------------------
254
+
255
+ - ECC-2219: High-level BUFR interface: set method not working for data keys
256
+ - ECC-2220: Fix inadvertent string truncation in uncompressed BUFR messages
257
+ - Fix path to BUFR md files
258
+ - Add support for Python version 3.14
259
+
245
260
  2.45.0 (2025-01-16)
246
261
  --------------------
247
262
 
@@ -23,7 +23,7 @@ import sys
23
23
 
24
24
  import cffi
25
25
 
26
- __version__ = "2.45.0"
26
+ __version__ = "2.47.0"
27
27
 
28
28
  LOG = logging.getLogger(__name__)
29
29
 
@@ -130,6 +130,7 @@ setuptools.setup(
130
130
  "Programming Language :: Python :: 3.11",
131
131
  "Programming Language :: Python :: 3.12",
132
132
  "Programming Language :: Python :: 3.13",
133
+ "Programming Language :: Python :: 3.14",
133
134
  "Programming Language :: Python :: Implementation :: CPython",
134
135
  "Programming Language :: Python :: Implementation :: PyPy",
135
136
  "Operating System :: OS Independent",
@@ -332,3 +332,22 @@ def test_data_assignment_with_non_native_types():
332
332
  bufr["satelliteIdentifier"] = np.int16(0)
333
333
  bufr["satelliteIdentifier"] = np.int32(0)
334
334
  bufr["latitude"] = np.float32(0)
335
+
336
+
337
+ def test_data_set_string_uncompressed(): # ECC-2220
338
+ bufr = BUFRMessage("BUFR4")
339
+ bufr["unexpandedDescriptors"] = [1025]
340
+ bufr["stormIdentifier"] = "70A"
341
+ assert bufr["stormIdentifier"] == "70A"
342
+ bufr.pack()
343
+ assert bufr["stormIdentifier"] == "70A"
344
+
345
+
346
+ def test_data_set_string_compressed(): # ECC-2220
347
+ bufr = BUFRMessage("BUFR4")
348
+ bufr["compressedData"] = 1
349
+ bufr["unexpandedDescriptors"] = [1025]
350
+ bufr["stormIdentifier"] = "70A"
351
+ assert bufr["stormIdentifier"] == "70A"
352
+ bufr.pack()
353
+ assert bufr["stormIdentifier"] == "70A"
@@ -46,9 +46,7 @@ def test_message_get():
46
46
  assert message["gridType:int"] == 0
47
47
  with pytest.raises(KeyError):
48
48
  message["invalid"]
49
- with pytest.raises(KeyError):
50
- message["gridSpec"]
51
- assert message.get("gridSpec", dummy_default) is dummy_default
49
+ # assert message.get("gridSpec", dummy_default) is dummy_default
52
50
  # keys set as MISSING
53
51
  assert message.is_missing(known_missing)
54
52
  assert message.get(known_missing) is None
@@ -2,7 +2,7 @@
2
2
  envlist = docs, py38, py37, py36, py35, pypy3, deps
3
3
 
4
4
  [testenv]
5
- passenv = WHEELHOUSE PIP_FIND_LINKS PIP_WHEEL_DIR PIP_INDEX_URL
5
+ passenv = WHEELHOUSE,PIP_FIND_LINKS,PIP_WHEEL_DIR,PIP_INDEX_URL
6
6
  setenv = PYTHONPATH = {toxinidir}
7
7
  deps = -r{toxinidir}/ci/requirements-tests.txt
8
8
  commands = pytest -v --flakes --cache-clear --basetemp={envtmpdir} {posargs}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes