Cledar Python SDK
Project description
Cledar Python SDK
Project Description
Cledar Python SDK is a shared set of production‑ready services and utilities used across Cledar projects. It can be installed from PyPI (recommended), or consumed as a Git dependency or Git submodule.
Included modules:
- kafka_service: Kafka Producer/Consumer, helpers and DLQ handler
- storage_service: Object storage abstraction (S3/ABFS/local via fsspec)
- monitoring_service: FastAPI monitoring server with Prometheus metrics and healthchecks
- redis_service: Redis‑backed typed config store
- kserve_service: KServe helpers
- common_logging: Common logging utilities
Installation and Setup
-
From PyPI (recommended)
Using pip:
pip install cledar-sdk
Using uv:
uv add cledar-sdk
Pin a specific version (example):
pip install "cledar-sdk==1.0.1"
-
From Git (alternative)
Using pip (SSH, specific tag):
pip install "git+ssh://git@github.com/Cledar/cledar-python-sdk.git@v1.0.1"
Using uv (SSH, specific tag):
uv add --git ssh://git@github.com/Cledar/cledar-python-sdk.git@v1.0.1
You can also point to a branch (e.g.
main) instead of a tag. -
As a Git submodule
git submodule add git@github.com:Cledar/cledar-python-sdk.git vendor/cledar-python-sdk git submodule update --init --recursive
Optionally install it in editable mode from the submodule path:
uv add -e ./vendor/cledar-python-sdk
-
Developing locally
git clone git@github.com/Cledar/cledar-python-sdk.git cd cledar-python-sdk uv sync
Python version required: 3.12.7
Testing
Unit tests are implemented using pytest and unittest.
-
Run tests:
uv run pytest
-
Adding tests: Place tests under each module's
testsdirectory (e.g.kafka_service/tests,storage_service/tests) or create files with the_test.pysuffix.
Quick Start Examples
Kafka
Producer:
from kafka_service.clients.producer import KafkaProducer
from kafka_service.config.schemas import KafkaProducerConfig
cfg = KafkaProducerConfig(
kafka_servers="localhost:9092",
kafka_group_id="example",
kafka_topic_prefix="dev",
compression_type="snappy",
kafka_partitioner="consistent_random",
)
producer = KafkaProducer(config=cfg)
producer.connect()
producer.send(topic="my-topic", value='{"id":"123","payload":"hello"}', key="123")
Consumer:
from kafka_service.clients.consumer import KafkaConsumer
from kafka_service.config.schemas import KafkaConsumerConfig
cfg = KafkaConsumerConfig(
kafka_servers="localhost:9092",
kafka_group_id="example",
kafka_topic_prefix="dev",
kafka_offset="earliest",
kafka_auto_commit_interval_ms=5000,
)
consumer = KafkaConsumer(config=cfg)
consumer.connect()
consumer.subscribe(["my-topic"])
msg = consumer.consume_next()
if msg:
consumer.commit(msg)
Object Storage (S3/ABFS/local)
from storage_service.object_storage import ObjectStorageService
from storage_service.models import ObjectStorageServiceConfig
cfg = ObjectStorageServiceConfig(
s3_access_key="minioadmin",
s3_secret_key="minioadmin",
s3_endpoint_url="http://localhost:9000",
)
storage = ObjectStorageService(config=cfg)
storage.upload_file(
file_path="README.md",
destination_path="s3://bucket/path/README.md",
)
Monitoring Server
from cledar.monitoring import MonitoringServer, MonitoringServerConfig
config = MonitoringServerConfig(
readiness_checks={"s3": storage.is_alive},
liveness_checks={"app": lambda: True},
)
server = MonitoringServer(host="0.0.0.0", port=8080, config=config)
server.start_monitoring_server()
Redis Config Store
from redis import Redis
from redis_service.redis_config_store import RedisConfigStore
redis = Redis(host="localhost", port=6379, db=0)
store = RedisConfigStore(redis=redis, prefix="example:")
# See redis_service/example.py for a full typed config provider example
Code Quality
- pydantic - settings management
- ruff, mypy - Linting, formatting, and static type checking
- pre-commit - Pre-commit file checks
Linting
If you want to run linting or type checker manually, you can use the following commands. Pre-commit will run these checks automatically before each commit.
uv run ruff format .
uv run ruff check .
uv run mypy .
Pre-commit setup
To get started follow these steps:
-
Install
pre-commitby running the following command:pip install pre-commit -
Once
pre-commitis installed, set up the pre-commit hooks by running:pre-commit install -
Pre-commit hooks will analyze only committed files. To analyze all files after installation run the following:
pre-commit run --all-files
Automatic Fixing Before Commits:
pre-commit will run Ruff (format + lint) and mypy during the commit process:
git commit -m "Describe your changes"
To skip pre-commit hooks for a single commit, use the --no-verify flag:
```bash
git commit -m "Your commit message" --no-verify
```
Technologies and Libraries
Main Dependencies:
- python >= "3.12.7"
- pydantic-settings
- confluent-kafka
- fastapi
- prometheus-client
- uvicorn
- redis
- fsspec/s3fs/adlfs (S3/ABFS backends)
- boto3 and boto3-stubs
Developer Tools:
- uv - Dependency and environment management
- pydantic - settings management
- ruff - Linting and formatting
- mypy - Static type checker
- pytest, unittest - Unit tests
- pre-commit - Code quality hooks
Commit conventions
We use Conventional Commits for our commit messages. This helps us to create a better, more readable changelog.
Example of a commit message:
refactor(XXX-NNN): spaghetti code is now a carbonara
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cledar_sdk-2.1.0.tar.gz.
File metadata
- Download URL: cledar_sdk-2.1.0.tar.gz
- Upload date:
- Size: 85.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.29 {"installer":{"name":"uv","version":"0.9.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"20.04","id":"focal","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb1c3f870cfa3f9b00e394cb1cf9b47b6104a08cf8abfaadb15337600dde1278
|
|
| MD5 |
04bb0b9ca88db2a25a1c3c4b9fcd6d52
|
|
| BLAKE2b-256 |
9cbd18c09885b3ccf540ff2be343300f90fd4c31e3c680678f4f8f0d8e062398
|
File details
Details for the file cledar_sdk-2.1.0-py3-none-any.whl.
File metadata
- Download URL: cledar_sdk-2.1.0-py3-none-any.whl
- Upload date:
- Size: 121.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.29 {"installer":{"name":"uv","version":"0.9.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"20.04","id":"focal","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
980d869dbcbe40001a4b0a0311b4dcb204d9841ed65dd3e2a94116f2d4dab6b4
|
|
| MD5 |
80ed133553d0760cb5e1d33292d3f51c
|
|
| BLAKE2b-256 |
3de065ac8978ad14858a7bb90ff88d552ef1dc410a40ae00ab2ac4a16e754056
|