import re
import sys
import time
+import glob
+
+
# this uses pyinotify
import pyinotify
from benderjab import rpc
+s_cycles = re.compile('No. Cycles: (?P<cycles>[0-9]+)')
+
+def get_cycles(run_dir="."):
+ """
+ Find the number of cycles from the Recipe*.xml file found in run_dir.
+ """
+
+ file_path_list = glob.glob(os.path.join(run_dir, "Recipe*.xml"))
+
+ # Error handling
+ if len(file_path_list) == 0:
+ msg = "Recipe xml file not found."
+ raise IOError, msg
+
+ elif len(file_path_list) > 1:
+ msg = "%s Recipe files found, expected 1." % (len(file_path_list))
+ raise ValueError, msg
+
+ f = open(file_path_list[0], 'r')
+
+ #Find the line of the file with the cycle number in it.
+ for line in f:
+ mo = s_cycles.search(line)
+ if mo:
+ break
+
+ f.close()
+
+ # Process the line with the cycle number in it.
+ cycle_num = int(mo.group('cycles'))
+
+ return cycle_num
+
+
+
+class WatcherEvents(object):
+ # two events need to be tracked
+ # one to send startCopy
+ # one to send OMG its broken
+ # OMG its broken needs to stop when we've seen enough
+ # cycles
+ # this should be per runfolder.
+ # read the xml files
+ def __init__(self):
+ pass
+
+
class Handler(pyinotify.ProcessEvent):
def __init__(self, watchmanager, bot):
self.last_event_time = None
if self.wdd is not None:
logging.debug("disabling watch")
logging.debug(str(self.wdd))
- self.wm.rm_watch(self.wdd)
+ self.wm.rm_watch(self.wdd.values())
self.wdd = None
def process_notify(self, *args):
if __name__ == "__main__":
sys.exit(main(sys.argv[1:]))
-
\ No newline at end of file
+