Skip to main content

A boto3-compatible SDK for CTyun Object Storage (ZOS) with httpx backend

Project description

CTyun ZOS SDK

Python Version License PyPI

A boto3-compatible SDK for CTyun Object Storage (ZOS) with httpx backend. This SDK provides both synchronous and asynchronous interfaces for interacting with CTyun's S3-compatible object storage service.

Features

  • boto3-compatible API: Familiar interface for developers already using AWS S3
  • Dual interfaces: Both synchronous and asynchronous clients
  • httpx backend: Modern HTTP client with better performance and features
  • CTyun-specific optimizations: Handles CTyun ZOS service requirements
  • Proper signing: AWS SigV4 authentication with CTyun-specific header handling
  • Type hints: Full type annotations for better development experience

Installation

From PyPI (recommended)

pip install ctyun-zos-sdk

From source

git clone https://github.com/your-org/ctyun-zos-sdk.git
cd ctyun-zos-sdk
pip install -e .

Quick Start

Basic Usage

import os
from ctyun_zos_sdk import ZOSSession

# Create a session
session = ZOSSession(
    aws_access_key_id=os.environ["S3_ACCESS_KEY"],
    aws_secret_access_key=os.environ["S3_SECRET_KEY"],
    region_name="huabei-2",
    endpoint_url="https://huabei-2.zos.ctyun.cn"
)

# Get S3 client
s3_client = session.client('s3')

# Upload a file
response = s3_client.put_object(
    Bucket="your-bucket",
    Key="example/test.txt",
    Body="Hello, CTyun ZOS!",
    ContentType="text/plain"
)
print(f"Upload successful! ETag: {response['ETag']}")

# Download a file
response = s3_client.get_object(
    Bucket="your-bucket",
    Key="example/test.txt"
)
print(f"Content: {response['Body'].decode('utf-8')}")

Asynchronous Usage

import asyncio
import os
from ctyun_zos_sdk import AsyncZOSClient

async def main():
    async with AsyncZOSClient(
        access_key=os.environ["S3_ACCESS_KEY"],
        secret_key=os.environ["S3_SECRET_KEY"],
        region="huabei-2",
        endpoint="https://huabei-2.zos.ctyun.cn"
    ) as client:
        
        # Upload file asynchronously
        response = await client.put_object(
            Bucket="your-bucket",
            Key="async-test.txt",
            Body="Async upload content"
        )
        print(f"Upload successful! ETag: {response['ETag']}")

# Run the async function
asyncio.run(main())

Direct Client Usage

from ctyun_zos_sdk import ZOSClient

# Create client directly
client = ZOSClient(
    access_key="your_access_key",
    secret_key="your_secret_key",
    region="huabei-2",
    endpoint="https://huabei-2.zos.ctyun.cn"
)

# Use context manager for automatic cleanup
with client:
    response = client.put_object(
        Bucket="your-bucket",
        Key="direct-test.txt",
        Body="Direct client usage"
    )
    print(f"Upload successful! ETag: {response['ETag']}")

Configuration

Environment Variables

You can configure the SDK using environment variables:

export S3_ACCESS_KEY="your_access_key"
export S3_SECRET_KEY="your_secret_key"
export S3_REGION="huabei-2"
export S3_ENDPOINT="https://huabei-2.zos.ctyun.cn"

Supported Regions

  • huabei-2 - 华北2
  • huadong-1 - 华东1
  • huadong-2 - 华东2
  • huanan-1 - 华南1
  • huanan-2 - 华南2

API Reference

ZOSSession

The main session class for managing configuration and creating clients.

session = ZOSSession(
    aws_access_key_id="your_key",
    aws_secret_access_key="your_secret",
    region_name="huabei-2",
    endpoint_url="https://huabei-2.zos.ctyun.cn"
)

# Create S3 client
s3_client = session.client('s3')

ZOSClient

Synchronous client for S3 operations.

Methods

  • get_object(Bucket, Key, **kwargs) - Download an object
  • put_object(Bucket, Key, Body, **kwargs) - Upload an object
  • delete_object(Bucket, Key, **kwargs) - Delete an object
  • list_objects_v2(Bucket, Prefix="", **kwargs) - List objects in a bucket

Parameters

  • Bucket (str): Bucket name
  • Key (str): Object key
  • Body (str/bytes/file): Object content for uploads
  • ContentType (str): MIME type of the object
  • Metadata (dict): Custom metadata for the object

AsyncZOSClient

Asynchronous client with the same interface as ZOSClient.

async with AsyncZOSClient(...) as client:
    response = await client.put_object(...)
    response = await client.get_object(...)

Examples

See the examples/ directory for more detailed examples:

  • examples/basic_usage.py - Basic synchronous operations
  • examples/async_usage.py - Asynchronous operations and concurrency

Development

Setup Development Environment

# Clone the repository
git clone https://github.com/your-org/ctyun-zos-sdk.git
cd ctyun-zos-sdk

# Install development dependencies
make install-dev

# Install package in development mode
make dev-install

Running Tests

# Run all tests
make test

# Run tests with coverage
make test-cov

# Run linting checks
make lint

# Format code
make format

Building and Publishing

# Build package
make build

# Check package metadata
make check

# Upload to test PyPI
make upload-test

# Upload to PyPI
make upload

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests for new functionality
  5. Ensure all tests pass
  6. Submit a pull request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

  • Based on the verified examples in the verified/ directory
  • Uses boto3's authentication and signing mechanisms
  • Built with httpx for modern HTTP client capabilities

Support

For issues and questions:

  • Create an issue on GitHub
  • Check the examples in the examples/ directory
  • Review the verified examples in the verified/ directory

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ctyun_zos_sdk-0.1.1.tar.gz (16.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ctyun_zos_sdk-0.1.1-py3-none-any.whl (13.8 kB view details)

Uploaded Python 3

File details

Details for the file ctyun_zos_sdk-0.1.1.tar.gz.

File metadata

  • Download URL: ctyun_zos_sdk-0.1.1.tar.gz
  • Upload date:
  • Size: 16.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.0

File hashes

Hashes for ctyun_zos_sdk-0.1.1.tar.gz
Algorithm Hash digest
SHA256 ced03414e9134516d6f0c28b3c5746e1bfe7d7905150d64fbd771aecec28a6cc
MD5 d1a8c2fe3aee4873456da26335dbf163
BLAKE2b-256 b3e51c85f78c373afacd4f414d6a004c1c8912ae286885bcc6b626e53c856df9

See more details on using hashes here.

File details

Details for the file ctyun_zos_sdk-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: ctyun_zos_sdk-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 13.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.0

File hashes

Hashes for ctyun_zos_sdk-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ad72eeacfabe632f7b82361724e88a6724c590043e1a450afa8bdd1e49cf4cf8
MD5 1de1fcb7c6e2226732219e78e9c0df07
BLAKE2b-256 cd9d76697f8749e115c868ca8b8da4a8c94a1917382a15942a852146e4575775

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page