docs: def sync(client=None, force=False, verbose=True):
      """ Let's face it... pushing this stuff to S3 is messy.
          A lot of different things need to be calculated for each file
          and they have to be in a certain order as some variables rely
          on others.
      """
      from mediasync import backends
      from mediasync.conf import msettings
      from mediasync.signals import pre_sync, post_sync
  
      # create client connection
      if client is None:
          client = backends.client()
  
      client.open()
      client.serve_remote = True
  
      # send pre-sync signal
      pre_sync.send(sender=client)
  
      #
      # sync joined media
      #
  
      for joinfile, sourcefiles in msettings['JOINED'].iteritems():
          
          filedata = combine_files(joinfile, sourcefiles, client)
          if filedata is None:
              # combine_files() is only interested in CSS/JS files.
              continue
          filedata, dirname = filedata
  
          content_type = mimetypes.guess_type(joinfile)[0] or msettings['DEFAULT_MIMETYPE']
  
          remote_path = joinfile
          if dirname:
              remote_path = "%s/%s" % (dirname, remote_path)
  
          if client.process_and_put(filedata, content_type, remote_path, force=force):
              if verbose:
                  print "[%s] %s" % (content_type, remote_path)
  
      #
      # sync static media
      #
  
      for dirname in os.listdir(client.media_root):
  
          dirpath = os.path.abspath(os.path.join(client.media_root, dirname))
  
          if os.path.isdir(dirpath):
  
              for filename in listdir_recursive(dirpath):
  
                  # calculate local and remote paths
                  filepath = os.path.join(dirpath, filename)
                  remote_path = "%s/%s" % (dirname, filename)
  
                  content_type = mimetypes.guess_type(filepath)[0] or msettings['DEFAULT_MIMETYPE']
  
                  if not is_syncable_file(os.path.basename(filename)) or not os.path.isfile(filepath):
                      continue # hidden file or directory, do not upload
  
                  filedata = open(filepath, 'rb').read()
  
                  if client.process_and_put(filedata, content_type, remote_path, force=force):
                      if verbose:
                          print "[%s] %s" % (content_type, remote_path)
      
      # send post-sync signal while client is still open
      post_sync.send(sender=client)
      
      client.close()