summaryrefslogtreecommitdiffstats
path: root/src/lib/Server/Plugins/Packages/PackagesSources.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/Server/Plugins/Packages/PackagesSources.py')
-rw-r--r--src/lib/Server/Plugins/Packages/PackagesSources.py31
1 files changed, 26 insertions, 5 deletions
diff --git a/src/lib/Server/Plugins/Packages/PackagesSources.py b/src/lib/Server/Plugins/Packages/PackagesSources.py
index 6d0b1d732..4fbccab30 100644
--- a/src/lib/Server/Plugins/Packages/PackagesSources.py
+++ b/src/lib/Server/Plugins/Packages/PackagesSources.py
@@ -3,10 +3,10 @@ import sys
import lxml.etree
import logging
import Bcfg2.Server.Plugin
+from Bcfg2.Server.Plugins.Packages.Source import SourceInitError
logger = logging.getLogger("Packages")
-
class PackagesSources(Bcfg2.Server.Plugin.SingleXMLFileBacked,
Bcfg2.Server.Plugin.StructFile):
__identifier__ = None
@@ -30,8 +30,19 @@ class PackagesSources(Bcfg2.Server.Plugin.SingleXMLFileBacked,
# create cache directory if needed
os.makedirs(self.cachepath)
self.pkg_obj = packages
+ self.parsed = set()
self.loaded = False
+ def HandleEvent(self, event=None):
+ Bcfg2.Server.Plugin.SingleXMLFileBacked.HandleEvent(self, event=event)
+ if event.filename != self.name:
+ self.parsed.add(os.path.basename(event.filename))
+
+ if sorted(list(self.parsed)) == sorted(self.extras):
+ logger.info("Reloading Packages plugin")
+ self.pkg_obj.Reload()
+ self.loaded = True
+
def Index(self):
Bcfg2.Server.Plugin.SingleXMLFileBacked.Index(self)
self.entries = []
@@ -40,9 +51,6 @@ class PackagesSources(Bcfg2.Server.Plugin.SingleXMLFileBacked,
if source is not None:
self.entries.append(source)
- self.pkg_obj.Reload()
- self.loaded = True
-
def source_from_xml(self, xsource):
""" create a *Source object from its XML representation in
sources.xml """
@@ -60,7 +68,20 @@ class PackagesSources(Bcfg2.Server.Plugin.SingleXMLFileBacked,
logger.error("Packages: Unknown source type %s" % stype)
return None
- return cls(self.cachepath, xsource, self.config)
+ try:
+ source = cls(self.cachepath, xsource, self.config)
+ except SourceInitError:
+ err = sys.exc_info()[1]
+ logger.error("Packages: %s" % err)
+ source = None
+
+ return source
def __getitem__(self, key):
return self.entries[key]
+
+ def __repr__(self):
+ return "PackagesSources: %s" % repr(self.entries)
+
+ def __str__(self):
+ return "PackagesSources: %s" % str(self.entries)