def patch_revision(self, request): """Patch the metadata of particular object revision or raise. :param request:flask.Request :return: the object revision. :rtype:GcsObjectRevision :raises:ErrorResponse if the request contains an invalid generation number. """ generation = request.args.get("generation") if generation is None: version = self.get_latest() else: version = self.revisions.get(generation) if version is None: raise error_response.ErrorResponse( "Precondition Failed: generation %s not found" % generation ) patch = GcsObject._remove_non_writable_keys(json.loads(request.data)) patched = testbench_utils.json_api_patch( version.metadata, patch, recurse_on={"metadata"} ) patched["metageneration"] = str(int(patched.get("metageneration", "0")) + 1) version.metadata = patched return version
def apply_patch(self, patch): """Update from a metadata dictionary. :param patch:dict a dictionary with metadata changes. """ patch = GcsBucket._remove_non_writable_keys(patch) retention_policy = patch.get('retentionPolicy') if retention_policy: # Ignore any values set for 'isLocked' or 'effectiveTime'. retention_policy.pop('isLocked', None) now = time.gmtime(time.time()) timestamp = time.strftime('%Y-%m-%dT%H:%M:%SZ', now) retention_policy['effectiveTime'] = timestamp patch['retentionPolicy'] = retention_policy patched = testbench_utils.json_api_patch(self.metadata, patch, recurse_on={'labels'}) self.metadata = patched self.increase_metageneration()
def apply_patch(self, patch): """Update from a metadata dictionary. :param patch:dict a dictionary with metadata changes. """ patch = GcsBucket._remove_non_writable_keys(patch) retention_policy = patch.get("retentionPolicy") if retention_policy: # Ignore any values set for 'isLocked' or 'effectiveTime'. retention_policy.pop("isLocked", None) now = time.gmtime(time.time()) timestamp = time.strftime("%Y-%m-%dT%H:%M:%SZ", now) retention_policy["effectiveTime"] = timestamp patch["retentionPolicy"] = retention_policy self._adjust_field_patch(self.metadata, "uniformBucketLevelAccess") self._adjust_field_patch(self.metadata, "bucketPolicyOnly") patched = testbench_utils.json_api_patch(self.metadata, patch, recurse_on={"labels"}) self.metadata = patched self.increase_metageneration()