Metadata-Version: 2.4
Name: lockserver-client
Version: 0.1.1
Summary: Python client SDK for lockserver (distributed lock server)
Home-page: https://github.com/benliao/lockserver
Author: Ben Liao
Author-email: abenliao@gmail.com
License: MIT
Keywords: distributed lock server client sdk python
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Description-Content-Type: text/markdown
Requires-Dist: requests
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: keywords
Dynamic: license
Dynamic: requires-dist
Dynamic: summary

# lockserver-client (Python)

A Python client SDK for [lockserver](https://github.com/benliao/lockserver), a distributed lock server for coordinating access to shared resources.

## Install

```
pip install requests
```

## Usage

```python
from lockserver_client import LockserverClient

client = LockserverClient(
    addr='127.0.0.1:8080',  # or from env LOCKSERVER_ADDR
    owner='worker1',        # or from env LOCKSERVER_OWNER
    secret='your-strong-secret' # or from env LOCKSERVER_SECRET
)

# Blocking acquire
client.acquire('my-resource')
# ... critical section ...
client.release('my-resource')

# Non-blocking acquire
if client.acquire('my-resource', blocking=False):
    # ... critical section ...
    client.release('my-resource')
```

## Example: Multiple workers writing to S3

```python
from lockserver_client import LockserverClient

def upload_to_s3(bucket, file):
    print(f"Uploading {file} to {bucket}...")

client = LockserverClient(owner='worker-123', secret='your-strong-secret')

if client.acquire('s3-upload-lock'):
    try:
        upload_to_s3('my-bucket', 'file.txt')
    finally:
        client.release('s3-upload-lock')
```

## API

### `LockserverClient(addr=None, owner=None, secret=None)`
- `addr`: lockserver address (default: `127.0.0.1:8080`)
- `owner`: unique owner id (default: `default_owner`)
- `secret`: shared secret (default: `changeme`)

### `acquire(resource, blocking=True)`
- Acquires a lock on `resource`. If `blocking` is False, returns immediately if lock is held.
- Returns `True` (lock acquired) or `False` (non-blocking, lock not acquired).

### `release(resource)`
- Releases the lock on `resource`.

## License

MIT
