local coroutine = require "coroutine"
local tparser = require "luci.template.parser"
+local _ubus = require "ubus"
+local _ubus_connection = nil
+
local getmetatable, setmetatable = getmetatable, setmetatable
local rawget, rawset, unpack = rawget, rawset, unpack
local tostring, type, assert = tostring, type, assert
__newindex = function(self, key, value)
local c = coxpt[coroutine.running()] or coroutine.running() or 0
- if not rawget(self, c) then
+ local r = rawget(self, c)
+ if not r then
rawset(self, c, { [key] = value })
else
- rawget(self, c)[key] = value
+ r[key] = value
end
end
}
return data
end
+--- Issue an ubus call.
+-- @param object String containing the ubus object to call
+-- @param method String containing the ubus method to call
+-- @param values Table containing the values to pass
+-- @return Table containin the ubus result
+function ubus(object, method, data)
+ if not _ubus_connection then
+ _ubus_connection = _ubus.connect()
+ assert(_ubus_connection, "Unable to establish ubus connection")
+ end
+
+ if object and method then
+ if type(data) ~= "table" then
+ data = { }
+ end
+ return _ubus_connection:call(object, method, data)
+ elseif object then
+ return _ubus_connection:signatures(object)
+ else
+ return _ubus_connection:objects()
+ end
+end
+
--- Returns the absolute path to LuCI base directory.
-- @return String containing the directory path
function libpath()