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)
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):
"""Keys can be set properly."""
with BufrFile(TESTBUFR) as bufr:
msg = BufrMessage(bufr)
key, val = "localLongitude", 5.0
key, val = "localLongitude", 5
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 {
self->referenceValuePresent=0;
}
self->scale = 1;
if (self->referenceValuePresent) {
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 (get_native_type(a) == GRIB_TYPE_DOUBLE) {
/* ECC-402 */
const double dVal = (double)(*val);
return pack_double(a, &dVal, len);
}
start = self->start;
length = self->len;
@ -297,7 +304,7 @@ static int get_native_type(grib_accessor* a)
if (a->flags & GRIB_ACCESSOR_FLAG_LONG_TYPE)
type=GRIB_TYPE_LONG;
if (self->referenceValuePresent)
if (self->referenceValuePresent)
type=GRIB_TYPE_DOUBLE;
return type;
@ -309,6 +316,7 @@ static int unpack_string(grib_accessor*a , char* v, size_t *len)
double dval=0;
long lval=0;
size_t llen=1;
grib_accessor_class* super = NULL;
switch (get_native_type(a)) {
case GRIB_TYPE_LONG:
@ -324,7 +332,8 @@ static int unpack_string(grib_accessor*a , char* v, size_t *len)
break;
default:
Assert(0);
super = *(a->cclass->super);
ret = super->unpack_string(a,v,len);
}
return ret;
}