* CBI: updates
authorSteven Barth <steven@midlink.org>
Mon, 24 Mar 2008 15:39:32 +0000 (15:39 +0000)
committerSteven Barth <steven@midlink.org>
Mon, 24 Mar 2008 15:39:32 +0000 (15:39 +0000)
* UCI: Introduced Session class, supporting different change file paths
* util: introduced sessionid() function
* general: Changed several error messages to OS native ones

src/ffluci/cbi.lua
src/ffluci/fs.lua
src/ffluci/model/uci.lua
src/ffluci/template.lua
src/ffluci/util.lua

index 0c2718ea8e37a8f3a673f783a0db68336721b38a..a535dc8b72711f9349d42cb509f01f00df1ffb2d 100644 (file)
@@ -41,10 +41,10 @@ function load(cbimap)
        require("ffluci.i18n")
        
        local cbidir = ffluci.fs.dirname(ffluci.util.__file__()) .. "model/cbi/"
-       local func = loadfile(cbidir..cbimap..".lua")
+       local func, err = loadfile(cbidir..cbimap..".lua")
        
        if not func then
-               error("Unable to load CBI map: " .. cbimap)
+               error(err)
                return nil
        end
        
@@ -102,10 +102,11 @@ function Map.__init__(self, config, ...)
        Node.__init__(self, ...)
        self.config = config
        self.template = "cbi/map"
+       self.uci = ffluci.model.uci.Session()
 end
 
 function Map.parse(self)
-       self.ucidata = ffluci.model.uci.show(self.config)
+       self.ucidata = self.uci:show(self.config)
        if not self.ucidata then
                error("Unable to read UCI data: " .. self.config)
        else
@@ -115,7 +116,7 @@ function Map.parse(self)
 end
 
 function Map.render(self)
-       self.ucidata = ffluci.model.uci.show(self.config)
+       self.ucidata = self.uci:show(self.config)
        if not self.ucidata then
                error("Unable to read UCI data: " .. self.config)
        else
@@ -136,6 +137,10 @@ function Map.section(self, class, ...)
        end
 end
 
+function Map.set(self, section, option, value)
+       return self.uci:set(self.config, section, option, value)
+end
+
 --[[
 AbstractSection
 ]]--
@@ -262,7 +267,7 @@ function AbstractValue.validate(self, value)
 end
 
 function AbstractValue.write(self, value)
-       return ffluci.model.uci.set(self.config, self.section, self.option, value)
+       return self.map:set(self.section, self.option, value)
 end
 
 
@@ -296,7 +301,7 @@ function ListValue.__init__(self, ...)
        self.list = {}
 end
 
-function ListValue.addValue(self, key, val)
+function ListValue.add_value(self, key, val)
        val = val or key
        self.list[key] = val
 end
\ No newline at end of file
index fb9a9c1c95e16c47310e08259d52b86dea135f19..fdea1b51ec0d6b20933fca08e016de8e7bec6b74 100644 (file)
@@ -37,10 +37,10 @@ end
 
 -- Returns the content of file
 function readfile(filename)
-       local fp = io.open(filename)
+       local fp, err = io.open(filename)
        
        if fp == nil then
-               error("Unable to open file for reading: " .. filename)
+               error(err)
        end
        
        local data = fp:read("*a")
@@ -50,12 +50,12 @@ end
 
 -- Returns the content of file as array of lines
 function readfilel(filename)
-       local fp = io.open(filename)
+       local fp, err = io.open(filename)
        local line = ""
        local data = {}
                
        if fp == nil then
-               error("Unable to open file for reading: " .. filename)
+               error(err)
        end
        
        while true do
@@ -70,9 +70,9 @@ end
 
 -- Writes given data to a file
 function writefile(filename, data)
-       local fp = io.open(filename, "w")
+       local fp, err = io.open(filename, "w")
        if fp == nil then
-               error("Unable to open file for writing: " .. filename)
+               error(err)
        end
        fp:write(data)
        fp:close()
@@ -97,4 +97,9 @@ function dir(path)
                end
        end
        return e
+end
+
+-- Alias for lfs.mkdir
+function mkdir(...)
+       return lfs.mkdir(...)
 end
\ No newline at end of file
index 9b9fcb093544a762baa83bd59622509bb27e19f7..5faffe548636bd1b29c696a93ed80dde180fc308 100644 (file)
@@ -28,55 +28,101 @@ limitations under the License.
 ]]--
 module("ffluci.model.uci", package.seeall)
 require("ffluci.util")
+require("ffluci.fs")
 
+-- The OS uci command
 ucicmd = "uci"
 
+-- Session class
+Session = ffluci.util.class()
+
+-- Session constructor
+function Session.__init__(self, path, uci)
+       uci = uci or ucicmd
+       if path then
+               self.ucicmd = uci .. " -P " .. path 
+       else
+               self.ucicmd = uci
+       end
+end
+
+-- The default Session
+local default = Session()
+
 -- Wrapper for "uci add"
-function add(config, section_type)
-       return _uci("add " .. _path(config) .. " " .. _path(section_type))
+function Session.add(self, config, section_type)
+       return self:_uci("add " .. _path(config) .. " " .. _path(section_type))
+end
+
+function add(...)
+       return default:add(...)
 end
 
 
 -- Wrapper for "uci changes"
-function changes(config)
-       return _uci3("changes " .. _path(config))
+function Session.changes(self, config)
+       return self:_uci3("changes " .. _path(config))
+end
+
+function change(...)
+       return default:change(...)
 end
 
 
 -- Wrapper for "uci commit"
-function commit(config)
-       return _uci2("commit " .. _path(config))
+function Session.commit(self, config)
+       return self:_uci2("commit " .. _path(config))
+end
+
+function commit(...)
+       return default:commit(...)
 end
 
 
 -- Wrapper for "uci get"
-function get(config, section, option)
-       return _uci("get " .. _path(config, section, option))
+function Session.get(self, config, section, option)
+       return self:_uci("get " .. _path(config, section, option))
+end
+
+function get(...)
+       return default:get(...)
 end
 
 
 -- Wrapper for "uci revert"
-function revert(config)
-       return _uci2("revert " .. _path(config))
+function Session.revert(self, config)
+       return self:_uci2("revert " .. _path(config))
+end
+
+function revert(...)
+       return self:revert(...)
 end
 
 
 -- Wrapper for "uci show"
-function show(config)
-       return _uci3("show " .. _path(config))
+function Session.show(self, config)
+       return self:_uci3("show " .. _path(config))
+end
+
+function show(...)
+       return default:show(...)
 end
 
 
 -- Wrapper for "uci set"
-function set(config, section, option, value)
-       return _uci2("set " .. _path(config, section, option, value))
+function Session.set(self, config, section, option, value)
+       return self:_uci2("set " .. _path(config, section, option, value))
+end
+
+function set(...)
+       return default:set(...)
 end
 
 
 -- Internal functions --
 
-function _uci(cmd)
-       local res = ffluci.util.exec(ucicmd .. " 2>/dev/null " .. cmd)
+function Session._uci(self, cmd)
+       local res = ffluci.util.exec(self.ucicmd .. " 2>/dev/null " .. cmd)
        
        if res:len() == 0 then
                return nil
@@ -85,8 +131,8 @@ function _uci(cmd)
        end     
 end
 
-function _uci2(cmd)
-       local res = ffluci.util.exec(ucicmd .. " 2>&1 " .. cmd)
+function Session._uci2(self, cmd)
+       local res = ffluci.util.exec(self.ucicmd .. " 2>&1 " .. cmd)
        
        if res:len() > 0 then
                return false, res
@@ -95,8 +141,8 @@ function _uci2(cmd)
        end     
 end
 
-function _uci3(cmd)
-       local res = ffluci.util.execl(ucicmd .. " 2>&1 " .. cmd)
+function Session._uci3(self, cmd)
+       local res = ffluci.util.execl(self.ucicmd .. " 2>&1 " .. cmd)
        if res[1]:sub(1, ucicmd:len() + 1) == ucicmd .. ":" then
                return nil, res[1]
        end
index 18265a4a16d82fe4325d792d00a03e2b85de5cbe..17f36194fd3ac4bffa657d99302f47f322056837 100644 (file)
@@ -128,7 +128,7 @@ function render(name, scope, ...)
        scope = scope or getfenv(2)
        local s, t = pcall(Template, name)
        if not s then
-               error("Unable to load template: " .. name)
+               error(t)
        else
                t:render(scope, ...)
        end
@@ -165,7 +165,8 @@ function Template.__init__(self, name)
        
        -- Compile and build
        local sourcefile   = viewdir .. name .. ".htm"
-       local compiledfile = viewdir .. name .. ".lua"  
+       local compiledfile = viewdir .. name .. ".lua"
+       local err       
        
        if compiler_mode == "file" then
                local tplmt = ffluci.fs.mtime(sourcefile)
@@ -176,25 +177,22 @@ function Template.__init__(self, name)
                or (not (commt == nil) and not (tplmt == nil) and commt < tplmt) then
                        local compiled = compile(ffluci.fs.readfile(sourcefile))
                        ffluci.fs.writefile(compiledfile, compiled)
-                       self.template = loadstring(compiled)
+                       self.template, err = loadstring(compiled)
                else
-                       self.template = loadfile(compiledfile)
+                       self.template, err = loadfile(compiledfile)
                end
                
        elseif compiler_mode == "none" then
-               self.template = loadfile(self.compiledfile)
+               self.template, err = loadfile(self.compiledfile)
                
        elseif compiler_mode == "memory" then
-               self.template = loadstring(compile(ffluci.fs.readfile(sourcefile)))
+               self.template, err = loadstring(compile(ffluci.fs.readfile(sourcefile)))
                        
-       else
-               error("Invalid compiler mode: " .. compiler_mode)
-               
        end
        
        -- If we have no valid template throw error, otherwise cache the template
        if not self.template then
-               error("Unable to load template: " .. name)
+               error(err)
        else
                self.cache[name] = self.template
        end
index 8a526173d78af4bcb254999b08008786ce1ca4f8..38f33a20d46f224cddf049d7ffab548c1d8bfb9e 100644 (file)
@@ -36,7 +36,10 @@ function class(base)
                setmetatable(inst, {__index = class})
                
                if inst.__init__ then
-                       inst:__init__(...)
+                       local stat, err = pcall(inst.__init__, inst, ...)
+                       if not stat then
+                               error(err)
+                       end
                end
                
                return inst
@@ -138,6 +141,11 @@ function resfenv(f)
 end 
 
 
+-- Returns the Haserl unique sessionid
+function sessionid()
+       return ENV.SESSIONID
+end
+
 -- Updates the scope of f with "extscope"
 function updfenv(f, extscope)
        local scope = getfenv(f)