Tasmota/lib/libesp32/Berry/default/embedded/persist.be
s-hadinger 6878bf9fbf
Berry add module `import persist` (#13264)
* Berry add module ``import persist``

* Call `persist.save()` before restart
2021-10-03 11:54:29 +02:00

99 lines
2.1 KiB
Plaintext

#- persistance module for Berry -#
#- -#
#- To solidify: -#
#-
# load only persis_module and persist_module.init
import solidify
solidify.dump(persist_module.init)
# copy and paste into `be_persist_lib.c`
-#
var persist_module = module("persist")
persist_module.init = def (m)
class Persist
var filename
var p
var dirty
#- persist can be initialized with pre-existing values. The map is not copied so any change will be reflected -#
def init(m)
# print("Persist init")
self.filename = '_persist.json'
if isinstance(m,map)
self.p = m.copy() # need to copy instead?
else
self.p = {}
end
self.load(self.p, self.filename)
self.dirty = false
# print("Persist init")
end
#- virtual member getter, if a key does not exists return `nil`-#
def member(key)
return self.p.find(key)
end
#- virtual member setter -#
def setmember(key, value)
self.p[key] = value
self.dirty = true
end
#- clear all entries -#
def zero()
self.p = {}
self.dirty = true
end
#- custom tostring -#
def tostring()
import string
return string.format("<instance: %s(%s)>", classname(self), str(self.p))
end
def load()
import json
import path
var f # file object
var val # values loaded from json
if path.exists(self.filename)
try
f = open(self.filename, "r")
val = json.load(f.read())
f.close()
except .. as e, m
if f != nil f.close() end
raise e, m
end
self.p = val
self.dirty = false
end
# print("Loading")
end
def save()
import json
var f # file object
try
f = open(self.filename, "w")
f.write(json.dump(self.p))
f.close()
except .. as e, m
if f != nil f.close() end
raise e, m
end
self.dirty = false
# print("Saving")
end
end
return Persist() # return an instance of this class
end
return persist_module