make use of the new features in the binding for uci v0.4.0 - fixes remaining dependencies of libuci.lua on the cli

This commit is contained in:
Felix Fietkau 2008-06-03 22:42:01 +00:00
parent 3bcf6dbea3
commit 77f8074a01
8 changed files with 58 additions and 97 deletions

View file

@ -4,7 +4,7 @@ local util = require("luci.util")
local sys = require("luci.sys")
local fs = require("luci.fs")
local uci = require("luci.model.uci").Session()
local sections, names = uci:sections( "luci_statistics" )
local sections = uci:sections( "luci_statistics" )
Instance = util.class()

View file

@ -17,7 +17,7 @@ function Graph.__init__( self, timespan, opts )
opts = opts or { }
local uci = luci.model.uci.Session()
local sections, names = uci:sections( "luci_statistics" )
local sections = uci:sections( "luci_statistics" )
-- helper classes
self.colors = luci.statistics.rrdtool.colors.Instance()

View file

@ -22,7 +22,7 @@ require("luci.util")
local ipt = luci.sys.iptparser.IptParser()
local uci = luci.model.uci.Session()
local sections, names = uci:sections( "luci_statistics" )
local sections = uci:sections( "luci_statistics" )
function section( plugin )

View file

@ -89,4 +89,4 @@ end
-- Wrapper for "uci set"
function set(...)
return default:set(...)
end
end

View file

@ -35,44 +35,43 @@ Session = luci.util.class()
-- Session constructor
function Session.__init__(self, savedir)
self.ucicmd = savedir and "uci -P " .. savedir or "uci"
self.savedir = savedir or luci.model.uci.savedir
uci.set_savedir(self.savedir)
end
function Session.add(self, config, section_type)
return self:_uci("add " .. _path(config) .. " " .. _path(section_type))
return uci.add(config, section_type)
end
function Session.changes(self, config)
return self:_uci("changes " .. _path(config))
if config then
return uci.changes(config)
else
return uci.changes()
end
end
function Session.commit(self, config)
self:t_load(config)
return self:t_commit(config)
end
function Session.del(self, config, section, option)
return self:_uci2("del " .. _path(config, section, option))
return uci.del(config, section, option)
end
function Session.get(self, config, section, option)
self:t_load(config)
return self:t_get(config, section, option)
end
function Session.revert(self, config)
self:t_load(config)
return self:t_revert(config)
end
function Session.sections(self, config)
self:t_load(config)
return self:t_sections(config)
end
function Session.set(self, config, section, option, value)
self:t_load(config)
return self:t_set(config, section, option, value) and self:t_save(config)
end
@ -92,10 +91,7 @@ function Session.t_save(self, config)
end
function Session.t_add(self, config, type)
self:t_save(config)
local r = self:add(config, type)
self:t_load(config)
return r
return self:add(config, type)
end
function Session.t_commit(self, config)
@ -103,10 +99,7 @@ function Session.t_commit(self, config)
end
function Session.t_del(self, config, section, option)
self:t_save(config)
local r = self:del(config, section, option)
self:t_load(config)
return r
return self:del(config, section, option)
end
function Session.t_get(self, config, section, option)
@ -122,72 +115,14 @@ function Session.t_revert(self, config)
end
function Session.t_sections(self, config)
local raw = uci.get_all(config)
if not raw then
return nil
end
local s = {}
local o = {}
for i, sec in ipairs(raw) do
table.insert(o, sec.name)
s[sec.name] = sec.options
s[sec.name][".type"] = sec.type
end
return s, o
return uci.get_all(config)
end
function Session.t_set(self, config, section, option, value)
if option then
return uci.set(config.."."..section.."."..option.."="..value)
return uci.set(config, section, option, value)
else
return uci.set(config.."."..section.."="..value)
return uci.set(config, section, value)
end
end
-- Internal functions --
function Session._uci(self, cmd)
local res = luci.sys.exec(self.ucicmd .. " 2>/dev/null " .. cmd)
if res:len() == 0 then
return nil
else
return res:sub(1, res:len()-1)
end
end
function Session._uci2(self, cmd)
local res = luci.sys.exec(self.ucicmd .. " 2>&1 " .. cmd)
if res:len() > 0 then
return false, res
else
return true
end
end
-- Build path (config.section.option=value) and prevent command injection
function _path(...)
local result = ""
-- Not using ipairs because it is not reliable in case of nil arguments
arg.n = nil
for k,v in pairs(arg) do
if v then
v = tostring(v)
if k == 1 then
result = "'" .. v:gsub("['.]", "") .. "'"
elseif k < 4 then
result = result .. ".'" .. v:gsub("['.]", "") .. "'"
elseif k == 4 then
result = result .. "='" .. v:gsub("'", "") .. "'"
end
end
end
return result
end

View file

@ -8,6 +8,29 @@ function index()
node("admin", "uci", "apply").target = call("action_apply")
end
function convert_changes(changes)
local ret = {}
for r, tbl in pairs(changes) do
for s, os in pairs(tbl) do
for o, v in pairs(os) do
local val, str
if (v == "") then
str = "-"
val = ""
else
str = ""
val = "="..v
end
str = str.."."..r
if o ~= ".type" then
str = str.."."..o
end
table.insert(ret, str..val)
end
end
end
end
-- This function has a higher priority than the admin_uci/apply template
function action_apply()
local changes = luci.model.uci.changes()
@ -18,8 +41,7 @@ function action_apply()
local run = {}
-- Collect files to be applied and commit changes
for i, line in ipairs(luci.util.split(changes)) do
local r = line:match("^-?([^.]+)")
for r, tbl in pairs(changes) do
if r then
com[r] = true
@ -40,7 +62,8 @@ function action_apply()
end
end
luci.template.render("admin_uci/apply", {changes=changes, output=output})
luci.template.render("admin_uci/apply", {changes=convert_changes(changes), output=output})
end
@ -50,8 +73,7 @@ function action_revert()
local revert = {}
-- Collect files to be reverted
for i, line in ipairs(luci.util.split(changes)) do
local r = line:match("^-?([^.]+)")
for r, tbl in ipairs(changes) do
if r then
revert[r] = true
end
@ -63,5 +85,5 @@ function action_revert()
end
end
luci.template.render("admin_uci/revert", {changes=changes})
end
luci.template.render("admin_uci/revert", {changes=convert_changes(changes)})
end

View file

@ -120,9 +120,11 @@ end
<%
if "admin" == request[1] then
require("luci.model.uci")
local ucic = luci.model.uci.changes()
if ucic then
ucic = #luci.util.split(ucic)
local ucic = 0
for n, s in pairs(luci.model.uci.changes()) do
for no, o in pairs(s) do
ucic = ucic + 1;
end
end
%>
<div><%:config Konfiguration%>
@ -138,4 +140,4 @@ end
</div>
<% end %>
</div>
<div id="content">
<div id="content">

View file

@ -120,9 +120,11 @@ end
<%
if "admin" == request[1] then
require("luci.model.uci")
local ucic = luci.model.uci.changes()
if ucic then
ucic = #luci.util.split(ucic)
local ucic = 0
for n, s in pairs(luci.model.uci.changes()) do
for no, o in pairs(s) do
ucic = ucic + 1;
end
end
%>
<div><%:config Konfiguration%>
@ -138,4 +140,4 @@ end
</div>
<% end %>
</div>
<div id="content">
<div id="content">