diff options
Diffstat (limited to 'src/lib/Server/Plugins/GBundler.py')
-rw-r--r-- | src/lib/Server/Plugins/GBundler.py | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/lib/Server/Plugins/GBundler.py b/src/lib/Server/Plugins/GBundler.py new file mode 100644 index 000000000..309f04b3e --- /dev/null +++ b/src/lib/Server/Plugins/GBundler.py @@ -0,0 +1,38 @@ + +import logging, re +import SGenshi + +pattern = '(.*/)?(\S+)\.xml(\.((H_(?P<hostname>\S+))|' +pattern += '(G(?P<prio>\d+)_(?P<group>\S+))))?$' + +matcher = re.compile(pattern) + +logger = logging.getLogger('GBundler') + +class GBundlerEntrySet(SGenshi.SGenshiEntrySet): + def BuildStructures(self, metadata): + '''Build SGenshi structures''' + ret = [] + found = [] + build = [] + matching = self.get_matching(metadata) + matching.sort(lambda x,y: cmp(x.specific, y.specific)) + for entry in matching[:]: + rem = matcher.match(entry.name) + bname = rem.group(2) + if bname in metadata.bundles and bname not in found: + found.append(bname) + build.append(entry) + + for entry in build: + try: + ret.append(entry.get_xml_value(metadata)) + except genshi.template.TemplateError, terror: + logger.error('Genshi template error: %s' % terror) + logger.error("GBundler: Failed to template file %s" % entry.name) + return ret + +class GBundler(GBundlerEntrySet, SGenshi.SGenshi): + name = 'GBundler' + __version__ = '$Revision: $' + |