# 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"
}