Пример #1
0
Файл: watch.py Проект: nex3/mdb
class Process(pyi.ProcessEvent):
    def __init__(self, server, name):
        self.server = server
        self.name = name
        self.db = Database(server=server, name=name)

    def process_IN_DELETE(self, event):
        if event.is_dir: return

        path = os.path.join(event.path, event.name)
        print "Removing %s..." % path
        self.db.remove(path)

    def process_IN_MOVED_TO(self, event):
        if not event.is_dir:
            self.process_default(event)
            return

        path = os.path.join(event.path, event.name)
        print "Slurping %s..." % path
        Slurp([path], server=self.server, name=self.name, progress=False).run()

    def process_IN_MOVED_FROM(self, event):
        if not event.is_dir:
            self.process_IN_DELETE(self, event)

        path = os.path.join(event.path, event.name)
        print "Removing %s..." % path
        self.db.remove_docs(self.db.docs_beneath(path))

    def process_default(self, event):
        if event.is_dir: return

        path = os.path.join(event.path, event.name)
        print "Updating %s..." % path

        for attempt in range(10):
            try:
                self.db.add(path)
                break
            except EOFError:
                if attempt < 9:
                    print "File not yet written, waiting a second..."
                    time.sleep(1)
                else:
                    print "Giving up."
Пример #2
0
Файл: check.py Проект: nex3/mdb
class Check:
    def __init__(self, server, name, progress=True):
        self.current_files = 0
        self.db = Database(server, name)
        self.progress = progress
        self.view = self.db.db.view('_view/update/check')

        if self.progress:
            sys.stderr.write("Counting files...\r")
            self.total_files = len(self.view)
            self.bar = ProgressBar(self.total_files)
        else:
            self.total_files = sys.maxint

    def run(self):
        if self.progress: self.bar.start()

        mount_errors = set()
        for i, doc in enumerate(row.value for row in self.view):
            if "mountpoint" in doc:
                mountpoint = util.qencode(doc["mountpoint"])
                if not os.path.ismount(mountpoint):
                    if not mountpoint in mount_errors:
                        sys.stderr.write("Error: %s isn't mounted\n" % mountpoint)
                        if self.progress: sys.stderr.write("\n\n")
                        mount_errors.add(mountpoint)
                    continue
            filename = util.qencode(doc["filename"])
            try:
                if not os.path.isfile(filename):
                    self.db.remove(filename)
                elif util.mtime(filename) > doc["mtime"]:
                    self.db.update(doc, filename)
            except Exception:
                print "Error when updating %s:" % filename
                traceback.print_exc()
                if self.progress: sys.stderr.write("\n\n")
            if self.progress: self.bar.update(i)
        if self.progress: self.bar.finish()