665866e682e11404ad9da0cce16d852dc664f20e
[project/luci.git] / libs / uci / luasrc / model / uci.lua
1 --[[
2 LuCI - UCI mpdel
3
4 Description:
5 Generalized UCI model
6
7 FileId:
8 $Id$
9
10 License:
11 Copyright 2008 Steven Barth <steven@midlink.org>
12
13 Licensed under the Apache License, Version 2.0 (the "License");
14 you may not use this file except in compliance with the License.
15 You may obtain a copy of the License at
16
17 http://www.apache.org/licenses/LICENSE-2.0
18
19 Unless required by applicable law or agreed to in writing, software
20 distributed under the License is distributed on an "AS IS" BASIS,
21 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22 See the License for the specific language governing permissions and
23 limitations under the License.
24
25 ]]--
26 local uci = require("uci")
27 local util = require("luci.util")
28 local setmetatable, rawget, rawset = setmetatable, rawget, rawset
29 local error, pairs, ipairs, tostring = error, pairs, ipairs, tostring
30 local table = table
31
32 --- LuCI UCI model library.
33 module("luci.model.uci", function(m) setmetatable(m, {__index = uci}) end)
34
35 savedir_default = "/tmp/.uci"
36 confdir_default = "/etc/config"
37
38 savedir_state = "/var/state"
39
40 --- Delete all sections of a given type that match certain criteria.
41 -- @param config UCI config
42 -- @param type UCI section type
43 -- @param comparator Function that will be called for each section and
44 -- returns a boolean whether to delete the current section (optional)
45 function delete_all(config, type, comparator)
46 local del = {}
47 local function helper (section)
48 if not comparator or comparator(section) then
49 table.insert(del, section[".name"])
50 end
51 end
52
53 foreach(config, type, helper)
54
55 for i, j in ipairs(del) do
56 delete(config, j)
57 end
58 end
59
60 --- Create a new section and initialize it with data.
61 -- @param config UCI config
62 -- @param type UCI section type
63 -- @param name UCI section name (optional)
64 -- @param values Table of key - value pairs to initialize the section with
65 -- @return Name of created section
66 function section(config, type, name, values)
67 local stat = true
68 if name then
69 stat = set(config, name, type)
70 else
71 name = add(config, type)
72 stat = name and true
73 end
74
75 if stat and values then
76 stat = tset(config, name, values)
77 end
78
79 return stat and name
80 end
81
82 --- Get a certain state value.
83 -- @param ... Parameters passed to function get
84 -- @return UCI value
85 -- @see get
86 function get_statevalue(...)
87 set_savedir(savedir_state)
88 local result = get(...)
89 set_savedir(savedir_default)
90 return result
91 end
92
93 --- Updated the data of a section using data from a table.
94 -- @param config UCI config
95 -- @param section UCI section name (optional)
96 -- @param values Table of key - value pairs to update the section with
97 function tset(config, section, values)
98 local stat = true
99 for k, v in pairs(values) do
100 if k:sub(1, 1) ~= "." then
101 stat = stat and set(config, section, k, v)
102 end
103 end
104 return stat
105 end
106
107
108 --- Add an anonymous section.
109 -- @class function
110 -- @name add
111 -- @param config UCI config
112 -- @param type UCI section type
113 -- @return Name of created section
114
115 --- Get a table of unsaved changes.
116 -- @class function
117 -- @name changes
118 -- @param config UCI config
119 -- @return Table of changes
120
121 --- Commit unsaved changes.
122 -- @class function
123 -- @name commit
124 -- @param config UCI config
125 -- @return Boolean whether operation succeeded
126 -- @see revert
127
128 --- Deletes a section or an option.
129 -- @class function
130 -- @name delete
131 -- @param config UCI config
132 -- @param section UCI section name
133 -- @param option UCI option (optional)
134 -- @return Boolean whether operation succeeded
135
136 --- Call a function for every section of a certain type.
137 -- @class function
138 -- @name foreach
139 -- @param config UCI config
140 -- @param type UCI section type
141 -- @param callback Function to be called
142 -- @return Boolean whether operation succeeded
143
144 --- Get a section type or an option
145 -- @class function
146 -- @name get
147 -- @param config UCI config
148 -- @param section UCI section name
149 -- @param option UCI option (optional)
150 -- @return UCI value
151
152 --- Get all sections of a config or all values of a section.
153 -- @class function
154 -- @name get_all
155 -- @param config UCI config
156 -- @param section UCI section name (optional)
157 -- @return Table of UCI sections or table of UCI values
158
159 --- Manually load a config.
160 -- @class function
161 -- @name load
162 -- @param config UCI config
163 -- @return Boolean whether operation succeeded
164 -- @see save
165 -- @see unload
166
167 --- Revert unsaved changes.
168 -- @class function
169 -- @name revert
170 -- @param config UCI config
171 -- @return Boolean whether operation succeeded
172 -- @see commit
173
174 --- Saves changes made to a config to make them committable.
175 -- @class function
176 -- @name save
177 -- @param config UCI config
178 -- @return Boolean whether operation succeeded
179 -- @see load
180 -- @see unload
181
182 --- Set a value or create a named section.
183 -- @class function
184 -- @name set
185 -- @param config UCI config
186 -- @param section UCI section name
187 -- @param option UCI option or UCI section type
188 -- @param value UCI value or nil if you want to create a section
189 -- @return Boolean whether operation succeeded
190
191 --- Set the configuration directory.
192 -- @class function
193 -- @name set_confdir
194 -- @param directory UCI configuration directory
195 -- @return Boolean whether operation succeeded
196
197 --- Set the directory for uncommited changes.
198 -- @class function
199 -- @name set_savedir
200 -- @param directory UCI changes directory
201 -- @return Boolean whether operation succeeded
202
203 --- Discard changes made to a config.
204 -- @class function
205 -- @name unload
206 -- @param config UCI config
207 -- @return Boolean whether operation succeeded
208 -- @see load
209 -- @see save