in mozci/util/cache_stores.py [0:0]
def _get(self, key):
import botocore
# Copy the object onto itself to extend its expiration.
try:
head = self._client.head_object(Bucket=self._bucket, Key=self._key(key))
# Change its metadata, or Amazon will complain.
metadata = head["Metadata"]
metadata["id"] = "1" if "id" in metadata and metadata["id"] == "0" else "0"
self._client.copy_object(
Bucket=self._bucket,
CopySource={"Bucket": self._bucket, "Key": self._key(key)},
Key=self._key(key),
Metadata=metadata,
MetadataDirective="REPLACE",
)
except botocore.exceptions.ClientError as ex:
if ex.response["Error"]["Code"] == "404":
return None
raise
response = self._client.get_object(Bucket=self._bucket, Key=self._key(key))
data = response["Body"].read()
try:
return self.unserialize(data)
except Exception:
# The object is broken, let's delete it.
self.forget(key)
return None