title: Python watchdog windows wait till copy finishes
body: <p>I am using the Python watchdog module on a Windows 2012 server to monitor new files appearing on a shared drive. When watchdog notices the new file it kicks off a database restore process.</p>
  
  <p>However, it seems that watchdog will attempt to restore the file the second it is created and not wait till the file has finished copying to the shared drive. So I changed the event to on_modified but there are two on_modified events, one when the file is initially being copied and one when it is finished being copied.</p>
  
  <p>How can I handle the two on_modified events to only fire when the file being copied to the shared drive has finished?</p>
  
  <p>What happens when multiple files are copied to the shared drive at the same time?</p>
  
  <p>Here is my code</p>
  
  <pre><code>import time
  import subprocess
  from watchdog.observers import Observer
  from watchdog.events import FileSystemEventHandler
  
  class NewFile(FileSystemEventHandler):
      def process(self, event):
          if event.is_directory:
              return
  
      if event.event_type == 'modified':            
          if getext(event.src_path) == 'gz':
              load_pgdump(event.src_path)
  
      def on_modified(self, event):
          self.process(event)
  
  def getext(filename):
      "Get the file extension"
      file_ext = filename.split(".",1)[1]
      return file_ext
  
  def load_pgdump(src_path):    
      restore = 'pg_restore command ' + src_path
      subprocess.call(restore, shell=True)
  
  def main():
      event_handler = NewFile()
      observer = Observer()
      observer.schedule(event_handler, path='Y:\\', recursive=True)
      observer.start()
  
      try:
          while True:
              time.sleep(1)
      except KeyboardInterrupt:
          observer.stop()
      observer.join()
  
  if __name__ == '__main__':
      main()
  </code></pre>