Added cbi2uvl converter
authorSteven Barth <steven@midlink.org>
Wed, 3 Sep 2008 12:16:46 +0000 (12:16 +0000)
committerSteven Barth <steven@midlink.org>
Wed, 3 Sep 2008 12:16:46 +0000 (12:16 +0000)
build/cbi2uvl.lua [new file with mode: 0755]

diff --git a/build/cbi2uvl.lua b/build/cbi2uvl.lua
new file mode 100755 (executable)
index 0000000..9207bf8
--- /dev/null
@@ -0,0 +1,111 @@
+#!/usr/bin/lua
+local cbi = require "luci.cbi"
+local i18n = require "luci.i18n"
+local util = require "luci.util"
+
+if not arg[1] then
+       util.perror("Usage %s path/to/cbi/model.lua [i18nfilename]" % arg[0])
+       os.exit(1)
+end
+
+i18n.load("default", "en")
+i18n.load("admin-core", "en")
+i18n.load("wifi", "en")
+
+if arg[2] then
+       i18n.load(arg[2], "en")
+end
+
+local map = cbi.load(arg[1])[1]
+assert(map)
+
+print ("package "..map.config)
+print ("\nconfig package")
+
+if #map.title > 0 then
+       print ("        option title '%s'" % util.striptags(map.title))
+end
+
+if #map.description > 0 then
+       print ("        option description '%s'" % util.striptags(map.description))
+end
+
+for i, sec in pairs(map.children) do if util.instanceof(sec, cbi.TypedSection) then
+       print ("\nconfig section")
+       print ("        option name '%s'" % sec.sectiontype)
+       print ("        option package '%s'" % map.config)
+       
+       if #sec.title > 0 then
+               print ("        option title '%s'" % util.striptags(sec.title))
+       end
+       
+       if #sec.description > 0 then
+               print ("        option description '%s'" % util.striptags(sec.description))
+       end
+       
+       if not sec.addremove then
+               print ("        option unique true")
+               print ("        option required true")
+       end
+       
+       if not sec.anonymous then
+               print ("        option named true")
+       end
+       
+       if sec.dynamic then
+               print ("        option dynamic true")
+       end
+       
+       for j, opt in ipairs(sec.children) do
+       if opt.option:sub(1,1) ~= "_" or util.instanceof(opt, cbi.Value) then 
+               print ("\nconfig variable")
+               print ("        option name '%s'" % opt.option)
+               print ("        option section '%s.%s'" % {map.config, sec.sectiontype})
+               if #opt.title > 0 then
+                       print ("        option title '%s'" % util.striptags(opt.title))
+               end
+               
+               if #opt.description > 0 then
+                       print ("        option description '%s'" % util.striptags(opt.description))
+               end
+               
+               if not opt.rmempty and not opt.optional then
+                       print ("        option required true")
+               end
+               
+               if util.instanceof(opt, cbi.Flag) then
+                       print ("        option type boolean")
+               elseif util.instanceof(opt, cbi.DynamicList) then
+                       print ("        option type list")
+               elseif util.instanceof(opt, cbi.ListValue) then
+                       print ("        option type enum")
+                       util.perror("*** Warning: Please verify '%s.%s.%s' ***" %
+                               {map.config, sec.sectiontype, opt.option} )
+               end
+               
+               for i, dep in ipairs(opt.deps) do
+                       if not dep.add or dep.add == "" then
+                               local depstring
+                               for k, v in pairs(dep.deps) do
+                                       depstring = (depstring and depstring .. "," or "") .. "%s=%s" % {k, v}
+                               end 
+                               print ("        list depends '%s'" % depstring)
+                       else
+                               util.perror("*** Warning: Unable to decode dependency '%s' in '%s.%s.%s[%s]' ***" %
+                                       {util.serialize_data(dep.deps), map.config, sec.sectiontype, opt.option, dep.add})
+                       end
+               end
+               
+               if util.instanceof(opt, cbi.ListValue) then
+                       for k, key in ipairs(opt.keylist) do
+                               print ("\nconfig enum")
+                               print ("        option variable '%s.%s.%s'" % {map.config, sec.sectiontype, opt.option})
+                               print ("        option value '%s'" % key)
+                               if opt.vallist[k] and opt.vallist[k] ~= opt.keylist[k] then
+                                       print ("        option title '%s'" % util.striptags(opt.vallist[k]))
+                               end
+                       end
+               end
+       end
+       end
+end end
\ No newline at end of file