code: def unzip_to_temp_dir(zip_file_name):
      
      if not zip_file_name or not os.path.exists(zip_file_name):
          return None
  
      zf = zipfile.ZipFile(zip_file_name)
  
      if zf.testzip() is not None:
          return None
  
      # Unzip the files into a temporary directory
      LOGGER.info("Extracting zipped file: %s" % zip_file_name)
      tempdir = tempfile.mkdtemp()
  
      try:
          # Create directories that don't exist
          for zip_name in zf.namelist():
              # We have no knowledge on the os where the zipped file was
              # created, so we restrict to zip files with paths without
              # charactor "\" and "/".
              name = (zip_name.replace("\\", os.path.sep).
                      replace("/", os.path.sep))
              dest = os.path.join(tempdir, name)
              if (name.endswith(os.path.sep) and not os.path.exists(dest)):
                  os.mkdir(dest)
                  LOGGER.debug("Directory %s created." % dest)
  
          # Copy files
          for zip_name in zf.namelist():
              # We have no knowledge on the os where the zipped file was
              # created, so we restrict to zip files with paths without
              # charactor "\" and "/".
              name = (zip_name.replace("\\", os.path.sep).
                      replace("/", os.path.sep))
              dest = os.path.join(tempdir, name)
              if not (name.endswith(os.path.sep)):
                  LOGGER.debug("Copying file %s......" % dest)
                  outfile = open(dest, 'wb')
                  outfile.write(zf.read(zip_name))
                  outfile.close()
                  LOGGER.debug("File %s copied." % dest)
  
          LOGGER.info("Unzipped file can be found at %s" % tempdir)
          return tempdir
  
      except IOError as err:
          LOGGER.error("Error in extracting webdriver.xpi: %s" % err)
          return None
docs: Unzip zipfile to a temporary directory.
  
      The directory of the unzipped files is returned if success,
      otherwise None is returned.