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())
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