Skip to main content

Unofficial Python SDK for Neva Object Storage (S3-compatible).

Project description

ate-neva-obst

PyPI Python License

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-obstate-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


Download files

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

Source Distribution

ate_neva_obst-2.0.7.tar.gz (11.7 kB view details)

Uploaded Source

Built Distribution

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

ate_neva_obst-2.0.7-py3-none-any.whl (15.1 kB view details)

Uploaded Python 3

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

Hashes for ate_neva_obst-2.0.7.tar.gz
Algorithm Hash digest
SHA256 bf242c54d1e1d0d1876d5daf62abd642826f3ee8dae66361839b21d79caf135d
MD5 48feb345c249b0a30d08d5ed6a3d5b54
BLAKE2b-256 211ec18c72f896aabd40317972fda29fd7dd6e95dbcd7d2a820c6ef5cafa022c

See more details on using hashes here.

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

Hashes for ate_neva_obst-2.0.7-py3-none-any.whl
Algorithm Hash digest
SHA256 90b8ecbdd4b500a0923555b40bb0de044cdeec978428e39add4342a543c36352
MD5 0372541411e69d0c4643e2c12912b25d
BLAKE2b-256 7c74a66dd865e9e4d4c769f1bdfd6467f3085d66069539adbbfc74eb748a27af

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