---
title: "Python SDK"
description: "Use boto3 with Edge Storage, and the requests library for Compute, CDN, and DNS. Practical backup script example."
url: https://edge.network/academy/sdk-python/
---

# Python SDK

[Back to Academy](https://edge.network/academy)
API & SDK
10 min read

# Python SDK

Edge does not provide its own Python SDK. For Storage, use `boto3`. For Compute, CDN, and DNS, use the REST API with `requests`.

## How it works

Edge Storage is S3-compatible. Use `boto3`
(the AWS SDK for Python) with Edge's endpoint and credentials. For Compute, CDN, and DNS, call the REST API at
`https://api.edge.network`
using the `requests` library.

## Storage: Installing and configuring

Install boto3 (and requests for REST API calls):

```
pip install boto3 requests
```

Configure the S3 client with Edge's Storage endpoint (region `us-east-1`, path-style access):

```
import boto3
import os

s3 = boto3.client(
    's3',
    endpoint_url='https://storage.edge.network',
    region_name='us-east-1',
    aws_access_key_id=os.environ['EDGE_ACCESS_KEY'],
    aws_secret_access_key=os.environ['EDGE_SECRET_KEY'],
    config=boto3.session.Config(
        signature_version='s3v4',
        s3={'addressing_style': 'path'}
    )
)
```

Create the bucket with a location constraint or omit it for Edge:

```
s3.create_bucket(Bucket='my-bucket')
```

## Storage operations

**Upload a file:**

```
s3.upload_fileobj(
    open('local/file.txt', 'rb'),
    'my-bucket',
    'backups/file.txt',
    ExtraArgs={'ContentType': 'text/plain'}
)
```

**List objects:**

```
paginator = s3.get_paginator('list_objects_v2')
for page in paginator.paginate(Bucket='my-bucket', Prefix='backups/'):
    for obj in page.get('Contents', []):
        print(obj['Key'])
```

**Download a file:**

```
s3.download_file('my-bucket', 'backups/file.txt', 'local/file.txt')
```

**Generate a presigned URL:**

```
url = s3.generate_presigned_url(
    'get_object',
    Params={'Bucket': 'my-bucket', 'Key': 'backups/file.txt'},
    ExpiresIn=3600
)
```

## Compute, CDN, DNS: REST API with requests

For non-Storage products, use `requests`:

```
import requests

resp = requests.get(
    'https://api.edge.network/api/compute/vms',
    headers={
        'Authorization': f"Bearer {os.environ['EDGE_API_KEY']}",
        'Content-Type': 'application/json'
    }
)
data = resp.json()
```

Use the same pattern for CDN, DNS, and VM operations. See the [API Reference](https://edge.network/academy/api-reference) for endpoints.

## Practical example: Backup script

This script uploads local files to Edge Storage with dated prefixes:

```
from pathlib import Path
from datetime import datetime

def backup_to_edge(local_dir: str, bucket: str, prefix: str = 'backups'):
    """Upload directory tree to Edge Storage with timestamp prefix."""
    base = Path(local_dir)
    timestamp = datetime.utcnow().strftime('%Y%m%d-%H%M%S')
    
    for path in base.rglob('*'):
        if path.is_file():
            key = f"{prefix}/{timestamp}/{path.relative_to(base)}"
            key = key.replace('\\', '/')
            s3.upload_file(str(path), bucket, key)
            print(f"Uploaded {path} -> {key}")

backup_to_edge('./data', 'my-bucket')
```

Run it via cron for scheduled backups. You can add lifecycle rules or expiry in the control panel to retain only recent backups.

## Next steps

[Go SDK](https://edge.network/academy/sdk-go) [Storage Documentation](https://edge.network/docs/storage)
