<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get_manylinux_wheel_url(self, package_name, package_version):
 """ For a given package name, returns a link to the download URL, else returns None. Related: https://github.com/Miserlou/Zappa/issues/398 Examples here: https://gist.github.com/perrygeo/9545f94eaddec18a65fd7b56880adbae This function downloads metadata JSON of `package_name` from Pypi and examines if the package has a manylinux wheel. This function also caches the JSON file so that we don't have to poll Pypi every time. """

        cached_pypi_info_dir = os.path.join(tempfile.gettempdir(), 'cached_pypi_info')
        if not os.path.isdir(cached_pypi_info_dir):
            os.makedirs(cached_pypi_info_dir)
        # Even though the metadata is for the package, we save it in a
        # filename that includes the package's version. This helps in
        # invalidating the cached file if the user moves to a different
        # version of the package.
        # Related: https://github.com/Miserlou/Zappa/issues/899
        json_file = '{0!s}-{1!s}.json'.format(package_name, package_version)
        json_file_path = os.path.join(cached_pypi_info_dir, json_file)
        if os.path.exists(json_file_path):
            with open(json_file_path, 'rb') as metafile:
                data = json.load(metafile)
        else:
            url = 'https://pypi.python.org/pypi/{}/json'.format(package_name)
            try:
                res = requests.get(url, timeout=float(os.environ.get('PIP_TIMEOUT', 1.5)))
                data = res.json()
            except Exception as e: # pragma: no cover
                return None
            with open(json_file_path, 'wb') as metafile:
                jsondata = json.dumps(data)
                metafile.write(bytes(jsondata, "utf-8"))

        if package_version not in data['releases']:
            return None

        for f in data['releases'][package_version]:
            if f['filename'].endswith(self.manylinux_wheel_file_suffix):
                return f['url']
        return None