summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Server/FileMonitor/__init__.py
diff options
context:
space:
mode:
authorChris St. Pierre <chris.a.st.pierre@gmail.com>2012-09-25 11:49:15 -0400
committerChris St. Pierre <chris.a.st.pierre@gmail.com>2012-09-25 11:58:48 -0400
commiteac71fc1109f2edc6b71e62a6cff38d762bebe63 (patch)
tree203cf372e31b92dfc0cf7ea57c451c44e5e1e54b /src/lib/Bcfg2/Server/FileMonitor/__init__.py
parent3f16355e18cdceb37828a00a8181d9cc60815cd0 (diff)
downloadbcfg2-eac71fc1109f2edc6b71e62a6cff38d762bebe63.tar.gz
bcfg2-eac71fc1109f2edc6b71e62a6cff38d762bebe63.tar.bz2
bcfg2-eac71fc1109f2edc6b71e62a6cff38d762bebe63.zip
expanded pylint coverage
Diffstat (limited to 'src/lib/Bcfg2/Server/FileMonitor/__init__.py')
-rw-r--r--src/lib/Bcfg2/Server/FileMonitor/__init__.py45
1 files changed, 29 insertions, 16 deletions
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