Metadata-Version: 2.4
Name: platform-ext-utils
Version: 0.0.1
Summary: Shared utility library for Cloudscaile extension features, providing Kafka integration and utilities
Author: Cloudscaile Engineering
License: Apache-2.0
Keywords: cloudscaile,kafka,extensions,utilities
Classifier: Development Status :: 3 - Alpha
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: confluent-kafka>=2.4
Requires-Dist: pydantic>=2.0
Requires-Dist: pydantic-settings>=2.0
Requires-Dist: httpx>=0.25
Dynamic: license-file

# platform-ext-utils

Shared utility library for Cloudscaile extension features, providing Kafka integration, environment configuration management, and external connectivity utilities.

## Features

- **Kafka Service**: Simplified Kafka producer and consumer interface with Sasl support
- **Environment Management**: Centralized configuration via environment variables
- **Logger**: Pre-configured logging for consistent application logs
- **External Connectivity**: Internal HTTP client instances for inter-service communication

## Installation

```bash
pip install platform-ext-utils
```

## Requirements

- Python >= 3.9
- confluent-kafka >= 2.4
- pydantic >= 2.0
- pydantic-settings >= 2.0
- httpx >= 0.25

## Configuration

All configuration is done via environment variables:

```bash
# Kafka Configuration
KAFKA_REQUIRED=
KAFKA_CLIENT_ID=
KAFKA_BROKERS=
KAFKA_GROUP_ID=
KAFKA_CONSUMER_TOPIC=
KAFKA_PRODUCER_TOPIC=

# Optional: Kafka SASL Authentication
KAFKA_SASL=
KAFKA_SASL_USERNAME=
KAFKA_SASL_PASSWORD=

# Tenant Configuration
TENANT_NAME=
EXTENSION_NAME=
```

## Usage

### Producing Messages

```python
from py_utils import produce_message

produce_message(
    {"event": "user_created", "userId": "123"},
    topic="user-events"
)
```

### Consuming Messages

```python
from py_utils import kafka_service

def handle_message(event):
    print("Received:", event)

if kafka_service:
    kafka_service.consume(callback=handle_message)
```

The callback receives:

```python
{
  "queueName": "<topic>",
  "partition": 0,
  "offset": 42,
  "message": "<decoded string>",
  "timestamp": (<type>, <value>)
}
```

### Using Logger

```python
from py_utils.utils.logger import logger

logger.info("Application started")
logger.error("An error occurred")
```

### External Connectivity

```python
from py_utils import internal_axios_instances

# Use pre-configured HTTP clients for inter-service communication
```

## License

Apache License 2.0

## Author

Cloudscaile Engineering
