Example #1
0
    def __init__(self, URI=None, config=None):
        self.clear_special_roles()
        self.directive_count = 0
        self.directories = {}

        RadistNode.__init__(self, 'ix')
        content = adv_get_content(URI, config)

        clusters = {}
        for line, special in get_line_iterator(content, directives):
            if is_special_role(special):
                self.directive_count += 1
                self.add_special_role(parse_special_role_directive(special))
            elif is_directory(special):
                self.update_directories(special)
                self.directive_count += 1

            x = self.__get_roles(line)
            if x is None:
                # server without roles, skip one
                continue
            server, roles = x
#            print "start dancing..."
            for role, attrs in roles:
                special = self.get_special(role, attrs)
                for path, node in special.get_extra_nodes():
                    if self.get_default(path, None) is None:
                        self.add_node_to_path(path, node)

                for path, number in special.get_roles():
                    if type(number) != int:
                        name = number
                    else:
                        if number == -1:
                            if path not in clusters:
                                clusters[path] = -1
                            clusters[path] += 1
                            number = clusters[path]
                        name = "%03d" % number
                    node = RadistNode(name)
                    if self.directories_for(path, name):
                        node.add_attr('primary', RadistPrimary(self.directories_for(path, name)))
                    else:
                        node.add_attr('primary', \
                            RadistPrimary('%(server)s:/spool/_R_/%(path)s:/spool/_R_/%(path)s/tmp-radist' % \
                                {'server': server, 'path': path.split('/')[-1]}))
                    self.add_node_to_path('/'.join([path, node.name]), node)