Metadata-Version: 2.4
Name: tinysdk
Version: 0.3.3
Summary: Shared services for TinyAI microservices platform
Author: Synapze GmbH
Maintainer: Synapze GmbH
License: MIT
Project-URL: Homepage, https://github.com/SynapzeGmbH/TinySDK
Project-URL: Repository, https://github.com/SynapzeGmbH/TinySDK
Project-URL: Issues, https://github.com/SynapzeGmbH/TinySDK/issues
Keywords: microservices,mongodb,minio,rabbitmq,tinyai
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pymongo>=4.6.3
Requires-Dist: pika>=1.3.0
Requires-Dist: minio>=7.0.0
Requires-Dist: urllib3
Requires-Dist: certifi
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
Requires-Dist: ruff>=0.1.0; extra == "dev"
Requires-Dist: mypy>=1.0.0; extra == "dev"
Requires-Dist: build>=1.0.0; extra == "dev"
Requires-Dist: twine>=4.0.0; extra == "dev"
Requires-Dist: mongomock>=4.1.2; extra == "dev"
Dynamic: license-file

# TinySDK

Shared service clients for the TinyAI microservices platform — MongoDB, MinIO, RabbitMQ, and structured logging with a consistent interface.

## Installation

```bash
pip install tinysdk
```

## Quick Start

```python
from tinysdk import TinyDBService, TinyStorageService, TinyMessageService, TinyMessageServiceSync, TinyLogger

# MongoDB
db = TinyDBService()
doc_id = db.create("users", {"name": "John", "email": "john@example.com"})
users  = db.read("users", filter={"name": "John"})
count  = db.update("users", {"name": "John"}, {"$set": {"active": True}})
count  = db.delete("users", {"name": "John"})
exists = db.exists("users", {"email": "john@example.com"})
ids    = db.create_multiple("users", [{"name": "Alice"}, {"name": "Bob"}])
db.close()

# MinIO / S3
storage = TinyStorageService()
storage.upload_file("my-bucket", "file.txt", buffer)          # file_size auto-detected
storage.upload_file("my-bucket", "file.txt", buffer, 1024)    # or pass explicitly
file_buffer, name = storage.download_file("my-bucket", "file.txt")
storage.upload_folder("my-bucket", "/local/folder")
storage.download_folder("my-bucket", "folder-name", "/local/dest")
storage.close()

# RabbitMQ (async, event-driven)
def handler(msg: dict):
    print(msg)

svc = TinyMessageService(queue_settings=[("my-queue", handler)])
svc.publish("my-queue", {"task": "run"})
svc.run()  # blocks, starts IOLoop

# RabbitMQ (sync, blocking)
with TinyMessageServiceSync() as svc:
    svc.publish("my-queue", {"task": "run"})

# Logger
logger = TinyLogger()
logger.log("something happened", level="INFO", context={"key": "value"})
logger.start_heartbeat()   # emits periodic HEARTBEAT events
logger.stop_heartbeat()    # clean shutdown

doc_logger = logger.for_document("doc-id-123")
doc_logger.log("processing started")
```

## Configuration

All clients read credentials from environment variables.

| Service | Variable | Example |
|---------|----------|---------|
| MongoDB | `DB_LINK` | `mongodb://mongo:27017` |
| MongoDB | `DB_NAME` | `tinyDatabase` |
| MinIO | `MINIO_ENDPOINT` | `minio:9000` |
| MinIO | `MINIO_ACCESSKEY` | `minioadmin` |
| MinIO | `MINIO_SECRETKEY` | `minioadmin` |
| RabbitMQ | `RABBITMQ_HOST` | `rabbitmq` |
| RabbitMQ | `RABBITMQ_PORT` | `5672` |
| RabbitMQ | `RABBITMQ_USER` | `guest` |
| RabbitMQ | `RABBITMQ_PASS` | `guest` |
| Logger | `SERVICE_NAME` | `my-service` |
| Logger | `CLUSTER` | `prod` |
| Logger | `NAMESPACE` | `default` |
| Logger | `LOG_LEVEL` | `INFO` |
| Logger | `HEARTBEAT_INTERVAL` | `30` |

Credentials can also be passed directly as constructor arguments.

## License

MIT
