예제 #1
0
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
예제 #2
0
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")
예제 #3
0
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')