예제 #1
0
    def create_source(self, objects=[]):
        """Create report from objects (list of DNs)."""
        tmpfile = self.__create_tempfile()
        admin.set_format(self._type)
        parser = Parser(filename=self._template)
        parser.tokenize()
        tokens = parser._tokens
        fd = codecs.open(tmpfile, 'wb+', encoding='utf8')
        if parser._header:
            fd.write(parser._header.data)
        elif self._header:
            self.__append_file(fd, self._header)

        for dn in objects:
            if isinstance(dn, basestring):
                obj = admin.get_object(None, dn)
            else:
                obj = admin.cache_object(dn)
            if obj is None:
                print >> sys.stderr, "warning: dn '%s' not found, skipped." % dn
                continue
            tks = copy.deepcopy(tokens)
            interpret = Interpreter(obj, tks)
            interpret.run()
            output = Output(tks, fd=fd)
            output.write()
        if parser._footer:
            fd.write(parser._footer.data)
        elif self._footer:
            self.__append_file(fd, self._footer)
        fd.close()

        return tmpfile
예제 #2
0
	def resolve(self, token, base):
		if 'module' in token.attrs:
			attr = token.attrs.get('dn-attribute', None)
			if attr and base.has_key(attr) and base[attr]:
				values = base[attr]
				if not isinstance(values, (list, tuple)):
					values = [values, ]
				for value in values:
					new_base = admin.get_object(token.attrs['module'], value)
					token.objects.append(new_base)
예제 #3
0
 def query(self, token, base):
     if 'module' in token.attrs:
         attr = token.attrs.get('start', None)
         if attr and base.has_property(attr) and base[attr]:
             admin.get_object(token.attrs['module'], base[attr][0])
             if not isinstance(base[attr], (list, tuple)):
                 base[attr] = [
                     base[attr],
                 ]
             filter = token.attrs.get('pattern', None)
             if filter:
                 filter = filter.split('=', 1)
             regex = token.attrs.get('regex', None)
             if regex:
                 regex = regex.split('=', 1)
                 regex[1] = re.compile(regex[1])
             objects = self._query_recursive(base[attr],
                                             token.attrs['next'],
                                             token.attrs['module'], filter,
                                             regex)
             token.objects.extend(objects)
예제 #4
0
	def _query_recursive(self, objects, attr, module, filter=None, regex=None):
		_objs = []
		for dn in objects:
			obj = admin.get_object(module, dn)
			if not filter and not regex:
				_objs.append(obj)
			elif filter and obj.has_key(filter[0]) and obj[filter[0]] and fnmatch.fnmatch(obj[filter[0]], filter[1]):
				_objs.append(obj)
			elif regex and obj.has_key(regex[0]) and obj[regex[0]] and regex[1].match(obj[regex[0]]):
				_objs.append(obj)
			if not obj.has_key(attr):
				continue

			_objs.extend(self._query_recursive(obj[attr], attr, module, filter, regex))

		return _objs