Esempio n. 1
0
def _fetch(download_dir, precs):
    assert conda_context.pkgs_dirs[0] == download_dir
    pc = PackageCacheData(download_dir)
    assert pc.is_writable

    for prec in precs:
        package_tarball_full_path = join(download_dir, prec.fn)
        extracted_package_dir = package_tarball_full_path[:-8]

        if not (isfile(package_tarball_full_path)
                and md5_file(package_tarball_full_path) == prec.md5):
            print('fetching: %s' % prec.fn)
            download(prec.url, join(download_dir, prec.fn))

        if not isdir(extracted_package_dir):
            from conda.gateways.disk.create import extract_tarball
            extract_tarball(package_tarball_full_path, extracted_package_dir)

        repodata_record_path = join(extracted_package_dir, 'info', 'repodata_record.json')

        with open(repodata_record_path, "w") as fh:
            json.dump(prec.dump(), fh, indent=2, sort_keys=True, separators=(',', ': '))

        package_cache_record = PackageCacheRecord.from_objects(
            prec,
            package_tarball_full_path=package_tarball_full_path,
            extracted_package_dir=extracted_package_dir,
        )
        pc.insert(package_cache_record)

    return tuple(pc.iter_records())
Esempio n. 2
0
def fetch_precs(download_dir, precs):
    os.makedirs(download_dir, exist_ok=True)

    records = []
    for prec in precs:
        package_tarball_full_path = os.path.join(download_dir, prec.fn)
        if package_tarball_full_path.endswith(".tar.bz2"):
            extracted_package_dir = package_tarball_full_path[:-8]
        elif package_tarball_full_path.endswith(".conda"):
            extracted_package_dir = package_tarball_full_path[:-6]

        if (os.path.isfile(package_tarball_full_path)
                and md5_files([package_tarball_full_path]) == prec.md5):
            LOGGER.info(f"already have: {prec.fn}")
        else:
            LOGGER.info(f"fetching: {prec.fn}")
            download(prec.url, os.path.join(download_dir, prec.fn))

        if not os.path.isdir(extracted_package_dir):
            from conda.gateways.disk.create import extract_tarball

            extract_tarball(package_tarball_full_path, extracted_package_dir)

        repodata_record_path = os.path.join(extracted_package_dir, "info",
                                            "repodata_record.json")

        with open(repodata_record_path, "w") as fh:
            json.dump(prec.dump(),
                      fh,
                      indent=2,
                      sort_keys=True,
                      separators=(",", ": "))

        package_cache_record = PackageCacheRecord.from_objects(
            prec,
            package_tarball_full_path=package_tarball_full_path,
            extracted_package_dir=extracted_package_dir,
        )
        records.append(package_cache_record)
    return records