def METHOD_NAME(zip_filename, destination_directory):
    unzip_command = ['unzip', '-q', zip_filename, '-d', destination_directory]
    p = subprocess.Popen(unzip_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    _, _ = p.communicate()
    # We get return code 1 quite often ("a warning was output")
    # because some of these zip files use backslash as a directory
    # separator:
    if p.returncode not in (0, 1):
        raise UnzipError("Excuting {0} failed".format(' '.join(unzip_command)))
    # Walk the whole directory before processing the unpacked files,
    # so we don't modified the tree while recursing through it:
    walked = os.walk(destination_directory)
    for dirpath, dirnames, filenames in walked:
        for filename in filenames:
            full_filename = join(dirpath, filename)
            m = re.search(r'^(.*)\.zip$', filename, re.I)
            if m:
                # Then there's a ZIP file in the zip file - create a
                # directory for it and unpack it.
                subdir = m.group(1)
                full_subdir = join(dirpath, subdir)
                mkdir_p(full_subdir)
                try:
                    METHOD_NAME(full_filename, full_subdir)
                    os.remove(full_filename)
                except UnzipError as ue:
                    print("Unpacking failed for {0}".format(full_subdir))