(self, keys, read_data=True, raise_missing=True, cache=True)
| 1199 | shutil.rmtree(self.basedir) |
| 1200 | |
| 1201 | def get_many(self, keys, read_data=True, raise_missing=True, cache=True): |
| 1202 | # It could use different cache keys depending on read_data and cache full vs. meta-only chunks. |
| 1203 | unknown_keys = [key for key in keys if self.prefixed_key(key, complete=read_data) not in self.cache] |
| 1204 | repository_iterator = zip( |
| 1205 | unknown_keys, self.repository.get_many(unknown_keys, read_data=read_data, raise_missing=raise_missing) |
| 1206 | ) |
| 1207 | for key in keys: |
| 1208 | pkey = self.prefixed_key(key, complete=read_data) |
| 1209 | if pkey in self.cache: |
| 1210 | file = self.key_filename(pkey) |
| 1211 | with open(file, "rb") as fd: |
| 1212 | self.hits += 1 |
| 1213 | yield self.unpack(fd.read()) |
| 1214 | else: |
| 1215 | for key_, data in repository_iterator: |
| 1216 | if key_ == key: |
| 1217 | transformed = self.add_entry(key, data, cache, complete=read_data) |
| 1218 | self.misses += 1 |
| 1219 | yield transformed |
| 1220 | break |
| 1221 | else: |
| 1222 | # slow path: eviction during this get_many removed this key from the cache |
| 1223 | t0 = time.perf_counter() |
| 1224 | data = self.repository.get(key, read_data=read_data, raise_missing=raise_missing) |
| 1225 | self.slow_lat += time.perf_counter() - t0 |
| 1226 | transformed = self.add_entry(key, data, cache, complete=read_data) |
| 1227 | self.slow_misses += 1 |
| 1228 | yield transformed |
| 1229 | # Consume any pending requests |
| 1230 | for _ in repository_iterator: |
| 1231 | pass |
| 1232 | |
| 1233 | |
| 1234 | def cache_if_remote(repository, *, decrypted_cache=False, pack=None, unpack=None, transform=None, force_cache=False): |
no test coverage detected