def write_zipped_internal_cache(cls, pex, pex_info): prefix_length = len(pex_info.internal_cache) + 1 existing_cached_distributions = [] newly_cached_distributions = [] zip_safe_distributions = [] with open_zip(pex) as zf: # Distribution names are the first element after ".deps/" and before the next "/" distribution_names = set(filter(None, (filename[prefix_length:].split('/')[0] for filename in zf.namelist() if filename.startswith(pex_info.internal_cache)))) # Create Distribution objects from these, and possibly write to disk if necessary. for distribution_name in distribution_names: internal_dist_path = '/'.join([pex_info.internal_cache, distribution_name]) # First check if this is already cached dist_digest = pex_info.distributions.get(distribution_name) or CacheHelper.zip_hash( zf, internal_dist_path) cached_location = os.path.join(pex_info.install_cache, '%s.%s' % ( distribution_name, dist_digest)) if os.path.exists(cached_location): dist = DistributionHelper.distribution_from_path(cached_location) if dist is not None: existing_cached_distributions.append(dist) continue else: dist = DistributionHelper.distribution_from_path(os.path.join(pex, internal_dist_path)) if dist is not None: if DistributionHelper.zipsafe(dist) and not pex_info.always_write_cache: zip_safe_distributions.append(dist) continue with TRACER.timed('Caching %s' % dist): newly_cached_distributions.append( CacheHelper.cache_distribution(zf, internal_dist_path, cached_location)) return existing_cached_distributions, newly_cached_distributions, zip_safe_distributions
def test_zipsafe(): make_egg = functools.partial(make_bdist, installer_impl=EggInstaller) make_whl = functools.partial(make_bdist, installer_impl=WheelInstaller) for zipped in (False, True): for zip_safe in (False, True): # Eggs can be zip safe with make_egg(zipped=zipped, zip_safe=zip_safe) as dist: assert DistributionHelper.zipsafe(dist) is zip_safe # Wheels cannot be zip safe with make_whl(zipped=zipped, zip_safe=zip_safe) as dist: assert not DistributionHelper.zipsafe(dist) for zipped in (False, True): for zip_safe in (False, True): with make_egg(zipped=zipped, zip_safe=zip_safe) as dist: assert DistributionHelper.zipsafe(dist) is zip_safe