Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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()
Exemplo n.º 3
0
    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()