Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 71 additions & 0 deletions storage/cloud-client/snippets_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,16 @@

import storage_add_bucket_label
import storage_bucket_delete_default_kms_key
import storage_change_default_storage_class
import storage_change_file_storage_class
import storage_compose_file
import storage_copy_file
import storage_copy_file_archived_generation
import storage_cors_configuration
import storage_create_bucket_class_location
import storage_define_bucket_website_configuration
import storage_delete_file
import storage_delete_file_archived_generation
import storage_disable_bucket_lifecycle_management
import storage_disable_versioning
import storage_download_file
Expand All @@ -44,12 +49,14 @@
import storage_get_metadata
import storage_get_service_account
import storage_list_buckets
import storage_list_file_archived_generations
import storage_list_files
import storage_list_files_with_prefix
import storage_make_public
import storage_move_file
import storage_object_get_kms_key
import storage_remove_bucket_label
import storage_remove_cors_configuration
import storage_set_bucket_default_kms_key
import storage_set_metadata
import storage_upload_file
Expand Down Expand Up @@ -382,3 +389,67 @@ def test_storage_compose_file(test_bucket):
composed = destination.download_as_string()

assert composed.decode("utf-8") == source_files[0] + source_files[1]


def test_cors_configuration(test_bucket, capsys):
bucket = storage_cors_configuration.cors_configuration(test_bucket)
out, _ = capsys.readouterr()
assert "Set CORS policies for bucket" in out
assert len(bucket.cors) > 0

bucket = storage_remove_cors_configuration.remove_cors_configuration(test_bucket)
out, _ = capsys.readouterr()
assert "Remove CORS policies for bucket" in out
assert len(bucket.cors) == 0


def test_delete_blobs_archived_generation(test_blob, capsys):
storage_delete_file_archived_generation.delete_file_archived_generation(
test_blob.bucket.name, test_blob.name, test_blob.generation
)
out, _ = capsys.readouterr()
assert "blob " + test_blob.name + " was deleted" in out
blob = test_blob.bucket.get_blob(test_blob.name, generation=test_blob.generation)
assert blob is None


def test_change_default_storage_class(test_bucket, capsys):
bucket = storage_change_default_storage_class.change_default_storage_class(
test_bucket
)
out, _ = capsys.readouterr()
assert "Default storage class for bucket" in out
assert bucket.storage_class == 'COLDLINE'


def test_change_file_storage_class(test_blob, capsys):
blob = storage_change_file_storage_class.change_file_storage_class(
test_blob.bucket.name, test_blob.name
)
out, _ = capsys.readouterr()
assert "Blob {} in bucket {}". format(blob.name, blob.bucket.name) in out
assert blob.storage_class == 'NEARLINE'


def test_copy_file_archived_generation(test_blob):
bucket = storage.Client().bucket(test_blob.bucket.name)

try:
bucket.delete_blob("test_copy_blob")
except google.cloud.exceptions.NotFound:
pass

storage_copy_file_archived_generation.copy_file_archived_generation(
bucket.name, test_blob.name, bucket.name, "test_copy_blob", test_blob.generation
)

assert bucket.get_blob("test_copy_blob") is not None
assert bucket.get_blob(test_blob.name) is not None


def test_list_blobs_archived_generation(test_blob, capsys):
storage_list_file_archived_generations.list_file_archived_generations(
test_blob.bucket.name
)
out, _ = capsys.readouterr()
assert str(test_blob.generation) in out
41 changes: 41 additions & 0 deletions storage/cloud-client/storage_change_default_storage_class.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
#!/usr/bin/env python

# Copyright 2020 Google LLC. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the 'License');
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import sys

# [START storage_change_default_storage_class]
from google.cloud import storage
from google.cloud.storage import constants


def change_default_storage_class(bucket_name):
"""Change the default storage class of the bucket"""
# bucket_name = "your-bucket-name"

storage_client = storage.Client()

bucket = storage_client.get_bucket(bucket_name)
bucket.storage_class = constants.COLDLINE_STORAGE_CLASS
bucket.patch()

print("Default storage class for bucket {} has been set to {}".format(bucket_name, bucket.storage_class))
return bucket


# [END storage_change_default_storage_class]

if __name__ == "__main__":
change_default_storage_class(bucket_name=sys.argv[1])
48 changes: 48 additions & 0 deletions storage/cloud-client/storage_change_file_storage_class.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/usr/bin/env python

# Copyright 2020 Google LLC. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the 'License');
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import sys

# [START storage_change_file_storage_class]
from google.cloud import storage
from google.cloud.storage import constants


def change_file_storage_class(bucket_name, blob_name):
"""Change the default storage class of the blob"""
# bucket_name = "your-bucket-name"
# blob_name = "your-object-name"

storage_client = storage.Client()

bucket = storage_client.get_bucket(bucket_name)
blob = bucket.get_blob(blob_name)
blob.update_storage_class(constants.NEARLINE_STORAGE_CLASS)

print(
"Blob {} in bucket {} had its storage class set to {}".format(
blob_name,
bucket_name,
blob.storage_class
)
)
return blob


# [START storage_change_file_storage_class]

if __name__ == "__main__":
change_file_storage_class(bucket_name=sys.argv[1], blob_name=sys.argv[2])
63 changes: 63 additions & 0 deletions storage/cloud-client/storage_copy_file_archived_generation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#!/usr/bin/env python

# Copyright 2020 Google LLC. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the 'License');
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import sys

# [START storage_copy_file_archived_generation]
from google.cloud import storage


def copy_file_archived_generation(
bucket_name, blob_name, destination_bucket_name, destination_blob_name, generation
):
"""Copies a blob from one bucket to another with a new name with the same generation."""
# bucket_name = "your-bucket-name"
# blob_name = "your-object-name"
# destination_bucket_name = "destination-bucket-name"
# destination_blob_name = "destination-object-name"
# generation = 1579287380533984

storage_client = storage.Client()

source_bucket = storage_client.bucket(bucket_name)
source_blob = source_bucket.blob(blob_name)
destination_bucket = storage_client.bucket(destination_bucket_name)

blob_copy = source_bucket.copy_blob(
source_blob, destination_bucket, destination_blob_name, source_generation=generation
)

print(
"Generation {} of the blob {} in bucket {} copied to blob {} in bucket {}.".format(
source_blob.generation,
source_blob.name,
source_bucket.name,
blob_copy.name,
destination_bucket.name,
)
)


# [END storage_copy_file_archived_generation]

if __name__ == "__main__":
copy_file_archived_generation(
bucket_name=sys.argv[1],
blob_name=sys.argv[2],
destination_bucket_name=sys.argv[3],
destination_blob_name=sys.argv[4],
generation=sys.argv[5]
)
48 changes: 48 additions & 0 deletions storage/cloud-client/storage_cors_configuration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/usr/bin/env python

# Copyright 2020 Google LLC. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the 'License');
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import sys

# [START storage_cors_configuration]
from google.cloud import storage


def cors_configuration(bucket_name):
"""Set a bucket's CORS policies configuration."""
# bucket_name = "your-bucket-name"

storage_client = storage.Client()
bucket = storage_client.get_bucket(bucket_name)
bucket.cors = [
{
"origin": ["*"],
"responseHeader": [
"Content-Type",
"x-goog-resumable"],
"method": ['PUT', 'POST'],
"maxAgeSeconds": 3600
}
]
bucket.patch()

print("Set CORS policies for bucket {} is {}".format(bucket.name, bucket.cors))
return bucket


# [END storage_cors_configuration]

if __name__ == "__main__":
cors_configuration(bucket_name=sys.argv[1])
48 changes: 48 additions & 0 deletions storage/cloud-client/storage_delete_file_archived_generation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/usr/bin/env python

# Copyright 2020 Google LLC. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the 'License');
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import sys

# [START storage_delete_file_archived_generation]
from google.cloud import storage


def delete_file_archived_generation(bucket_name, blob_name, generation):
"""Delete a blob in the bucket with the given generation."""
# bucket_name = "your-bucket-name"
# blob_name = "your-object-name"
# generation = 1579287380533984

storage_client = storage.Client()

bucket = storage_client.get_bucket(bucket_name)
bucket.delete_blob(blob_name, generation=generation)
print(
"Generation {} of blob {} was deleted from {}".format(
generation, blob_name, bucket_name
)
)


# [END storage_delete_file_archived_generation]


if __name__ == "__main__":
delete_file_archived_generation(
bucket_name=sys.argv[1],
blob_name=sys.argv[2],
generation=sys.argv[3]
)
39 changes: 39 additions & 0 deletions storage/cloud-client/storage_list_file_archived_generations.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/usr/bin/env python

# Copyright 2020 Google LLC. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the 'License');
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import sys

# [START storage_list_file_archived_generations]
from google.cloud import storage


def list_file_archived_generations(bucket_name):
"""Lists all the blobs in the bucket with generation."""
# bucket_name = "your-bucket-name"

storage_client = storage.Client()

blobs = storage_client.list_blobs(bucket_name)

for blob in blobs:
print("{},{}".format(blob.name, blob.generation))


# [END storage_list_file_archived_generations]


if __name__ == "__main__":
list_file_archived_generations(bucket_name=sys.argv[1])
Loading