summaryrefslogtreecommitdiffstats
path: root/src/lib/Server/Plugins/GBundler.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/Server/Plugins/GBundler.py')
-rw-r--r--src/lib/Server/Plugins/GBundler.py38
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: $'
+