def watch(path, callback): header("Build Daemon") if Observer is None: error("You need to install Watchdog for supporting file system watchers") # We need to pause the session to make room for other jasy executions session.pause() # Initialize file system observer observer = Observer() observer.schedule(JasyEventHandler(), ".", recursive=True) observer.start() info("Started file system watcher for %s... [PID=%s]", path, os.getpid()) info("Use 'ulimit -n 1024' to increase number of possible open files") try: while True: time.sleep(1) except KeyboardInterrupt: observer.stop() info("Stopped file system watcher for %s...", path) observer.join()
def __init__(self, filename): try: self.fp = open(filename, "rb") except IOError as err: error("Could not open file: %s" % filename) raise err
def skip(self): """Eats comments and whitespace.""" input = self.source startLine = self.line # Whether this is the first called as happen on start parsing a file (eat leading comments/white space) startOfFile = self.cursor is 0 indent = "" while (True): if len(input) > self.cursor: ch = input[self.cursor] else: return self.cursor += 1 if len(input) > self.cursor: next = input[self.cursor] else: next = None if ch == "\n" and not self.scanNewlines: self.line += 1 indent = "" elif ch == "/" and next == "*": self.cursor += 1 text = "/*" inline = startLine == self.line and startLine > 1 commentStartLine = self.line if startLine == self.line and not startOfFile: mode = "inline" elif (self.line-1) > startLine: # distance before this comment means it is a comment block for a whole section (multiple lines of code) mode = "section" else: # comment for maybe multiple following lines of code, but not that important (no visual white space divider) mode = "block" while (True): try: ch = input[self.cursor] self.cursor += 1 except IndexError: raise ParseError("Unterminated comment", self.fileId, self.line) if ch == "*": next = input[self.cursor] if next == "/": text += "*/" self.cursor += 1 break elif ch == "\n": self.line += 1 text += ch # Filter escaping on slash-star combinations in comment text text = text.replace("*\/", "*/") try: self.comments.append(Comment(text, mode, commentStartLine, indent, self.fileId)) except CommentException as commentError: error("Ignoring comment in %s: %s", self.fileId, commentError) elif ch == "/" and next == "/": self.cursor += 1 text = "//" if startLine == self.line and not startOfFile: mode = "inline" elif (self.line-1) > startLine: # distance before this comment means it is a comment block for a whole section (multiple lines of code) mode = "section" else: # comment for maybe multiple following lines of code, but not that important (no visual white space divider) mode = "block" while (True): try: ch = input[self.cursor] self.cursor += 1 except IndexError: # end of file etc. break if ch == "\n": self.line += 1 break text += ch try: self.comments.append(Comment(text, mode, self.line-1, "", self.fileId)) except CommentException: error("Ignoring comment in %s: %s", self.fileId, commentError) # check for whitespace, also for special cases like 0xA0 elif ch in "\xA0 \t": indent += ch else: self.cursor -= 1 return
def inspect(*param, **args): if args["severity"] > 20: error("Critical error occoured:") error(param[0])