Metadata-Version: 2.4
Name: tinysdk
Version: 0.2.1
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: build>=1.0.0; extra == "dev"
Requires-Dist: twine>=4.0.0; 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, TinyStorageHandler, TinyMessageService, TinyMessageServiceSync, TinyLogger

# MongoDB
db = TinyDBService()
db.create({"collection": "users", "document": {"name": "John"}})

# MinIO / S3
storage = TinyStorageHandler()
storage.upload_file("my-bucket", "file.txt", buffer, size)

# RabbitMQ (async)
svc = TinyMessageService([("my-queue", handler)])
svc.publish("my-queue", {"task": "run"})
svc.run()

# RabbitMQ (sync)
svc = TinyMessageServiceSync()
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

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
