Google Cloud Resource Manager API client library for managing projects, folders, organizations, and tags in Google Cloud Platform
—
Hierarchical organization and management of folders within Google Cloud organizations. Folders provide an intermediate grouping layer between organizations and projects, enabling flexible resource organization and inheritance of IAM policies and organization policies.
Retrieve detailed information about a specific folder using its resource name.
def get_folder(
self,
request: GetFolderRequest = None,
*,
name: str = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: Union[float, object] = gapic_v1.method.DEFAULT,
metadata: Sequence[Tuple[str, Union[str, bytes]]] = ()
) -> Folder:
"""
Retrieves a folder identified by the specified resource name.
Args:
name (str): The resource name of the folder to retrieve.
Format: folders/{folder_id}
retry: Retry configuration for the request
timeout: Request timeout in seconds
metadata: Additional metadata to send with the request
Returns:
Folder: The requested folder resource
Raises:
google.api_core.exceptions.NotFound: If the folder doesn't exist
google.api_core.exceptions.PermissionDenied: If access is denied
"""Usage example:
from google.cloud.resourcemanager import FoldersClient
client = FoldersClient()
folder = client.get_folder(name="folders/123456789")
print(f"Folder: {folder.display_name} (Parent: {folder.parent})")List all folders under a specified parent resource (organization or another folder).
def list_folders(
self,
request: ListFoldersRequest = None,
*,
parent: str = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: Union[float, object] = gapic_v1.method.DEFAULT,
metadata: Sequence[Tuple[str, Union[str, bytes]]] = ()
) -> pagers.ListFoldersPager:
"""
Lists folders that are direct children of the specified parent resource.
Args:
parent (str): The parent resource whose folders are to be listed.
Formats: organizations/{organization_id} or folders/{folder_id}
retry: Retry configuration for the request
timeout: Request timeout in seconds
metadata: Additional metadata to send with the request
Returns:
ListFoldersPager: An iterator over folders that automatically
handles pagination
"""Usage example:
client = FoldersClient()
# List all folders under an organization
for folder in client.list_folders(parent="organizations/123456789"):
print(f"Folder: {folder.display_name} ({folder.name})")
# List all folders under another folder
for folder in client.list_folders(parent="folders/parent-folder-id"):
print(f"Sub-folder: {folder.display_name}")Search for folders using flexible query expressions with support for filtering and sorting.
def search_folders(
self,
request: SearchFoldersRequest = None,
*,
query: str = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: Union[float, object] = gapic_v1.method.DEFAULT,
metadata: Sequence[Tuple[str, Union[str, bytes]]] = ()
) -> pagers.SearchFoldersPager:
"""
Search for folders using a flexible query language.
Args:
query (str): Query expression for filtering folders.
Examples: 'displayName:dev*', 'parent.id:123456789',
'lifecycleState:ACTIVE'
retry: Retry configuration for the request
timeout: Request timeout in seconds
metadata: Additional metadata to send with the request
Returns:
SearchFoldersPager: An iterator over matching folders
"""Usage example:
client = FoldersClient()
# Search for active folders with "dev" in the display name
for folder in client.search_folders(query="displayName:dev* AND lifecycleState:ACTIVE"):
print(f"Found: {folder.display_name} ({folder.name})")Create new folders within the Google Cloud resource hierarchy. This is a long-running operation.
def create_folder(
self,
request: CreateFolderRequest = None,
*,
folder: Folder = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: Union[float, object] = gapic_v1.method.DEFAULT,
metadata: Sequence[Tuple[str, Union[str, bytes]]] = ()
) -> operation.Operation:
"""
Creates a new folder. This is a long-running operation.
Args:
folder (Folder): The folder resource to create
retry: Retry configuration for the request
timeout: Request timeout in seconds
metadata: Additional metadata to send with the request
Returns:
Operation: Long-running operation that resolves to the created Folder
"""Usage example:
from google.cloud.resourcemanager import FoldersClient
from google.cloud.resourcemanager_v3.types import Folder
client = FoldersClient()
new_folder = Folder(
display_name="Development Team",
parent="organizations/123456789"
)
operation = client.create_folder(folder=new_folder)
result = operation.result() # Wait for completion
print(f"Created folder: {result.display_name} ({result.name})")Update folder attributes such as display name. This is a long-running operation.
def update_folder(
self,
request: UpdateFolderRequest = None,
*,
folder: Folder = None,
update_mask: field_mask_pb2.FieldMask = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: Union[float, object] = gapic_v1.method.DEFAULT,
metadata: Sequence[Tuple[str, Union[str, bytes]]] = ()
) -> operation.Operation:
"""
Updates the specified folder. This is a long-running operation.
Args:
folder (Folder): The folder resource with updated values
update_mask (FieldMask): Fields to update. If not provided,
all mutable fields are updated
retry: Retry configuration for the request
timeout: Request timeout in seconds
metadata: Additional metadata to send with the request
Returns:
Operation: Long-running operation that resolves to the updated Folder
"""Usage example:
from google.protobuf import field_mask_pb2
client = FoldersClient()
# Get existing folder
folder = client.get_folder(name="folders/123456789")
# Update display name
folder.display_name = "Updated Development Team"
# Specify which fields to update
update_mask = field_mask_pb2.FieldMask(paths=["display_name"])
operation = client.update_folder(
folder=folder,
update_mask=update_mask
)
result = operation.result()
print(f"Updated folder: {result.display_name}")Move folders between different parent resources (organizations or other folders). This is a long-running operation.
def move_folder(
self,
request: MoveFolderRequest = None,
*,
name: str = None,
destination_parent: str = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: Union[float, object] = gapic_v1.method.DEFAULT,
metadata: Sequence[Tuple[str, Union[str, bytes]]] = ()
) -> operation.Operation:
"""
Moves a folder to a different parent resource. This is a long-running operation.
Args:
name (str): The resource name of the folder to move.
Format: folders/{folder_id}
destination_parent (str): The new parent resource.
Format: organizations/{org_id} or folders/{folder_id}
retry: Retry configuration for the request
timeout: Request timeout in seconds
metadata: Additional metadata to send with the request
Returns:
Operation: Long-running operation that resolves to the moved Folder
"""Usage example:
client = FoldersClient()
operation = client.move_folder(
name="folders/source-folder-id",
destination_parent="folders/destination-folder-id"
)
result = operation.result()
print(f"Moved folder to: {result.parent}")Mark folders for deletion. Folders are not immediately deleted but enter a pending deletion state. This is a long-running operation.
def delete_folder(
self,
request: DeleteFolderRequest = None,
*,
name: str = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: Union[float, object] = gapic_v1.method.DEFAULT,
metadata: Sequence[Tuple[str, Union[str, bytes]]] = ()
) -> operation.Operation:
"""
Marks the specified folder for deletion. This is a long-running operation.
The folder enters DELETE_REQUESTED state and will be deleted after a
retention period unless restored with undelete_folder.
Args:
name (str): The resource name of the folder to delete.
Format: folders/{folder_id}
retry: Retry configuration for the request
timeout: Request timeout in seconds
metadata: Additional metadata to send with the request
Returns:
Operation: Long-running operation with no return value
"""Restore folders that are in the deletion pending state. This is a long-running operation.
def undelete_folder(
self,
request: UndeleteFolderRequest = None,
*,
name: str = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: Union[float, object] = gapic_v1.method.DEFAULT,
metadata: Sequence[Tuple[str, Union[str, bytes]]] = ()
) -> operation.Operation:
"""
Restores a folder from the DELETE_REQUESTED state. This is a long-running operation.
Args:
name (str): The resource name of the folder to restore.
Format: folders/{folder_id}
retry: Retry configuration for the request
timeout: Request timeout in seconds
metadata: Additional metadata to send with the request
Returns:
Operation: Long-running operation that resolves to the restored Folder
"""Usage example:
client = FoldersClient()
# Delete a folder
delete_op = client.delete_folder(name="folders/123456789")
delete_op.result() # Wait for completion
# Later, restore the folder
restore_op = client.undelete_folder(name="folders/123456789")
restored_folder = restore_op.result()
print(f"Restored folder: {restored_folder.display_name}")Manage IAM (Identity and Access Management) policies for folders, controlling who has access and what permissions they have.
def get_iam_policy(
self,
request: iam_policy_pb2.GetIamPolicyRequest = None,
*,
resource: str = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: Union[float, object] = gapic_v1.method.DEFAULT,
metadata: Sequence[Tuple[str, Union[str, bytes]]] = ()
) -> policy_pb2.Policy:
"""
Gets the IAM access control policy for a folder.
Args:
resource (str): Resource name of the folder.
Format: folders/{folder_id}
Returns:
Policy: The IAM policy for the folder
"""
def set_iam_policy(
self,
request: iam_policy_pb2.SetIamPolicyRequest = None,
*,
resource: str = None,
policy: policy_pb2.Policy = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: Union[float, object] = gapic_v1.method.DEFAULT,
metadata: Sequence[Tuple[str, Union[str, bytes]]] = ()
) -> policy_pb2.Policy:
"""
Sets the IAM access control policy for a folder.
Args:
resource (str): Resource name of the folder
policy (Policy): The new IAM policy
Returns:
Policy: The updated IAM policy
"""
def test_iam_permissions(
self,
request: iam_policy_pb2.TestIamPermissionsRequest = None,
*,
resource: str = None,
permissions: MutableSequence[str] = None,
retry: OptionalRetry = gapic_v1.method.DEFAULT,
timeout: Union[float, object] = gapic_v1.method.DEFAULT,
metadata: Sequence[Tuple[str, Union[str, bytes]]] = ()
) -> iam_policy_pb2.TestIamPermissionsResponse:
"""
Tests the specified permissions against the IAM policy for a folder.
Args:
resource (str): Resource name of the folder
permissions (Sequence[str]): List of permissions to test
Returns:
TestIamPermissionsResponse: Results of the permission test
"""class Folder:
name: str # Resource name: folders/{folder_id}
parent: str # Parent resource: organizations/{id} or folders/{id}
display_name: str # Human-readable folder name
state: Folder.State # Current lifecycle state
create_time: timestamp_pb2.Timestamp # Creation timestamp
update_time: timestamp_pb2.Timestamp # Last update timestamp
delete_time: timestamp_pb2.Timestamp # Deletion timestamp (if deleted)
etag: str # Entity tag for optimistic concurrency
class State(proto.Enum):
STATE_UNSPECIFIED = 0
ACTIVE = 1
DELETE_REQUESTED = 2
# Request/Response types
class GetFolderRequest:
name: str
class ListFoldersRequest:
parent: str
page_token: str
page_size: int
show_deleted: bool
class ListFoldersResponse:
folders: MutableSequence[Folder]
next_page_token: str
class SearchFoldersRequest:
query: str
page_token: str
page_size: int
class SearchFoldersResponse:
folders: MutableSequence[Folder]
next_page_token: str
class CreateFolderRequest:
folder: Folder
class UpdateFolderRequest:
folder: Folder
update_mask: field_mask_pb2.FieldMask
class MoveFolderRequest:
name: str
destination_parent: str
class DeleteFolderRequest:
name: str
class UndeleteFolderRequest:
name: str
# Metadata types for long-running operations
class CreateFolderMetadata:
display_name: str
parent: str
class UpdateFolderMetadata:
# Empty metadata message
class MoveFolderMetadata:
# Empty metadata message
class DeleteFolderMetadata:
# Empty metadata message
class UndeleteFolderMetadata:
# Empty metadata messageInstall with Tessl CLI
npx tessl i tessl/pypi-google-cloud-resource-manager