def handle_watchdog_move(self, evt, _, rel_path): # Dest dst_path = normalize_event_filename(evt.dest_path) if self.client.is_temp_file(os.path.basename(dst_path)): return log.warn("handle watchdog move: %r", evt) dst_rel_path = self.client.get_path(dst_path) doc_pair = self._dao.get_state_from_local(rel_path) # Add for security src_path and dest_path parent - not sure it is needed self._push_to_scan(os.path.dirname(rel_path)) if self.client.is_inside(dst_path): dst_rel_path = self.client.get_path(dst_path) self._push_to_scan(os.path.dirname(dst_rel_path)) if (doc_pair is None): # Scan new parent log.warn("NO PAIR") return # It is not yet created no need to move it if doc_pair.local_state != 'created': doc_pair.local_state = 'moved' local_info = self.client.get_info(dst_rel_path, raise_if_missing=False) if local_info is None: log.warn("Should not disapear") return self._dao.update_local_state(doc_pair, local_info, versionned=True) log.warn("has update with moved status")
def handle_watchdog_move(self, evt, src_path, rel_path): # Dest dst_path = normalize_event_filename(evt.dest_path) if self.client.is_temp_file(os.path.basename(dst_path)): return log.warn("handle watchdog move: %r", evt) dst_rel_path = self.client.get_path(dst_path) doc_pair = self._dao.get_state_from_local(rel_path) # Add for security src_path and dest_path parent - not sure it is needed self._push_to_scan(os.path.dirname(rel_path)) if self.client.is_inside(dst_path): dst_rel_path = self.client.get_path(dst_path) self._push_to_scan(os.path.dirname(dst_rel_path)) if (doc_pair is None): # Scan new parent log.warn("NO PAIR") return # It is not yet created no need to move it if doc_pair.local_state != 'created': doc_pair.local_state = 'moved' old_local_path = doc_pair.local_path local_info = self.client.get_info(dst_rel_path, raise_if_missing=False) if local_info is None: log.warn("Should not disapear") return self._dao.update_local_state(doc_pair, local_info, versionned=True) log.warn("has update with moved status")
def handle_watchdog_event(self, evt): self._action = Action("Handle watchdog event") log.debug("Handling watchdog event [%s] on %r", evt.event_type, evt.src_path) try: src_path = normalize_event_filename(evt.src_path) # Event on the folder by itself if os.path.isdir(src_path): return ref = self._local_client.get_path(src_path) file_name = os.path.basename(src_path) # Disable as we use the global open files instead of editor lock file if self.is_lock_file( file_name) and self._manager.get_direct_edit_auto_lock(): if evt.event_type == 'created': self._lock_queue.put((ref, 'lock')) elif evt.event_type == 'deleted': self._lock_queue.put((ref, 'unlock')) return queue = False if evt.event_type == 'modified' or evt.event_type == 'created': queue = True if evt.event_type == 'moved': ref = self._local_client.get_path(evt.dest_path) file_name = os.path.basename(evt.dest_path) src_path = evt.dest_path queue = True elif self._local_client.is_temp_file(file_name): return dir_path = self._local_client.get_path(os.path.dirname(src_path)) name = self._local_client.get_remote_id(dir_path, "nxdirecteditname") if name is None: return if name != file_name: return if self._manager.get_direct_edit_auto_lock( ) and self._local_client.get_remote_id(dir_path, "nxdirecteditlock") != "1": self._manager.get_autolock_service().set_autolock( src_path, self) if queue: # ADD TO UPLOAD QUEUE self._upload_queue.put(ref) return except ThreadInterrupt: raise except Exception as e: log.warn("Watchdog exception : %r", e, exc_info=True) finally: self._end_action()
def handle_watchdog_event(self, evt): self._metrics['last_event'] = current_milli_time() # For creation and deletion just update the parent folder src_path = normalize_event_filename(evt.src_path) rel_path = self.client.get_path(src_path) file_name = os.path.basename(src_path) if self.client.is_temp_file(file_name) or rel_path == '/.partials': return if evt.event_type == 'moved': self.handle_watchdog_move(evt, src_path, rel_path) return # Dont care about ignored file, unless it is moved if self.client.is_ignored(os.path.dirname(rel_path), file_name): return log.warn("Got evt: %r", evt) if len(rel_path) == 0 or rel_path == '/': self._push_to_scan('/') return # If not modified then we will scan the parent folder later if evt.event_type != 'modified': log.warn(rel_path) parent_rel_path = os.path.dirname(rel_path) if parent_rel_path == "": parent_rel_path = '/' self._push_to_scan(parent_rel_path) return file_name = os.path.basename(src_path) doc_pair = self._dao.get_state_from_local(rel_path) if not os.path.exists(src_path): log.warn("Event on a disappeared file: %r %s %s", evt, rel_path, file_name) return if doc_pair is not None and doc_pair.processor > 0: log.warn("Don't update as in process %r", doc_pair) return if isinstance(evt, DirModifiedEvent): self._push_to_scan(rel_path) else: local_info = self.client.get_info(rel_path, raise_if_missing=False) if local_info is None or doc_pair is None: # Suspicious return digest = local_info.get_digest() if doc_pair.local_state != 'created': if doc_pair.local_digest != digest: doc_pair.local_state = 'modified' doc_pair.local_digest = digest log.warn("file is updated: %r", doc_pair) self._dao.update_local_state(doc_pair, local_info, versionned=True)
def handle_watchdog_event(self, evt): self._metrics['last_event'] = current_milli_time() # For creation and deletion just update the parent folder src_path = normalize_event_filename(evt.src_path) rel_path = self.client.get_path(src_path) file_name = os.path.basename(src_path) if self.client.is_temp_file(file_name) or rel_path == '/.partials': return if evt.event_type == 'moved': self.handle_watchdog_move(evt, src_path, rel_path) return # Dont care about ignored file, unless it is moved if self.client.is_ignored(os.path.dirname(rel_path), file_name): return log.warn("Got evt: %r", evt) if len(rel_path) == 0 or rel_path == '/': self._push_to_scan('/') return # If not modified then we will scan the parent folder later if evt.event_type != 'modified': log.warn(rel_path) parent_rel_path = os.path.dirname(rel_path) if parent_rel_path == "": parent_rel_path = '/' self._push_to_scan(parent_rel_path) return file_name = os.path.basename(src_path) doc_pair = self._dao.get_state_from_local(rel_path) if not os.path.exists(src_path): log.warn("Event on a disappeared file: %r %s %s", evt, rel_path, file_name) return if doc_pair is not None and doc_pair.processor > 0: log.warn("Don't update as in process %r", doc_pair) return if isinstance(evt, DirModifiedEvent): self._push_to_scan(rel_path) else: local_info = self.client.get_info(rel_path, raise_if_missing=False) if local_info is None: # Suspicious return digest = local_info.get_digest() if doc_pair.local_state != 'created': if doc_pair.local_digest != digest: doc_pair.local_state = 'modified' doc_pair.local_digest = digest log.warn("file is updated: %r", doc_pair) self._dao.update_local_state(doc_pair, local_info, versionned=True)
def handle_watchdog_event(self, evt): self._action = Action("Handle watchdog event") log.debug("Handling watchdog event [%s] on %r", evt.event_type, evt.src_path) try: src_path = normalize_event_filename(evt.src_path) # Event on the folder by itself if os.path.isdir(src_path): return ref = self._local_client.get_path(src_path) file_name = os.path.basename(src_path) # Disable as we use the global open files instead of editor lock file if self.is_lock_file(file_name) and self._manager.get_direct_edit_auto_lock(): if evt.event_type == 'created': self._lock_queue.put((ref, 'lock')) elif evt.event_type == 'deleted': self._lock_queue.put((ref, 'unlock')) return queue = False if evt.event_type == 'modified' or evt.event_type == 'created': queue = True if evt.event_type == 'moved': ref = self._local_client.get_path(evt.dest_path) file_name = os.path.basename(evt.dest_path) src_path = evt.dest_path queue = True elif self._local_client.is_temp_file(file_name): return dir_path = self._local_client.get_path(os.path.dirname(src_path)) name = self._local_client.get_remote_id(dir_path, "nxdirecteditname") if name is None: return if name != file_name: return if self._manager.get_direct_edit_auto_lock() and self._local_client.get_remote_id(dir_path, "nxdirecteditlock") != "1": self._manager.get_autolock_service().set_autolock(src_path, self) if queue: # ADD TO UPLOAD QUEUE self._upload_queue.put(ref) return except ThreadInterrupt: raise except Exception as e: log.warn("Watchdog exception : %r", e, exc_info=True) finally: self._end_action()
def handle_watchdog_event(self, evt): self._action = Action("Handle watchdog event") log.debug("Handling watchdog event [%s] on %r", evt.event_type, evt.src_path) try: src_path = normalize_event_filename(evt.src_path) # Event on the folder by itself if os.path.isdir(src_path): return ref = self._local_client.get_path(src_path) file_name = os.path.basename(src_path) if self.is_lock_file(file_name) and self._manager.get_direct_edit_auto_lock(): if evt.event_type == "created": self._lock_queue.put((ref, "lock")) elif evt.event_type == "deleted": self._lock_queue.put((ref, "unlock")) return if self._local_client.is_temp_file(file_name): return queue = False if evt.event_type == "modified" or evt.event_type == "created": queue = True if evt.event_type == "moved": ref = self._local_client.get_path(evt.dest_path) file_name = os.path.basename(evt.dest_path) queue = True dir_path = self._local_client.get_path(os.path.dirname(src_path)) name = self._local_client.get_remote_id(dir_path, "nxdirecteditname") if name is None: return if name != file_name: return if ( self._manager.get_direct_edit_auto_lock() and self._local_client.get_remote_id(dir_path, "nxdirecteditlock") != "1" ): self._manager.get_autolock_service().set_autolock(src_path, self) if queue: # ADD TO UPLOAD QUEUE self._upload_queue.put(ref) return except Exception as e: log.warn("Watchdog exception : %r", e, exc_info=True) finally: self._end_action()
def handle_watchdog_event(self, evt): self._action = Action("Handle watchdog event") log.debug("Handling watchdog event [%s] on %r", evt.event_type, evt.src_path) try: src_path = normalize_event_filename(evt.src_path) # Event on the folder by itself if os.path.isdir(src_path): return ref = self._local_client.get_path(src_path) file_name = os.path.basename(src_path) if self._local_client.is_temp_file(file_name): return queue = False if evt.event_type == 'modified' or evt.event_type == 'created': queue = True if evt.event_type == 'moved': ref = self._local_client.get_path(evt.dest_path) file_name = os.path.basename(evt.dest_path) queue = True dir_path = self._local_client.get_path(os.path.dirname(src_path)) name = self._local_client.get_remote_id(dir_path, "nxdriveeditname") if name is None: return decoded_name = force_decode(name) if decoded_name is not None: name = decoded_name if name != file_name: return if queue: # ADD TO UPLOAD QUEUE self._upload_queue.put(ref) return except Exception as e: log.warn("Watchdog exception : %r" % e) log.exception(e) finally: self._end_action()