From: Mark Wooding Date: Sat, 29 Apr 2017 12:55:40 +0000 (+0100) Subject: make-secnet-sites: Introduce a notion of listish types. X-Git-Url: https://git.distorted.org.uk/~mdw/secnet/commitdiff_plain/35744ac3584df4b658ae4d4c17fd71c620e3ba26 make-secnet-sites: Introduce a notion of listish types. A property of such a listish type can be assigned multiple times, and the values accumulate, and get reported as a list in the output configuration. Currently none are defined, so you can't see what this does. Signed-off-by: Mark Wooding --- diff --git a/README.make-secnet-sites b/README.make-secnet-sites index efca19a..240ce41 100644 --- a/README.make-secnet-sites +++ b/README.make-secnet-sites @@ -117,8 +117,9 @@ INPUT SYNTAX Finally, the properties. - If a property has already been defined on an item, then it is an - error to try to redefine it. + Usually, if a property has already been defined on an item, then + it is an error to try to redefine it. But some properties are + list-like: the values are accumulated into a single list. Mostly, properties are written to corresponding assignments in the generated Secnet configuration file, . The entries below diff --git a/make-secnet-sites b/make-secnet-sites index 371c82e..c079bcc 100755 --- a/make-secnet-sites +++ b/make-secnet-sites @@ -70,7 +70,21 @@ VERSION="0.1.18" class basetype: "Common protocol for configuration types." - pass + def add(self,obj,w): + complain("%s %s already has property %s defined"% + (obj.type,obj.name,w[0])) + +class conflist: + "A list of some kind of configuration type." + def __init__(self,subtype,w): + self.subtype=subtype + self.list=[subtype(w)] + def add(self,obj,w): + self.list.append(self.subtype(w)) + def __str__(self): + return ', '.join(map(str, self.list)) +def listof(subtype): + return lambda w: conflist(subtype, w) class single_ipaddr (basetype): "An IP address" @@ -328,8 +342,7 @@ prefix='' def set_property(obj,w): "Set a property on a configuration node" if obj.properties.has_key(w[0]): - complain("%s %s already has property %s defined"% - (obj.type,obj.name,w[0])) + obj.properties[w[0]].add(obj,w) else: obj.properties[w[0]]=keywords[w[0]][0](w)