Unofficial Python SDK for Neva Object Storage (S3-compatible).
Project description
ate-neva-obst
Unofficial Python SDK for Neva Object Storage (S3-compatible).
Installation
pip install ate-neva-obst
SDK Usage
Basic Setup
from neva_obst import NevaObjectsClient
from neva_obst.client import NevaObjectsConfig
config = NevaObjectsConfig(
access_key="YOUR_ACCESS_KEY",
secret_key="YOUR_SECRET_KEY",
bucket="my-bucket",
)
client = NevaObjectsClient(config)
Supports context manager:
with NevaObjectsClient(config) as client:
...
Full Configuration
config = NevaObjectsConfig(
access_key="YOUR_ACCESS_KEY",
secret_key="YOUR_SECRET_KEY",
bucket="my-bucket",
endpoint="https://s3.nevaobjects.id", # default
default_expiry=86400, # pre-signed URL expiry in seconds (default: 24h)
extra_boto_config={}, # extra kwargs forwarded to botocore.client.Config
)
Upload
# Upload with auto key (uses filename)
key = client.upload("./photo.jpg")
print(f"Uploaded: {key}")
# Upload with custom object key
client.upload("./document.pdf", object_key="reports/2024/document.pdf")
# Upload with extra boto3 args (e.g. set Content-Type manually)
client.upload("./photo.jpg", extra_args={"ContentType": "image/jpeg"})
Returns the object key as a string. Raises FileNotFoundError if the local file does not exist.
List Objects
# List all objects
for obj in client.list():
print(obj.key, obj.size, obj.last_modified, obj.etag)
# Filter by prefix
for obj in client.list(prefix="reports/"):
print(obj.key)
# Limit results
objects = client.list(max_keys=100)
# Get keys only
keys = client.list_keys()
keys = client.list_keys(prefix="uploads/")
list() returns a list of ObjectInfo:
@dataclass
class ObjectInfo:
key: str
size: int # bytes
last_modified: str
etag: str
Pre-signed Download URL
# Default expiry (from config.default_expiry, default 24h)
url = client.get_download_url("photo.jpg")
# Custom expiry in seconds
url = client.get_download_url("photo.jpg", expires_in=3600)
Check Object Existence
if client.object_exists("photo.jpg"):
print("exists")
Returns True or False. Only raises on non-404 errors.
Delete
client.delete("photo.jpg")
Error Handling
from neva_obst.exceptions import NevaObjectsError, UploadError, DownloadError, ListError
try:
client.upload("./file.txt")
except FileNotFoundError as e:
print(f"File not found: {e}")
except UploadError as e:
print(f"Upload failed [{e.code}]: {e}")
except NevaObjectsError as e:
print(f"General error [{e.code}]: {e}")
All custom exceptions expose .code (S3 error code string) and .original (original ClientError).
Exception hierarchy:
NevaObjectsError
├── UploadError
├── DownloadError
└── ListError
CLI Usage
Configure Credentials
nevaobst configure
Credentials are resolved in this priority order: flags → env vars → config file
| Source | Variables |
|---|---|
| Environment | NEVA_ACCESS_KEY, NEVA_SECRET_KEY, NEVA_BUCKET, NEVA_ENDPOINT |
| Flags | --access-key, --secret-key, --bucket, --endpoint |
| Config file | ~/.azzte/neva-obst.conf |
Commands
upload
nevaobst upload photo.jpg
nevaobst upload "images/*" --prefix uploads/2024/
nevaobst upload report.pdf --key docs/report-q1.pdf
list
nevaobst list
nevaobst list -fs # show size + last modified
nevaobst list --prefix uploads/
nevaobst list --json
Output is displayed as a file tree:
📄 text.txt
📄 readme.md
📁 reports/
📄 q1.pdf
📄 q2.pdf
📁 uploads/
📁 2024/
📄 photo.jpg
info
nevaobst info photo.jpg
nevaobst info photo.jpg --json
get-url
nevaobst get-url photo.jpg
nevaobst get-url report.pdf --expires 3600
delete
nevaobst delete photo.jpg
nevaobst delete a.jpg b.jpg c.jpg --force
Global Flags
| Flag | Description |
|---|---|
--json |
Output as JSON |
--profile |
Use a named config profile (default: default) |
--help |
Show help for the command |
Changelog
2026-03-09
- Improved error handling (better 404 detection)
- Added automatic Content-Type detection during upload
- Added CLI (
nevaobst)
2026-03-07
- Project renamed from
ate-dme-obst→ate-neva-obst
2026-02-28
- Initial release
Disclaimer
This package is not officially affiliated with Neva Cloud or Domainesia. The SDK is stateless and does not transmit user data to third-party servers outside the target storage endpoint.
About
ate-neva-obst is an open-source project by AzzTE. Licensed under the BSD-3-Clause License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ate_neva_obst-2.0.7.tar.gz.
File metadata
- Download URL: ate_neva_obst-2.0.7.tar.gz
- Upload date:
- Size: 11.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf242c54d1e1d0d1876d5daf62abd642826f3ee8dae66361839b21d79caf135d
|
|
| MD5 |
48feb345c249b0a30d08d5ed6a3d5b54
|
|
| BLAKE2b-256 |
211ec18c72f896aabd40317972fda29fd7dd6e95dbcd7d2a820c6ef5cafa022c
|
File details
Details for the file ate_neva_obst-2.0.7-py3-none-any.whl.
File metadata
- Download URL: ate_neva_obst-2.0.7-py3-none-any.whl
- Upload date:
- Size: 15.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90b8ecbdd4b500a0923555b40bb0de044cdeec978428e39add4342a543c36352
|
|
| MD5 |
0372541411e69d0c4643e2c12912b25d
|
|
| BLAKE2b-256 |
7c74a66dd865e9e4d4c769f1bdfd6467f3085d66069539adbbfc74eb748a27af
|