Example #1
0
 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")
Example #2
0
 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")
Example #3
0
 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()
Example #4
0
 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)
Example #5
0
 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()
Example #7
0
 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()
Example #8
0
 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()