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.
Metadata
Release files for ate-neva-obst 2.0.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ate_neva_obst-2.0.7.tar.gz | 11.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ate_neva_obst-2.0.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 26.8 kB
Release files / ate_neva_obst-2.0.7.tar.gz
| Download URL | ate_neva_obst-2.0.7.tar.gz |
|---|---|
| Size | 11.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bf242c54d1e1d0d1876d5daf62abd642826f3ee8dae66361839b21d79caf135d
|
|
BLAKE2b-256 checksum How to use checksums |
211ec18c72f896aabd40317972fda29fd7dd6e95dbcd7d2a820c6ef5cafa022c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|
Release files / ate_neva_obst-2.0.7-py3-none-any.whl
| Download URL | ate_neva_obst-2.0.7-py3-none-any.whl |
|---|---|
| Size | 15.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
90b8ecbdd4b500a0923555b40bb0de044cdeec978428e39add4342a543c36352
|
|
BLAKE2b-256 checksum How to use checksums |
7c74a66dd865e9e4d4c769f1bdfd6467f3085d66069539adbbfc74eb748a27af
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.14.3
|