def _fetch_project(uri, force_tempdir, version=None): """ Fetch a project into a local directory, returning the path to the local project directory. :param force_tempdir: If True, will fetch the project into a temporary directory. Otherwise, will fetch ZIP or Git projects into a temporary directory but simply return the path of local projects (i.e. perform a no-op for local projects). """ parsed_uri, subdirectory = _parse_subdirectory(uri) use_temp_dst_dir = force_tempdir or _is_zip_uri(parsed_uri) or not _is_local_uri(parsed_uri) dst_dir = tempfile.mkdtemp() if use_temp_dst_dir else parsed_uri if use_temp_dst_dir: _logger.info("=== Fetching project from %s into %s ===", uri, dst_dir) if _is_zip_uri(parsed_uri): if _is_file_uri(parsed_uri): parsed_file_uri = urllib.parse.urlparse(urllib.parse.unquote(parsed_uri)) parsed_uri = os.path.join(parsed_file_uri.netloc, parsed_file_uri.path) _unzip_repo(zip_file=( parsed_uri if _is_local_uri(parsed_uri) else _fetch_zip_repo(parsed_uri)), dst_dir=dst_dir) elif _is_local_uri(uri): if version is not None: raise ExecutionException("Setting a version is only supported for Git project URIs") if use_temp_dst_dir: dir_util.copy_tree(src=parsed_uri, dst=dst_dir) else: assert _GIT_URI_REGEX.match(parsed_uri), "Non-local URI %s should be a Git URI" % parsed_uri _fetch_git_repo(parsed_uri, version, dst_dir) res = os.path.abspath(os.path.join(dst_dir, subdirectory)) if not os.path.exists(res): raise ExecutionException("Could not find subdirectory %s of %s" % (subdirectory, dst_dir)) return res
def test_is_zip_uri(): assert _is_zip_uri("http://foo.bar/moo.zip") assert _is_zip_uri("https://foo.bar/moo.zip") assert _is_zip_uri("file:///moo.zip") assert _is_zip_uri("file://C:/moo.zip") assert _is_zip_uri("/moo.zip") assert _is_zip_uri("C:/moo.zip") assert not _is_zip_uri("http://foo.bar/moo") assert not _is_zip_uri("https://foo.bar/moo") assert not _is_zip_uri("file:///moo") assert not _is_zip_uri("file://C:/moo") assert not _is_zip_uri("/moo") assert not _is_zip_uri("C:/moo")
def test_is_zip_uri(): assert _is_zip_uri('http://foo.bar/moo.zip') assert _is_zip_uri('https://foo.bar/moo.zip') assert _is_zip_uri('file:///moo.zip') assert _is_zip_uri('file://C:/moo.zip') assert _is_zip_uri('/moo.zip') assert _is_zip_uri('C:/moo.zip') assert not _is_zip_uri('http://foo.bar/moo') assert not _is_zip_uri('https://foo.bar/moo') assert not _is_zip_uri('file:///moo') assert not _is_zip_uri('file://C:/moo') assert not _is_zip_uri('/moo') assert not _is_zip_uri('C:/moo')