Skip to content
This repository was archived by the owner on Sep 16, 2024. It is now read-only.

Commit d78dcb2

Browse files
committed
Updated pycom.nvs_get to support return of a predefined `NoExistValue for unmatched Keys
1 parent 663b93b commit d78dcb2

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

esp32/mods/modpycom.c

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -274,9 +274,9 @@ STATIC mp_obj_t mod_pycom_nvs_set (mp_obj_t _key, mp_obj_t _value) {
274274
}
275275
STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_pycom_nvs_set_obj, mod_pycom_nvs_set);
276276

277-
STATIC mp_obj_t mod_pycom_nvs_get (mp_obj_t _key) {
277+
STATIC mp_obj_t mod_pycom_nvs_get (mp_uint_t n_args, const mp_obj_t *args) {
278278

279-
const char *key = mp_obj_str_get_str(_key);
279+
const char *key = mp_obj_str_get_str(args[0]);
280280
esp_err_t esp_err = ESP_OK;
281281
mp_obj_t ret = mp_const_none;
282282
uint32_t value;
@@ -302,14 +302,21 @@ STATIC mp_obj_t mod_pycom_nvs_get (mp_obj_t _key) {
302302
}
303303

304304
if(esp_err == ESP_ERR_NVS_NOT_FOUND) {
305-
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "No matching object for the provided key"));
305+
if (n_args > 1) {
306+
// return user defined NoExistValue
307+
return args[1];
308+
}
309+
else
310+
{
311+
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "No matching object for the provided key"));
312+
}
306313
} else if(esp_err != ESP_OK) {
307314
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_Exception, "Error occurred while fetching value, code: %d", esp_err));
308315
}
309316

310317
return ret;
311318
}
312-
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_pycom_nvs_get_obj, mod_pycom_nvs_get);
319+
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_pycom_nvs_get_obj, 1, 2, mod_pycom_nvs_get);
313320

314321
STATIC mp_obj_t mod_pycom_nvs_erase (mp_obj_t _key) {
315322
const char *key = mp_obj_str_get_str(_key);

0 commit comments

Comments
 (0)