ECC-402: codes_set does not set localLongitude in BUFR to correct value

This commit is contained in:
Shahram Najm 2016-12-29 13:27:35 +00:00
parent 37d1e4da3e
commit 624ba213f0
2 changed files with 13 additions and 5 deletions

View File

@ -366,14 +366,13 @@ class TestBufrMessage(unittest.TestCase):
msg = BufrMessage(bufr) msg = BufrMessage(bufr)
self.assertEqual(msg["airTemperatureAt2M"], 274.5) self.assertEqual(msg["airTemperatureAt2M"], 274.5)
# TODO: Test behavior with missing messages (SUP-1874) # TODO: Test behaviour with missing messages (SUP-1874)
# See ECC-402 re use of '5.0' and not '5'
def test_value_setting(self): def test_value_setting(self):
"""Keys can be set properly.""" """Keys can be set properly."""
with BufrFile(TESTBUFR) as bufr: with BufrFile(TESTBUFR) as bufr:
msg = BufrMessage(bufr) msg = BufrMessage(bufr)
key, val = "localLongitude", 5.0 key, val = "localLongitude", 5
msg[key] = val msg[key] = val
self.assertEqual(msg[key], val) self.assertEqual(msg[key], val)

View File

@ -170,6 +170,7 @@ static void init(grib_accessor* a,const long l, grib_arguments* c)
} else { } else {
self->referenceValuePresent=0; self->referenceValuePresent=0;
} }
self->scale = 1;
if (self->referenceValuePresent) { if (self->referenceValuePresent) {
self->scale=grib_arguments_get_double(grib_handle_of_accessor(a),c,n++); self->scale=grib_arguments_get_double(grib_handle_of_accessor(a),c,n++);
} }
@ -263,6 +264,12 @@ static int pack_long(grib_accessor* a, const long* val, size_t *len)
if(*len != 1) return GRIB_WRONG_ARRAY_SIZE; if(*len != 1) return GRIB_WRONG_ARRAY_SIZE;
if (get_native_type(a) == GRIB_TYPE_DOUBLE) {
/* ECC-402 */
const double dVal = (double)(*val);
return pack_double(a, &dVal, len);
}
start = self->start; start = self->start;
length = self->len; length = self->len;
@ -309,6 +316,7 @@ static int unpack_string(grib_accessor*a , char* v, size_t *len)
double dval=0; double dval=0;
long lval=0; long lval=0;
size_t llen=1; size_t llen=1;
grib_accessor_class* super = NULL;
switch (get_native_type(a)) { switch (get_native_type(a)) {
case GRIB_TYPE_LONG: case GRIB_TYPE_LONG:
@ -324,7 +332,8 @@ static int unpack_string(grib_accessor*a , char* v, size_t *len)
break; break;
default: default:
Assert(0); super = *(a->cclass->super);
ret = super->unpack_string(a,v,len);
} }
return ret; return ret;
} }