From eac71fc1109f2edc6b71e62a6cff38d762bebe63 Mon Sep 17 00:00:00 2001 From: "Chris St. Pierre" Date: Tue, 25 Sep 2012 11:49:15 -0400 Subject: expanded pylint coverage --- src/lib/Bcfg2/Server/FileMonitor/__init__.py | 45 ++++++++++++++++++---------- 1 file changed, 29 insertions(+), 16 deletions(-) (limited to 'src/lib/Bcfg2/Server/FileMonitor/__init__.py') diff --git a/src/lib/Bcfg2/Server/FileMonitor/__init__.py b/src/lib/Bcfg2/Server/FileMonitor/__init__.py index fd0cb66f1..1b12ab703 100644 --- a/src/lib/Bcfg2/Server/FileMonitor/__init__.py +++ b/src/lib/Bcfg2/Server/FileMonitor/__init__.py @@ -4,12 +4,13 @@ import os import sys import fnmatch import logging -import pkgutil from time import sleep, time -logger = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) + class Event(object): + """ Base class for all FAM events """ def __init__(self, request_id, filename, code): self.requestID = request_id self.filename = filename @@ -53,33 +54,40 @@ class FileMonitor(object): self.started = True def debug_log(self, msg): + """ log a debug message """ if self.debug: - logger.info(msg) + LOGGER.info(msg) def should_ignore(self, event): + """ returns true if an event should be ignored """ for pattern in self.ignore: - if (fnmatch.fnmatch(event.filename, pattern) or + if (fnmatch.fnmatch(event.filename, pattern) or fnmatch.fnmatch(os.path.split(event.filename)[-1], pattern)): self.debug_log("Ignoring %s" % event) return True return False def pending(self): + """ returns True if there are pending events """ return bool(self.events) def get_event(self): + """ get the oldest pending event """ return self.events.pop(0) def fileno(self): + """ get the file descriptor of the file monitor thread """ return 0 def handle_one_event(self, event): + """ handle the given event by dispatching it to the object + that handles events for the path """ if not self.started: self.start() if self.should_ignore(event): return if event.requestID not in self.handles: - logger.info("Got event for unexpected id %s, file %s" % + LOGGER.info("Got event for unexpected id %s, file %s" % (event.requestID, event.filename)) return self.debug_log("Dispatching event %s %s to obj %s" % @@ -87,12 +95,13 @@ class FileMonitor(object): self.handles[event.requestID])) try: self.handles[event.requestID].HandleEvent(event) - except: + except: # pylint: disable=W0702 err = sys.exc_info()[1] - logger.error("Error in handling of event %s for %s: %s" % + LOGGER.error("Error in handling of event %s for %s: %s" % (event.code2str(), event.filename, err)) def handle_event_set(self, lock=None): + """ Handle all pending events """ if not self.started: self.start() count = 1 @@ -100,19 +109,18 @@ class FileMonitor(object): start = time() if lock: lock.acquire() - try: - self.handle_one_event(event) - while self.pending(): - self.handle_one_event(self.get_event()) - count += 1 - except: - pass + self.handle_one_event(event) + while self.pending(): + self.handle_one_event(self.get_event()) + count += 1 if lock: lock.release() end = time() - logger.info("Handled %d events in %.03fs" % (count, (end - start))) + LOGGER.info("Handled %d events in %.03fs" % (count, (end - start))) def handle_events_in_interval(self, interval): + """ handle events for the specified period of time (in + seconds) """ if not self.started: self.start() end = time() + interval @@ -124,10 +132,15 @@ class FileMonitor(object): sleep(0.5) def shutdown(self): + """ shutdown the monitor """ self.started = False + def AddMonitor(self, path, obj, handleID=None): + """ watch the specified path, alerting obj to events """ + raise NotImplementedError + -available = dict() +available = dict() # pylint: disable=C0103 # todo: loading the monitor drivers should be automatic from Bcfg2.Server.FileMonitor.Pseudo import Pseudo -- cgit v1.2.3-1-g7c22