All Products
Search
Document Center

Object Storage Service:Manage versioning using OSS SDK for Python 2.0

Last Updated:Sep 21, 2026

The versioning state of a bucket applies to all objects in the bucket. If you enable versioning for a bucket, you can recover a previous version of an object in the bucket when you accidentally overwrite or delete the object.

Usage notes

  • The sample code in this topic uses the region ID cn-hangzhou of the China (Hangzhou) region. By default, a public endpoint is used to access resources in a bucket. If you want to access resources in the bucket from other Alibaba Cloud services in the same region in which the bucket is located, use an internal endpoint. For more information about the regions and endpoints that OSS supports, see Regions and endpoints.

  • To set the versioning state of a bucket, you must have the oss:PutBucketVersioning permission. To obtain the versioning state of a bucket, you must have the oss:GetBucketVersioning permission. For more information, see Grant a custom access policy to a RAM user.

Sample code

Configure the versioning state of a bucket

The following sample code provides an example on how to enable versioning for a bucket:

import argparse
import alibabacloud_oss_v2 as oss

# Create a command-line argument parser and describe the purpose of the script: enable versioning for a bucket.
parser = argparse.ArgumentParser(description="put bucket versioning sample")

# Define command-line arguments, including the required region and bucket name, and the optional endpoint.
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # Parse the command-line arguments to obtain the user-input values.
    args = parser.parse_args()

    # Load access credential information from environment variables for identity verification.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Create a configuration object using the default SDK configurations and set the authentication provider.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # Set the region property of the configuration object based on the command-line arguments provided by the user.
    cfg.region = args.region

    # If a custom endpoint is provided, update the endpoint property in the configuration object.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Use the preceding configurations to initialize the OSS client to interact with OSS.
    client = oss.Client(cfg)

    # Send a request to enable versioning for the specified bucket.
    result = client.put_bucket_versioning(oss.PutBucketVersioningRequest(
        bucket=args.bucket,  # The name of the bucket.
        versioning_configuration=oss.VersioningConfiguration(
            status='Enabled'  # Enable versioning.
        )
    ))

    # Print the status code and request ID of the operation result to confirm the request status.
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          )

# When this script is directly executed, call the main function to start processing the logic.
if __name__ == "__main__":
    main()  # The entry point of the script. The program flow starts from here.

Query the versioning state of a bucket

The following sample code provides an example on how to query the versioning state of a bucket.

import argparse
import alibabacloud_oss_v2 as oss

# Create a command-line argument parser and describe the purpose of the script: obtain the versioning state of a bucket.
parser = argparse.ArgumentParser(description="get bucket versioning sample")

# Define command-line arguments, including the required region and bucket name, and the optional endpoint.
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # Parse the command-line arguments to obtain the user-input values.
    args = parser.parse_args()

    # Load access credential information from environment variables for identity verification.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Create a configuration object using the default SDK configurations and set the authentication provider.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # Set the region property of the configuration object based on the command-line arguments provided by the user.
    cfg.region = args.region

    # If a custom endpoint is provided, update the endpoint property in the configuration object.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Use the preceding configurations to initialize the OSS client to interact with OSS.
    client = oss.Client(cfg)

    # Send a request to obtain the versioning state of the specified bucket.
    result = client.get_bucket_versioning(oss.GetBucketVersioningRequest(
        bucket=args.bucket,  # The name of the bucket.
    ))

    # Print the status code, request ID, and versioning state of the operation result to confirm the request status.
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' version status: {result.version_status},'  # The versioning state.
          )

# When this script is directly executed, call the main function to start processing the logic.
if __name__ == "__main__":
    main()  # The entry point of the script. The program flow starts from here.

References

  • For the complete sample code to set the versioning state of a bucket, see put_bucket_version.py.

  • For the complete sample code to obtain the versioning state of a bucket, see get_bucket_cors.py.