luci-base: add luci.util.ubus()
authorJo-Philipp Wich <jow@openwrt.org>
Thu, 15 Jan 2015 09:52:53 +0000 (10:52 +0100)
committerJo-Philipp Wich <jow@openwrt.org>
Thu, 15 Jan 2015 10:03:31 +0000 (11:03 +0100)
Add luci.util.ubus() convenience wrapper which establishes a connection on
the first call.

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>
modules/luci-base/luasrc/util.lua

index 060e45f..7877e6f 100644 (file)
@@ -30,6 +30,9 @@ local string = require "string"
 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
@@ -704,6 +707,29 @@ function execl(command)
        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()