summaryrefslogtreecommitdiff
path: root/source4/param/param.i
diff options
context:
space:
mode:
Diffstat (limited to 'source4/param/param.i')
-rw-r--r--source4/param/param.i59
1 files changed, 59 insertions, 0 deletions
diff --git a/source4/param/param.i b/source4/param/param.i
index 11cda9910a..375c3d0da4 100644
--- a/source4/param/param.i
+++ b/source4/param/param.i
@@ -181,6 +181,7 @@ typedef struct param_context {
struct param_opt *get(const char *name, const char *section_name="global");
const char *get_string(const char *name, const char *section_name="global");
int set_string(const char *param, const char *value, const char *section="global");
+#ifdef SWIGPYTHON
int set(const char *parameter, PyObject *ob, const char *section_name="global")
{
struct param_opt *opt = param_get_add($self, parameter, section_name);
@@ -190,6 +191,11 @@ typedef struct param_context {
return 0;
}
+
+#endif
+
+ struct param_section *first_section() { return $self->sections; }
+ struct param_section *next_section(struct param_section *s) { return s->next; }
int read(const char *fn);
int write(const char *fn);
@@ -200,12 +206,38 @@ typedef struct param_context {
if ret is None:
raise KeyError("No such section %s" % name)
return ret
+
+ class SectionIterator:
+ def __init__(self, param):
+ self.param = param
+ self.key = None
+
+ def __iter__(self):
+ return self
+
+ def next(self):
+ if self.key is None:
+ self.key = self.param.first_section()
+ if self.key is None:
+ raise StopIteration
+ return self.key
+ else:
+ self.key = self.param.next_section(self.key)
+ if self.key is None:
+ raise StopIteration
+ return self.key
+
+ def __iter__(self):
+ return self.SectionIterator(self)
}
} param;
%talloctype(param_opt);
typedef struct param_opt {
+ %immutable key;
+ %immutable value;
+ const char *key, *value;
%extend {
#ifdef SWIGPYTHON
const char *__str__() { return $self->value; }
@@ -215,8 +247,12 @@ typedef struct param_opt {
%talloctype(param);
typedef struct param_section {
+ %immutable name;
+ const char *name;
%extend {
struct param_opt *get(const char *name);
+ struct param_opt *first_parameter() { return $self->parameters; }
+ struct param_opt *next_parameter(struct param_opt *s) { return s->next; }
}
%pythoncode {
def __getitem__(self, name):
@@ -224,6 +260,29 @@ typedef struct param_section {
if ret is None:
raise KeyError("No such option %s" % name)
return ret
+
+ class ParamIterator:
+ def __init__(self, section):
+ self.section = section
+ self.key = None
+
+ def __iter__(self):
+ return self
+
+ def next(self):
+ if self.key is None:
+ self.key = self.section.first_parameter()
+ if self.key is None:
+ raise StopIteration
+ return self.key
+ else:
+ self.key = self.section.next_parameter(self.key)
+ if self.key is None:
+ raise StopIteration
+ return self.key
+
+ def __iter__(self):
+ return self.ParamIterator(self)
}
} param_section;