midil-kit


Namemidil-kit JSON
Version 3.2.0 PyPI version JSON
download
home_pageNone
SummaryA Python SDK for backend systems development @midil.io
upload_time2025-08-09 16:40:07
maintainerNone
docs_urlNone
authorEngr. Michael Kofi Armah
requires_python<4.0,>=3.12
licenseNone
keywords midil midil-kit event infrastructure extensions
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Midil Kit

A comprehensive Python SDK for backend systems development at [midil.io](https://midil.io). This library provides a rich set of tools for building modern, scalable backend applications with support for authentication, event handling, HTTP clients, and JSON:API compliance.

## ✨ Features

### 🔐 Authentication & Authorization
- **JWT Authorization**: Comprehensive JWT token verification and validation
- **AWS Cognito Integration**: Ready-to-use Cognito client credentials flow and JWT authorizer
- **Pluggable Auth Providers**: Abstract interfaces for custom authentication implementations
- **FastAPI Middleware**: Built-in authentication middleware for FastAPI applications

### 📡 Event System
- **Event Dispatching**: Abstract event dispatcher with polling and AWS integrations
- **SQS Consumer**: AWS SQS message consumption with automatic retry and context handling
- **Event Scheduling**: AWS EventBridge integration and periodic task scheduling
- **Event Context**: Distributed tracing and context management for events

### 🌐 HTTP Client
- **Enhanced HTTP Client**: HTTPX-based client with authentication integration
- **Retry Logic**: Configurable retry strategies with exponential backoff and jitter
- **Transport Layer**: Custom transport with comprehensive error handling
- **Auth Integration**: Seamless integration with authentication providers

### 📋 JSON:API Compliance
- **Document Creation**: Full JSON:API compliant document creation and validation
- **Resource Management**: Type-safe resource objects with relationships
- **Query Parameters**: Parsing and validation of JSON:API query parameters (sort, include, pagination)
- **Error Handling**: Standardized JSON:API error document creation

### 🚀 Framework Extensions
- **FastAPI Integration**: Authentication middleware and JSON:API dependencies
- **Type Safety**: Full type hints throughout with Pydantic models
- **Async Support**: Native async/await support across all components

## 📦 Installation

### Using Poetry (Recommended)

```bash
poetry add midil-kit
```

### Using pip

```bash
pip install midil-kit
```

### Optional Dependencies

The library supports optional feature sets through extras:

```bash
# Web framework extensions (FastAPI)
poetry add midil-kit[fastapi]

# Authentication providers (JWT, Cognito)
poetry add midil-kit[auth]

# AWS event services (SQS, EventBridge)
poetry add midil-kit[event]

# AWS infrastructure (auth + event)
poetry add midil-kit[aws]

# All optional dependencies
poetry add midil-kit[all]
```

## 🚀 Quick Start

### Authentication with Cognito

```python
from midil.auth.cognito import CognitoClientCredentialsAuthenticator, CognitoJWTAuthorizer

# Authentication client for outbound requests
auth_client = CognitoClientCredentialsAuthenticator(
    client_id="your-client-id",
    client_secret="your-client-secret",
    cognito_domain="your-domain.auth.region.amazoncognito.com"
)

# Get access token
token = await auth_client.get_token()
headers = await auth_client.get_headers()

# JWT authorizer for inbound requests
authorizer = CognitoJWTAuthorizer(
    user_pool_id="your-user-pool-id",
    region="us-east-1"
)

# Verify incoming token
claims = await authorizer.verify("jwt-token")
```

### Event System

```python
from midil.event.dispatchers.polling import PollingEventDispatcher
from midil.event.consumers.sqs import run_sqs_consumer
from midil.event.context import event_context

# Event dispatcher
dispatcher = PollingEventDispatcher()

# Register event handlers
@dispatcher.on("user.created")
async def handle_user_created(event: str, body: dict):
    print(f"User created: {body['user_id']}")

# Start event processing
await dispatcher.start_event_processor()

# Send events
await dispatcher.notify("user.created", {"user_id": "123"})

# SQS consumer
await run_sqs_consumer(
    queue_url="https://sqs.region.amazonaws.com/account/queue-name",
    region_name="us-east-1"
)
```

### HTTP Client with Authentication

```python
from midil.http import HttpClient
from midil.auth.cognito import CognitoClientCredentialsAuthenticator
from httpx import URL

# Create authenticated HTTP client
auth_client = CognitoClientCredentialsAuthenticator(...)
http_client = HttpClient(
    auth_client=auth_client,
    base_url=URL("https://api.example.com")
)

# Make authenticated requests
response = await http_client.send_request(
    method="POST",
    url="/users",
    data={"name": "John Doe"}
)
```

### JSON:API Documents

```python
from midil.jsonapi import Document, ResourceObject, ErrorObject

# Create a resource document
resource = ResourceObject(
    id="1",
    type="articles",
    attributes={"title": "JSON:API with Midil Kit", "content": "..."}
)

document = Document(data=resource)

# Create error documents
error = ErrorObject(
    status="422",
    title="Validation Error",
    detail="Title is required"
)

error_document = Document(errors=[error])
```

### FastAPI Integration

```python
from fastapi import FastAPI, Depends
from midil.midilapi.fastapi.middleware.auth_middleware import CognitoAuthMiddleware
from midil.midilapi.fastapi.dependencies.jsonapi import parse_sort, parse_include

app = FastAPI()

# Add authentication middleware
app.add_middleware(CognitoAuthMiddleware)

# JSON:API query parameter parsing
@app.get("/articles")
async def list_articles(
    sort=Depends(parse_sort),
    include=Depends(parse_include)
):
    return {"data": [], "meta": {"sort": sort, "include": include}}

# Access authenticated user
def get_auth(request):
    return request.state.auth

@app.get("/me")
async def get_current_user(auth=Depends(get_auth)):
    return {"user_id": auth.claims.sub}
```

## 📚 API Reference

### Authentication Module (`midil.auth`)

#### Core Interfaces
- `AuthNProvider`: Abstract authentication provider for outbound requests
- `AuthZProvider`: Abstract authorization provider for inbound token verification
- `AuthNToken`: Token model with expiration handling
- `AuthZTokenClaims`: Token claims model

#### Cognito Implementation
- `CognitoClientCredentialsAuthenticator`: OAuth2 client credentials flow
- `CognitoJWTAuthorizer`: JWT token verification for Cognito

### Event Module (`midil.event`)

#### Dispatchers
- `AbstractEventDispatcher`: Base event dispatcher with memory queue
- `PollingEventDispatcher`: In-memory event dispatcher with observer pattern

#### Consumers
- `SQSEventConsumer`: AWS SQS message consumer with retry logic

#### Schedulers
- `AWSEventBridgeClient`: EventBridge integration for scheduled events
- `PeriodicTask`: Periodic task execution with customizable strategies

#### Context Management
- `EventContext`: Event tracing and context management
- `event_context()`: Async context manager for event scoping

### HTTP Module (`midil.http`)

#### Client
- `HttpClient`: Enhanced HTTP client with auth integration
- `MidilAsyncClient`: Custom HTTPX client with retry transport

#### Retry System
- `RetryTransport`: Configurable retry transport layer
- `DefaultRetryStrategy`: Standard retry strategy implementation
- `ExponentialBackoffWithJitter`: Backoff strategy with jitter

### JSON:API Module (`midil.jsonapi`)

#### Document Models
- `Document`: Main document container
- `ResourceObject`: Resource representation with attributes and relationships
- `ErrorObject`: Error representation
- `QueryParams`: Query parameter parsing and validation

#### Utilities
- `Sort`, `Include`, `PaginationParams`: Query parameter models

### Extensions Module (`midil.midilapi`)

#### FastAPI Integration
- `BaseAuthMiddleware`: Base authentication middleware
- `CognitoAuthMiddleware`: Cognito-specific middleware
- `AuthContext`: Request authentication context
- `parse_sort()`, `parse_include()`: JSON:API query parameter dependencies

## 🛠️ Development

### Prerequisites

- Python 3.12+
- Poetry for dependency management

### Setup

1. Clone the repository:
```bash
git clone <repository-url>
cd midil-kit
```

2. Install dependencies:
```bash
make install
```

3. Install pre-commit hooks:
```bash
make pre-commit-install
```

### Development Commands

```bash
# Run tests
make test

# Run tests with coverage
make test-cov

# Lint code
make lint

# Format code
make format

# Type checking
make type-check

# Run all checks
make check

# Clean build artifacts
make clean

# Build package
make build
```

### Changelog Management

The project uses [towncrier](https://towncrier.readthedocs.io/) for changelog management:

```bash
# Create a changelog entry
make changelog-draft

# Preview changelog changes
make changelog-preview

# Update changelog
make changelog

# Prepare a new release
make release
```

### Testing

```bash
# Run all tests
poetry run pytest

# Run with coverage
poetry run pytest --cov=midil --cov-report=html

# Run specific test file
poetry run pytest tests/auth/test_cognito.py
```

### Code Quality

The project enforces code quality through:

- **Black**: Code formatting
- **Ruff**: Fast Python linter
- **MyPy**: Static type checking
- **Pre-commit hooks**: Automated quality checks

## 🏗️ Architecture

### Modular Design

Midil Kit follows a modular architecture:

```
midil/
├── auth/           # Authentication & authorization
├── event/          # Event system & messaging
├── http/           # HTTP client & retry logic
├── jsonapi/        # JSON:API compliance
└── extensions/     # Framework integrations
    └── fastapi/    # FastAPI-specific extensions
```

### Design Principles

- **Type Safety**: Comprehensive type hints using Pydantic models
- **Async First**: Native async/await support throughout
- **Pluggable**: Abstract interfaces for custom implementations
- **Framework Agnostic**: Core functionality independent of web frameworks
- **AWS Native**: First-class support for AWS services

## 🤝 Contributing

1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Make your changes
4. Add tests for new functionality
5. Ensure all tests pass (`make check`)
6. Create a changelog entry (`make changelog-draft`)
7. Commit your changes (`git commit -m 'feat: add amazing feature'`)
8. Push to the branch (`git push origin feature/amazing-feature`)
9. Open a Pull Request

### Commit Message Format

This project follows [Conventional Commits](https://www.conventionalcommits.org/):

```
<type>(<scope>): <description>

[optional body]

[optional footer(s)]
```

**Types:**
- `feat`: A new feature
- `fix`: A bug fix
- `docs`: Documentation only changes
- `style`: Changes that do not affect the meaning of the code
- `refactor`: A code change that neither fixes a bug nor adds a feature
- `test`: Adding missing tests or correcting existing tests
- `chore`: Changes to the build process or auxiliary tools

**Scopes:**
- `auth`: Authentication & authorization
- `event`: Event system
- `http`: HTTP client
- `jsonapi`: JSON:API functionality
- `extensions`: Framework extensions
- `docs`: Documentation
- `ci`: Continuous integration

**Examples:**
```
feat(auth): add support for refresh tokens
fix(event): resolve memory leak in event dispatcher
docs: update installation instructions
test(jsonapi): add tests for error document creation
```

## 📄 License

This project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details.

## 🔄 Changelog

See [CHANGELOG.md](CHANGELOG.md) for a detailed history of changes.

### Recent Releases

- **v3.0.0** - Breaking changes with improved naming conventions and PATCH/POST resource compliance
- **v2.1.0** - Infrastructure packages, FastAPI extensions, and improved interfaces
- **v2.0.0** - Major architectural improvements with auth, http, and event modules

## 🆘 Support

- 📧 Email: [michael.armah@midil.io](mailto:michael.armah@midil.io)
- 🌐 Website: [midil.io](https://midil.io)
- 📚 Documentation: [Coming Soon]

---

Built with ❤️ by the [Midil.io](https://midil.io) team for the Python backend development community.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "midil-kit",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.12",
    "maintainer_email": null,
    "keywords": "midil, midil-kit, event, infrastructure, extensions",
    "author": "Engr. Michael Kofi Armah",
    "author_email": "michael.armah@midil.io",
    "download_url": "https://files.pythonhosted.org/packages/ae/b9/61f6e467b374a914a62b2f2b6f7f09acd50356b1642c4967cf6de393e635/midil_kit-3.2.0.tar.gz",
    "platform": null,
    "description": "# Midil Kit\n\nA comprehensive Python SDK for backend systems development at [midil.io](https://midil.io). This library provides a rich set of tools for building modern, scalable backend applications with support for authentication, event handling, HTTP clients, and JSON:API compliance.\n\n## \u2728 Features\n\n### \ud83d\udd10 Authentication & Authorization\n- **JWT Authorization**: Comprehensive JWT token verification and validation\n- **AWS Cognito Integration**: Ready-to-use Cognito client credentials flow and JWT authorizer\n- **Pluggable Auth Providers**: Abstract interfaces for custom authentication implementations\n- **FastAPI Middleware**: Built-in authentication middleware for FastAPI applications\n\n### \ud83d\udce1 Event System\n- **Event Dispatching**: Abstract event dispatcher with polling and AWS integrations\n- **SQS Consumer**: AWS SQS message consumption with automatic retry and context handling\n- **Event Scheduling**: AWS EventBridge integration and periodic task scheduling\n- **Event Context**: Distributed tracing and context management for events\n\n### \ud83c\udf10 HTTP Client\n- **Enhanced HTTP Client**: HTTPX-based client with authentication integration\n- **Retry Logic**: Configurable retry strategies with exponential backoff and jitter\n- **Transport Layer**: Custom transport with comprehensive error handling\n- **Auth Integration**: Seamless integration with authentication providers\n\n### \ud83d\udccb JSON:API Compliance\n- **Document Creation**: Full JSON:API compliant document creation and validation\n- **Resource Management**: Type-safe resource objects with relationships\n- **Query Parameters**: Parsing and validation of JSON:API query parameters (sort, include, pagination)\n- **Error Handling**: Standardized JSON:API error document creation\n\n### \ud83d\ude80 Framework Extensions\n- **FastAPI Integration**: Authentication middleware and JSON:API dependencies\n- **Type Safety**: Full type hints throughout with Pydantic models\n- **Async Support**: Native async/await support across all components\n\n## \ud83d\udce6 Installation\n\n### Using Poetry (Recommended)\n\n```bash\npoetry add midil-kit\n```\n\n### Using pip\n\n```bash\npip install midil-kit\n```\n\n### Optional Dependencies\n\nThe library supports optional feature sets through extras:\n\n```bash\n# Web framework extensions (FastAPI)\npoetry add midil-kit[fastapi]\n\n# Authentication providers (JWT, Cognito)\npoetry add midil-kit[auth]\n\n# AWS event services (SQS, EventBridge)\npoetry add midil-kit[event]\n\n# AWS infrastructure (auth + event)\npoetry add midil-kit[aws]\n\n# All optional dependencies\npoetry add midil-kit[all]\n```\n\n## \ud83d\ude80 Quick Start\n\n### Authentication with Cognito\n\n```python\nfrom midil.auth.cognito import CognitoClientCredentialsAuthenticator, CognitoJWTAuthorizer\n\n# Authentication client for outbound requests\nauth_client = CognitoClientCredentialsAuthenticator(\n    client_id=\"your-client-id\",\n    client_secret=\"your-client-secret\",\n    cognito_domain=\"your-domain.auth.region.amazoncognito.com\"\n)\n\n# Get access token\ntoken = await auth_client.get_token()\nheaders = await auth_client.get_headers()\n\n# JWT authorizer for inbound requests\nauthorizer = CognitoJWTAuthorizer(\n    user_pool_id=\"your-user-pool-id\",\n    region=\"us-east-1\"\n)\n\n# Verify incoming token\nclaims = await authorizer.verify(\"jwt-token\")\n```\n\n### Event System\n\n```python\nfrom midil.event.dispatchers.polling import PollingEventDispatcher\nfrom midil.event.consumers.sqs import run_sqs_consumer\nfrom midil.event.context import event_context\n\n# Event dispatcher\ndispatcher = PollingEventDispatcher()\n\n# Register event handlers\n@dispatcher.on(\"user.created\")\nasync def handle_user_created(event: str, body: dict):\n    print(f\"User created: {body['user_id']}\")\n\n# Start event processing\nawait dispatcher.start_event_processor()\n\n# Send events\nawait dispatcher.notify(\"user.created\", {\"user_id\": \"123\"})\n\n# SQS consumer\nawait run_sqs_consumer(\n    queue_url=\"https://sqs.region.amazonaws.com/account/queue-name\",\n    region_name=\"us-east-1\"\n)\n```\n\n### HTTP Client with Authentication\n\n```python\nfrom midil.http import HttpClient\nfrom midil.auth.cognito import CognitoClientCredentialsAuthenticator\nfrom httpx import URL\n\n# Create authenticated HTTP client\nauth_client = CognitoClientCredentialsAuthenticator(...)\nhttp_client = HttpClient(\n    auth_client=auth_client,\n    base_url=URL(\"https://api.example.com\")\n)\n\n# Make authenticated requests\nresponse = await http_client.send_request(\n    method=\"POST\",\n    url=\"/users\",\n    data={\"name\": \"John Doe\"}\n)\n```\n\n### JSON:API Documents\n\n```python\nfrom midil.jsonapi import Document, ResourceObject, ErrorObject\n\n# Create a resource document\nresource = ResourceObject(\n    id=\"1\",\n    type=\"articles\",\n    attributes={\"title\": \"JSON:API with Midil Kit\", \"content\": \"...\"}\n)\n\ndocument = Document(data=resource)\n\n# Create error documents\nerror = ErrorObject(\n    status=\"422\",\n    title=\"Validation Error\",\n    detail=\"Title is required\"\n)\n\nerror_document = Document(errors=[error])\n```\n\n### FastAPI Integration\n\n```python\nfrom fastapi import FastAPI, Depends\nfrom midil.midilapi.fastapi.middleware.auth_middleware import CognitoAuthMiddleware\nfrom midil.midilapi.fastapi.dependencies.jsonapi import parse_sort, parse_include\n\napp = FastAPI()\n\n# Add authentication middleware\napp.add_middleware(CognitoAuthMiddleware)\n\n# JSON:API query parameter parsing\n@app.get(\"/articles\")\nasync def list_articles(\n    sort=Depends(parse_sort),\n    include=Depends(parse_include)\n):\n    return {\"data\": [], \"meta\": {\"sort\": sort, \"include\": include}}\n\n# Access authenticated user\ndef get_auth(request):\n    return request.state.auth\n\n@app.get(\"/me\")\nasync def get_current_user(auth=Depends(get_auth)):\n    return {\"user_id\": auth.claims.sub}\n```\n\n## \ud83d\udcda API Reference\n\n### Authentication Module (`midil.auth`)\n\n#### Core Interfaces\n- `AuthNProvider`: Abstract authentication provider for outbound requests\n- `AuthZProvider`: Abstract authorization provider for inbound token verification\n- `AuthNToken`: Token model with expiration handling\n- `AuthZTokenClaims`: Token claims model\n\n#### Cognito Implementation\n- `CognitoClientCredentialsAuthenticator`: OAuth2 client credentials flow\n- `CognitoJWTAuthorizer`: JWT token verification for Cognito\n\n### Event Module (`midil.event`)\n\n#### Dispatchers\n- `AbstractEventDispatcher`: Base event dispatcher with memory queue\n- `PollingEventDispatcher`: In-memory event dispatcher with observer pattern\n\n#### Consumers\n- `SQSEventConsumer`: AWS SQS message consumer with retry logic\n\n#### Schedulers\n- `AWSEventBridgeClient`: EventBridge integration for scheduled events\n- `PeriodicTask`: Periodic task execution with customizable strategies\n\n#### Context Management\n- `EventContext`: Event tracing and context management\n- `event_context()`: Async context manager for event scoping\n\n### HTTP Module (`midil.http`)\n\n#### Client\n- `HttpClient`: Enhanced HTTP client with auth integration\n- `MidilAsyncClient`: Custom HTTPX client with retry transport\n\n#### Retry System\n- `RetryTransport`: Configurable retry transport layer\n- `DefaultRetryStrategy`: Standard retry strategy implementation\n- `ExponentialBackoffWithJitter`: Backoff strategy with jitter\n\n### JSON:API Module (`midil.jsonapi`)\n\n#### Document Models\n- `Document`: Main document container\n- `ResourceObject`: Resource representation with attributes and relationships\n- `ErrorObject`: Error representation\n- `QueryParams`: Query parameter parsing and validation\n\n#### Utilities\n- `Sort`, `Include`, `PaginationParams`: Query parameter models\n\n### Extensions Module (`midil.midilapi`)\n\n#### FastAPI Integration\n- `BaseAuthMiddleware`: Base authentication middleware\n- `CognitoAuthMiddleware`: Cognito-specific middleware\n- `AuthContext`: Request authentication context\n- `parse_sort()`, `parse_include()`: JSON:API query parameter dependencies\n\n## \ud83d\udee0\ufe0f Development\n\n### Prerequisites\n\n- Python 3.12+\n- Poetry for dependency management\n\n### Setup\n\n1. Clone the repository:\n```bash\ngit clone <repository-url>\ncd midil-kit\n```\n\n2. Install dependencies:\n```bash\nmake install\n```\n\n3. Install pre-commit hooks:\n```bash\nmake pre-commit-install\n```\n\n### Development Commands\n\n```bash\n# Run tests\nmake test\n\n# Run tests with coverage\nmake test-cov\n\n# Lint code\nmake lint\n\n# Format code\nmake format\n\n# Type checking\nmake type-check\n\n# Run all checks\nmake check\n\n# Clean build artifacts\nmake clean\n\n# Build package\nmake build\n```\n\n### Changelog Management\n\nThe project uses [towncrier](https://towncrier.readthedocs.io/) for changelog management:\n\n```bash\n# Create a changelog entry\nmake changelog-draft\n\n# Preview changelog changes\nmake changelog-preview\n\n# Update changelog\nmake changelog\n\n# Prepare a new release\nmake release\n```\n\n### Testing\n\n```bash\n# Run all tests\npoetry run pytest\n\n# Run with coverage\npoetry run pytest --cov=midil --cov-report=html\n\n# Run specific test file\npoetry run pytest tests/auth/test_cognito.py\n```\n\n### Code Quality\n\nThe project enforces code quality through:\n\n- **Black**: Code formatting\n- **Ruff**: Fast Python linter\n- **MyPy**: Static type checking\n- **Pre-commit hooks**: Automated quality checks\n\n## \ud83c\udfd7\ufe0f Architecture\n\n### Modular Design\n\nMidil Kit follows a modular architecture:\n\n```\nmidil/\n\u251c\u2500\u2500 auth/           # Authentication & authorization\n\u251c\u2500\u2500 event/          # Event system & messaging\n\u251c\u2500\u2500 http/           # HTTP client & retry logic\n\u251c\u2500\u2500 jsonapi/        # JSON:API compliance\n\u2514\u2500\u2500 extensions/     # Framework integrations\n    \u2514\u2500\u2500 fastapi/    # FastAPI-specific extensions\n```\n\n### Design Principles\n\n- **Type Safety**: Comprehensive type hints using Pydantic models\n- **Async First**: Native async/await support throughout\n- **Pluggable**: Abstract interfaces for custom implementations\n- **Framework Agnostic**: Core functionality independent of web frameworks\n- **AWS Native**: First-class support for AWS services\n\n## \ud83e\udd1d Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Make your changes\n4. Add tests for new functionality\n5. Ensure all tests pass (`make check`)\n6. Create a changelog entry (`make changelog-draft`)\n7. Commit your changes (`git commit -m 'feat: add amazing feature'`)\n8. Push to the branch (`git push origin feature/amazing-feature`)\n9. Open a Pull Request\n\n### Commit Message Format\n\nThis project follows [Conventional Commits](https://www.conventionalcommits.org/):\n\n```\n<type>(<scope>): <description>\n\n[optional body]\n\n[optional footer(s)]\n```\n\n**Types:**\n- `feat`: A new feature\n- `fix`: A bug fix\n- `docs`: Documentation only changes\n- `style`: Changes that do not affect the meaning of the code\n- `refactor`: A code change that neither fixes a bug nor adds a feature\n- `test`: Adding missing tests or correcting existing tests\n- `chore`: Changes to the build process or auxiliary tools\n\n**Scopes:**\n- `auth`: Authentication & authorization\n- `event`: Event system\n- `http`: HTTP client\n- `jsonapi`: JSON:API functionality\n- `extensions`: Framework extensions\n- `docs`: Documentation\n- `ci`: Continuous integration\n\n**Examples:**\n```\nfeat(auth): add support for refresh tokens\nfix(event): resolve memory leak in event dispatcher\ndocs: update installation instructions\ntest(jsonapi): add tests for error document creation\n```\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details.\n\n## \ud83d\udd04 Changelog\n\nSee [CHANGELOG.md](CHANGELOG.md) for a detailed history of changes.\n\n### Recent Releases\n\n- **v3.0.0** - Breaking changes with improved naming conventions and PATCH/POST resource compliance\n- **v2.1.0** - Infrastructure packages, FastAPI extensions, and improved interfaces\n- **v2.0.0** - Major architectural improvements with auth, http, and event modules\n\n## \ud83c\udd98 Support\n\n- \ud83d\udce7 Email: [michael.armah@midil.io](mailto:michael.armah@midil.io)\n- \ud83c\udf10 Website: [midil.io](https://midil.io)\n- \ud83d\udcda Documentation: [Coming Soon]\n\n---\n\nBuilt with \u2764\ufe0f by the [Midil.io](https://midil.io) team for the Python backend development community.\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A Python SDK for backend systems development @midil.io",
    "version": "3.2.0",
    "project_urls": null,
    "split_keywords": [
        "midil",
        " midil-kit",
        " event",
        " infrastructure",
        " extensions"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "343a794a18dff1f30d794d91792f172f7f848db9a08f3b529f3e6d3489fcdeec",
                "md5": "bcd825aaea1b9bf87751f21a9273c156",
                "sha256": "a1edd84e7eb1bd79541f2a31ef4fde0ae8899dd02e9eaab186c791ece3d46330"
            },
            "downloads": -1,
            "filename": "midil_kit-3.2.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "bcd825aaea1b9bf87751f21a9273c156",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.12",
            "size": 60802,
            "upload_time": "2025-08-09T16:40:01",
            "upload_time_iso_8601": "2025-08-09T16:40:01.945509Z",
            "url": "https://files.pythonhosted.org/packages/34/3a/794a18dff1f30d794d91792f172f7f848db9a08f3b529f3e6d3489fcdeec/midil_kit-3.2.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "aeb961f6e467b374a914a62b2f2b6f7f09acd50356b1642c4967cf6de393e635",
                "md5": "a8379dccd0450cb3e94ce2675cc2fb0b",
                "sha256": "9877a8fc4640be3f8e7c5b5d60383879ada6058dde693ef8749c4b32b4ce3eb9"
            },
            "downloads": -1,
            "filename": "midil_kit-3.2.0.tar.gz",
            "has_sig": false,
            "md5_digest": "a8379dccd0450cb3e94ce2675cc2fb0b",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.12",
            "size": 43012,
            "upload_time": "2025-08-09T16:40:07",
            "upload_time_iso_8601": "2025-08-09T16:40:07.756715Z",
            "url": "https://files.pythonhosted.org/packages/ae/b9/61f6e467b374a914a62b2f2b6f7f09acd50356b1642c4967cf6de393e635/midil_kit-3.2.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-09 16:40:07",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "midil-kit"
}
        
Elapsed time: 4.86841s