django-aida-notifications


Namedjango-aida-notifications JSON
Version 1.0.0 PyPI version JSON
download
home_pagehttps://github.com/hmesfin/aida-notifications
SummaryA comprehensive Django notification extension with email (via Anymail) and SMS (via Twilio) support
upload_time2025-08-16 02:45:48
maintainerNone
docs_urlNone
authorAIDA Notifications Contributors
requires_python>=3.8
licenseMIT
keywords django notifications email sms twilio anymail
VCS
bugtrack_url
requirements Django django-anymail twilio redis django-redis celery
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Django AIDA Notifications

[![Python Version](https://img.shields.io/pypi/pyversions/django-aida-notifications)](https://pypi.org/project/django-aida-notifications/)
[![Django Version](https://img.shields.io/badge/django-3.2%20to%205.1-blue)](https://www.djangoproject.com/)
[![PyPI Version](https://img.shields.io/pypi/v/django-aida-notifications)](https://pypi.org/project/django-aida-notifications/)
[![License](https://img.shields.io/github/license/hmesfin/aida-notifications)](https://github.com/hmesfin/aida-notifications/blob/main/LICENSE)
[![GitHub Stars](https://img.shields.io/github/stars/hmesfin/aida-notifications)](https://github.com/hmesfin/aida-notifications)

A comprehensive Django notification extension that provides email and SMS notification capabilities with template management, delivery tracking, and support for multiple providers.

## Features

- **Multi-channel Support**: Send notifications via Email and SMS
- **Template Management**: Create and manage reusable notification templates with Django template syntax
- **Provider Abstraction**: Easy switching between email providers (via Django Anymail) and SMS providers (Twilio)
- **Delivery Tracking**: Complete logging of all sent notifications with status tracking
- **User Preferences**: Allow users to control their notification preferences
- **Batch Sending**: Send notifications to multiple recipients efficiently
- **Admin Interface**: Full Django admin integration for managing templates and viewing logs
- **Test Mode**: Safe testing without sending actual notifications
- **Retry Logic**: Automatic retry for failed notifications
- **Django 5.1 Compatible**: Supports Django 3.2 through 5.1

## Installation

### From PyPI (Recommended)

```bash
pip install django-aida-notifications
```

### From GitHub

```bash
pip install git+https://github.com/hmesfin/aida-notifications.git
```

### From Source

```bash
git clone https://github.com/hmesfin/aida-notifications.git
cd aida-notifications
pip install -e .
```

## Quick Start

### 1. Add to Django Settings

```python
# settings.py

INSTALLED_APPS = [
    ...
    'aida_notifications',
    'anymail',  # Required for email support
    ...
]

# Anymail Configuration
ANYMAIL = {
    "SENDGRID_API_KEY": "your-sendgrid-api-key",
    # Or use another provider like Mailgun, Postmark, etc.
}
EMAIL_BACKEND = "anymail.backends.sendgrid.EmailBackend"

# AIDA Notifications Configuration
AIDA_NOTIFICATIONS = {
    'DEFAULT_FROM_EMAIL': 'noreply@example.com',
    'DEFAULT_FROM_NAME': 'Your App Name',
    'TWILIO_ACCOUNT_SID': 'your-twilio-account-sid',
    'TWILIO_AUTH_TOKEN': 'your-twilio-auth-token',
    'TWILIO_FROM_NUMBER': '+1234567890',
    'LOG_NOTIFICATIONS': True,
    'TEST_MODE': False,  # Set to True for testing
}
```

### 2. Run Migrations

```bash
python manage.py migrate aida_notifications
```

### 3. Create Sample Templates

```bash
python manage.py create_sample_templates
```

### 4. Send Your First Notification

```python
from aida_notifications.service import notification_service

# Send a simple email
notification_service.send_email(
    recipient='user@example.com',
    subject='Welcome!',
    body='Welcome to our platform!',
    html_body='<h1>Welcome to our platform!</h1>'
)

# Send using a template
notification_service.send_email(
    recipient=user,  # Can be a User object
    template_name='welcome_email',
    context={
        'user': user,
        'site_name': 'My App'
    }
)

# Send an SMS
notification_service.send_sms(
    recipient='+1234567890',
    body='Your verification code is 123456'
)
```

## Configuration Options

### Email Providers (via Django Anymail)

AIDA Notifications uses Django Anymail for email delivery, supporting multiple providers:

- SendGrid
- Mailgun
- Postmark
- Amazon SES
- SparkPost
- Mandrill
- Sendinblue
- And more...

Example configuration for different providers:

```python
# SendGrid
ANYMAIL = {
    "SENDGRID_API_KEY": "your-api-key",
}
EMAIL_BACKEND = "anymail.backends.sendgrid.EmailBackend"

# Mailgun
ANYMAIL = {
    "MAILGUN_API_KEY": "your-api-key",
    "MAILGUN_SENDER_DOMAIN": "mg.example.com",
}
EMAIL_BACKEND = "anymail.backends.mailgun.EmailBackend"

# Amazon SES
ANYMAIL = {
    "AMAZON_SES_CLIENT_PARAMS": {
        "aws_access_key_id": "your-access-key",
        "aws_secret_access_key": "your-secret-key",
        "region_name": "us-east-1",
    },
}
EMAIL_BACKEND = "anymail.backends.amazon_ses.EmailBackend"
```

### SMS Configuration (Twilio)

```python
AIDA_NOTIFICATIONS = {
    'TWILIO_ACCOUNT_SID': 'your-account-sid',
    'TWILIO_AUTH_TOKEN': 'your-auth-token',
    'TWILIO_FROM_NUMBER': '+1234567890',
    # Or use Messaging Service SID instead
    'TWILIO_MESSAGING_SERVICE_SID': 'your-messaging-service-sid',
}
```

### Advanced Settings

```python
AIDA_NOTIFICATIONS = {
    # Retry Configuration
    'RETRY_FAILED_NOTIFICATIONS': True,
    'MAX_RETRY_ATTEMPTS': 3,
    'RETRY_DELAY_SECONDS': 300,
    
    # Rate Limiting
    'ENABLE_RATE_LIMITING': True,
    'RATE_LIMIT_PER_HOUR': 100,
    
    # Batch Processing
    'BATCH_SIZE': 100,
    'USE_CELERY': True,  # For async processing
    
    # Testing
    'TEST_MODE': False,
    'TEST_MODE_RECIPIENTS': {
        'email': ['test@example.com'],
        'sms': ['+1234567890']
    }
}
```

## Template Management

### Creating Templates

Templates can be created via Django admin or programmatically:

```python
from aida_notifications.models import NotificationTemplate

template = NotificationTemplate.objects.create(
    name='order_confirmation',
    channel='email',
    subject='Order #{{ order.id }} Confirmed',
    body_template='''
    Hi {{ user.first_name }},
    
    Your order #{{ order.id }} has been confirmed.
    Total: ${{ order.total }}
    
    Thank you for your purchase!
    ''',
    html_template='''
    <h2>Order Confirmation</h2>
    <p>Hi {{ user.first_name }},</p>
    <p>Your order #{{ order.id }} has been confirmed.</p>
    <p><strong>Total: ${{ order.total }}</strong></p>
    <p>Thank you for your purchase!</p>
    ''',
    variables={
        'user': 'User object',
        'order': 'Order object'
    }
)
```

### Using Templates

```python
from aida_notifications.service import notification_service

# Send to a single user
notification_service.send_notification(
    recipient=user,
    template_name='order_confirmation',
    channel='email',
    context={
        'user': user,
        'order': order
    }
)

# Send to multiple recipients
notification_service.send_batch(
    recipients=[user1, user2, user3],
    template_name='newsletter',
    channel='email',
    context={
        'newsletter_date': 'January 2024'
    }
)
```

## User Preferences

Allow users to manage their notification preferences:

```python
from aida_notifications.models import NotificationPreference

# Create or update preferences
pref, created = NotificationPreference.objects.get_or_create(
    user=user,
    defaults={
        'email_enabled': True,
        'sms_enabled': True,
        'email_address': user.email,
        'phone_number': '+1234567890'
    }
)

# Disable email notifications
pref.email_enabled = False
pref.save()
```

## Management Commands

### Test Notifications

```bash
# Test email
python manage.py test_notification email user@example.com \
    --subject "Test Email" \
    --body "This is a test email"

# Test SMS
python manage.py test_notification sms +1234567890 \
    --body "This is a test SMS"

# Test with template
python manage.py test_notification email user@example.com \
    --template welcome_email \
    --context '{"user": {"first_name": "John"}}'
```

### Create Sample Templates

```bash
python manage.py create_sample_templates
```

## Admin Interface

The extension provides a comprehensive Django admin interface for:

- **Templates**: Create, edit, and preview notification templates
- **Logs**: View all sent notifications with filtering and search
- **Preferences**: Manage user notification preferences
- **Batches**: Monitor batch notification jobs

Access the admin at `/admin/aida_notifications/`

## API Reference

### NotificationService

```python
from aida_notifications.service import notification_service

# Send email
notification_service.send_email(
    recipient='email@example.com',  # or User object
    subject='Subject',
    body='Plain text body',
    html_body='<p>HTML body</p>',
    template_name='template_name',  # Optional
    context={},  # Template context
    reply_to='reply@example.com',
    attachments=[
        {
            'filename': 'document.pdf',
            'content': file_content,
            'mimetype': 'application/pdf'
        }
    ]
)

# Send SMS
notification_service.send_sms(
    recipient='+1234567890',  # or User object
    body='SMS message',
    template_name='template_name',  # Optional
    context={},  # Template context
    media_url='https://example.com/image.jpg'  # MMS
)

# Send batch
batch = notification_service.send_batch(
    recipients=[user1, user2, user3],
    template_name='newsletter',
    channel='email',
    context={'month': 'January'},
    batch_name='January Newsletter'
)

# Retry failed notifications
retried_count = notification_service.retry_failed_notifications(hours=24)
```

## Testing

### Running Tests

```bash
# Run all tests
python manage.py test aida_notifications

# Run with coverage
pytest --cov=aida_notifications tests/
```

### Test Mode

Enable test mode to prevent actual notifications from being sent:

```python
AIDA_NOTIFICATIONS = {
    'TEST_MODE': True,
    'TEST_MODE_RECIPIENTS': {
        'email': ['test@example.com'],
        'sms': ['+1234567890']
    }
}
```

## Celery Integration

For asynchronous notification sending, integrate with Celery:

```python
# tasks.py
from celery import shared_task
from aida_notifications.service import notification_service

@shared_task
def send_notification_async(recipient, template_name, channel, context):
    return notification_service.send_notification(
        recipient=recipient,
        template_name=template_name,
        channel=channel,
        context=context
    )
```

## Error Handling

```python
from aida_notifications.service import notification_service
from aida_notifications.models import NotificationLog

try:
    log = notification_service.send_email(
        recipient='user@example.com',
        subject='Test',
        body='Test message'
    )
    
    if log.status == NotificationLog.STATUS_SENT:
        print(f"Sent successfully: {log.provider_message_id}")
    else:
        print(f"Failed: {log.error_message}")
        
except Exception as e:
    print(f"Error: {e}")
```

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

## License

This project is licensed under the MIT License.

## Support

For issues and questions, please use the GitHub issue tracker.

## Changelog

### Version 1.0.0
- Initial release
- Email support via Django Anymail
- SMS support via Twilio
- Template management
- User preferences
- Batch sending
- Django 5.1 compatibility

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/hmesfin/aida-notifications",
    "name": "django-aida-notifications",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "AIDA Team <maintainers@aida-notifications.org>",
    "keywords": "django, notifications, email, sms, twilio, anymail",
    "author": "AIDA Notifications Contributors",
    "author_email": "AIDA Notifications Contributors <support@aida-notifications.org>",
    "download_url": "https://files.pythonhosted.org/packages/02/5d/5dddeef4430d9e7ff53bc790871dc329f65985c1d3c30a95f11ce10f8864/django_aida_notifications-1.0.0.tar.gz",
    "platform": null,
    "description": "# Django AIDA Notifications\n\n[![Python Version](https://img.shields.io/pypi/pyversions/django-aida-notifications)](https://pypi.org/project/django-aida-notifications/)\n[![Django Version](https://img.shields.io/badge/django-3.2%20to%205.1-blue)](https://www.djangoproject.com/)\n[![PyPI Version](https://img.shields.io/pypi/v/django-aida-notifications)](https://pypi.org/project/django-aida-notifications/)\n[![License](https://img.shields.io/github/license/hmesfin/aida-notifications)](https://github.com/hmesfin/aida-notifications/blob/main/LICENSE)\n[![GitHub Stars](https://img.shields.io/github/stars/hmesfin/aida-notifications)](https://github.com/hmesfin/aida-notifications)\n\nA comprehensive Django notification extension that provides email and SMS notification capabilities with template management, delivery tracking, and support for multiple providers.\n\n## Features\n\n- **Multi-channel Support**: Send notifications via Email and SMS\n- **Template Management**: Create and manage reusable notification templates with Django template syntax\n- **Provider Abstraction**: Easy switching between email providers (via Django Anymail) and SMS providers (Twilio)\n- **Delivery Tracking**: Complete logging of all sent notifications with status tracking\n- **User Preferences**: Allow users to control their notification preferences\n- **Batch Sending**: Send notifications to multiple recipients efficiently\n- **Admin Interface**: Full Django admin integration for managing templates and viewing logs\n- **Test Mode**: Safe testing without sending actual notifications\n- **Retry Logic**: Automatic retry for failed notifications\n- **Django 5.1 Compatible**: Supports Django 3.2 through 5.1\n\n## Installation\n\n### From PyPI (Recommended)\n\n```bash\npip install django-aida-notifications\n```\n\n### From GitHub\n\n```bash\npip install git+https://github.com/hmesfin/aida-notifications.git\n```\n\n### From Source\n\n```bash\ngit clone https://github.com/hmesfin/aida-notifications.git\ncd aida-notifications\npip install -e .\n```\n\n## Quick Start\n\n### 1. Add to Django Settings\n\n```python\n# settings.py\n\nINSTALLED_APPS = [\n    ...\n    'aida_notifications',\n    'anymail',  # Required for email support\n    ...\n]\n\n# Anymail Configuration\nANYMAIL = {\n    \"SENDGRID_API_KEY\": \"your-sendgrid-api-key\",\n    # Or use another provider like Mailgun, Postmark, etc.\n}\nEMAIL_BACKEND = \"anymail.backends.sendgrid.EmailBackend\"\n\n# AIDA Notifications Configuration\nAIDA_NOTIFICATIONS = {\n    'DEFAULT_FROM_EMAIL': 'noreply@example.com',\n    'DEFAULT_FROM_NAME': 'Your App Name',\n    'TWILIO_ACCOUNT_SID': 'your-twilio-account-sid',\n    'TWILIO_AUTH_TOKEN': 'your-twilio-auth-token',\n    'TWILIO_FROM_NUMBER': '+1234567890',\n    'LOG_NOTIFICATIONS': True,\n    'TEST_MODE': False,  # Set to True for testing\n}\n```\n\n### 2. Run Migrations\n\n```bash\npython manage.py migrate aida_notifications\n```\n\n### 3. Create Sample Templates\n\n```bash\npython manage.py create_sample_templates\n```\n\n### 4. Send Your First Notification\n\n```python\nfrom aida_notifications.service import notification_service\n\n# Send a simple email\nnotification_service.send_email(\n    recipient='user@example.com',\n    subject='Welcome!',\n    body='Welcome to our platform!',\n    html_body='<h1>Welcome to our platform!</h1>'\n)\n\n# Send using a template\nnotification_service.send_email(\n    recipient=user,  # Can be a User object\n    template_name='welcome_email',\n    context={\n        'user': user,\n        'site_name': 'My App'\n    }\n)\n\n# Send an SMS\nnotification_service.send_sms(\n    recipient='+1234567890',\n    body='Your verification code is 123456'\n)\n```\n\n## Configuration Options\n\n### Email Providers (via Django Anymail)\n\nAIDA Notifications uses Django Anymail for email delivery, supporting multiple providers:\n\n- SendGrid\n- Mailgun\n- Postmark\n- Amazon SES\n- SparkPost\n- Mandrill\n- Sendinblue\n- And more...\n\nExample configuration for different providers:\n\n```python\n# SendGrid\nANYMAIL = {\n    \"SENDGRID_API_KEY\": \"your-api-key\",\n}\nEMAIL_BACKEND = \"anymail.backends.sendgrid.EmailBackend\"\n\n# Mailgun\nANYMAIL = {\n    \"MAILGUN_API_KEY\": \"your-api-key\",\n    \"MAILGUN_SENDER_DOMAIN\": \"mg.example.com\",\n}\nEMAIL_BACKEND = \"anymail.backends.mailgun.EmailBackend\"\n\n# Amazon SES\nANYMAIL = {\n    \"AMAZON_SES_CLIENT_PARAMS\": {\n        \"aws_access_key_id\": \"your-access-key\",\n        \"aws_secret_access_key\": \"your-secret-key\",\n        \"region_name\": \"us-east-1\",\n    },\n}\nEMAIL_BACKEND = \"anymail.backends.amazon_ses.EmailBackend\"\n```\n\n### SMS Configuration (Twilio)\n\n```python\nAIDA_NOTIFICATIONS = {\n    'TWILIO_ACCOUNT_SID': 'your-account-sid',\n    'TWILIO_AUTH_TOKEN': 'your-auth-token',\n    'TWILIO_FROM_NUMBER': '+1234567890',\n    # Or use Messaging Service SID instead\n    'TWILIO_MESSAGING_SERVICE_SID': 'your-messaging-service-sid',\n}\n```\n\n### Advanced Settings\n\n```python\nAIDA_NOTIFICATIONS = {\n    # Retry Configuration\n    'RETRY_FAILED_NOTIFICATIONS': True,\n    'MAX_RETRY_ATTEMPTS': 3,\n    'RETRY_DELAY_SECONDS': 300,\n    \n    # Rate Limiting\n    'ENABLE_RATE_LIMITING': True,\n    'RATE_LIMIT_PER_HOUR': 100,\n    \n    # Batch Processing\n    'BATCH_SIZE': 100,\n    'USE_CELERY': True,  # For async processing\n    \n    # Testing\n    'TEST_MODE': False,\n    'TEST_MODE_RECIPIENTS': {\n        'email': ['test@example.com'],\n        'sms': ['+1234567890']\n    }\n}\n```\n\n## Template Management\n\n### Creating Templates\n\nTemplates can be created via Django admin or programmatically:\n\n```python\nfrom aida_notifications.models import NotificationTemplate\n\ntemplate = NotificationTemplate.objects.create(\n    name='order_confirmation',\n    channel='email',\n    subject='Order #{{ order.id }} Confirmed',\n    body_template='''\n    Hi {{ user.first_name }},\n    \n    Your order #{{ order.id }} has been confirmed.\n    Total: ${{ order.total }}\n    \n    Thank you for your purchase!\n    ''',\n    html_template='''\n    <h2>Order Confirmation</h2>\n    <p>Hi {{ user.first_name }},</p>\n    <p>Your order #{{ order.id }} has been confirmed.</p>\n    <p><strong>Total: ${{ order.total }}</strong></p>\n    <p>Thank you for your purchase!</p>\n    ''',\n    variables={\n        'user': 'User object',\n        'order': 'Order object'\n    }\n)\n```\n\n### Using Templates\n\n```python\nfrom aida_notifications.service import notification_service\n\n# Send to a single user\nnotification_service.send_notification(\n    recipient=user,\n    template_name='order_confirmation',\n    channel='email',\n    context={\n        'user': user,\n        'order': order\n    }\n)\n\n# Send to multiple recipients\nnotification_service.send_batch(\n    recipients=[user1, user2, user3],\n    template_name='newsletter',\n    channel='email',\n    context={\n        'newsletter_date': 'January 2024'\n    }\n)\n```\n\n## User Preferences\n\nAllow users to manage their notification preferences:\n\n```python\nfrom aida_notifications.models import NotificationPreference\n\n# Create or update preferences\npref, created = NotificationPreference.objects.get_or_create(\n    user=user,\n    defaults={\n        'email_enabled': True,\n        'sms_enabled': True,\n        'email_address': user.email,\n        'phone_number': '+1234567890'\n    }\n)\n\n# Disable email notifications\npref.email_enabled = False\npref.save()\n```\n\n## Management Commands\n\n### Test Notifications\n\n```bash\n# Test email\npython manage.py test_notification email user@example.com \\\n    --subject \"Test Email\" \\\n    --body \"This is a test email\"\n\n# Test SMS\npython manage.py test_notification sms +1234567890 \\\n    --body \"This is a test SMS\"\n\n# Test with template\npython manage.py test_notification email user@example.com \\\n    --template welcome_email \\\n    --context '{\"user\": {\"first_name\": \"John\"}}'\n```\n\n### Create Sample Templates\n\n```bash\npython manage.py create_sample_templates\n```\n\n## Admin Interface\n\nThe extension provides a comprehensive Django admin interface for:\n\n- **Templates**: Create, edit, and preview notification templates\n- **Logs**: View all sent notifications with filtering and search\n- **Preferences**: Manage user notification preferences\n- **Batches**: Monitor batch notification jobs\n\nAccess the admin at `/admin/aida_notifications/`\n\n## API Reference\n\n### NotificationService\n\n```python\nfrom aida_notifications.service import notification_service\n\n# Send email\nnotification_service.send_email(\n    recipient='email@example.com',  # or User object\n    subject='Subject',\n    body='Plain text body',\n    html_body='<p>HTML body</p>',\n    template_name='template_name',  # Optional\n    context={},  # Template context\n    reply_to='reply@example.com',\n    attachments=[\n        {\n            'filename': 'document.pdf',\n            'content': file_content,\n            'mimetype': 'application/pdf'\n        }\n    ]\n)\n\n# Send SMS\nnotification_service.send_sms(\n    recipient='+1234567890',  # or User object\n    body='SMS message',\n    template_name='template_name',  # Optional\n    context={},  # Template context\n    media_url='https://example.com/image.jpg'  # MMS\n)\n\n# Send batch\nbatch = notification_service.send_batch(\n    recipients=[user1, user2, user3],\n    template_name='newsletter',\n    channel='email',\n    context={'month': 'January'},\n    batch_name='January Newsletter'\n)\n\n# Retry failed notifications\nretried_count = notification_service.retry_failed_notifications(hours=24)\n```\n\n## Testing\n\n### Running Tests\n\n```bash\n# Run all tests\npython manage.py test aida_notifications\n\n# Run with coverage\npytest --cov=aida_notifications tests/\n```\n\n### Test Mode\n\nEnable test mode to prevent actual notifications from being sent:\n\n```python\nAIDA_NOTIFICATIONS = {\n    'TEST_MODE': True,\n    'TEST_MODE_RECIPIENTS': {\n        'email': ['test@example.com'],\n        'sms': ['+1234567890']\n    }\n}\n```\n\n## Celery Integration\n\nFor asynchronous notification sending, integrate with Celery:\n\n```python\n# tasks.py\nfrom celery import shared_task\nfrom aida_notifications.service import notification_service\n\n@shared_task\ndef send_notification_async(recipient, template_name, channel, context):\n    return notification_service.send_notification(\n        recipient=recipient,\n        template_name=template_name,\n        channel=channel,\n        context=context\n    )\n```\n\n## Error Handling\n\n```python\nfrom aida_notifications.service import notification_service\nfrom aida_notifications.models import NotificationLog\n\ntry:\n    log = notification_service.send_email(\n        recipient='user@example.com',\n        subject='Test',\n        body='Test message'\n    )\n    \n    if log.status == NotificationLog.STATUS_SENT:\n        print(f\"Sent successfully: {log.provider_message_id}\")\n    else:\n        print(f\"Failed: {log.error_message}\")\n        \nexcept Exception as e:\n    print(f\"Error: {e}\")\n```\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nThis project is licensed under the MIT License.\n\n## Support\n\nFor issues and questions, please use the GitHub issue tracker.\n\n## Changelog\n\n### Version 1.0.0\n- Initial release\n- Email support via Django Anymail\n- SMS support via Twilio\n- Template management\n- User preferences\n- Batch sending\n- Django 5.1 compatibility\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A comprehensive Django notification extension with email (via Anymail) and SMS (via Twilio) support",
    "version": "1.0.0",
    "project_urls": {
        "Bug Tracker": "https://github.com/hmesfin/aida-notifications/issues",
        "Changelog": "https://github.com/hmesfin/aida-notifications/blob/main/CHANGELOG.md",
        "Documentation": "https://github.com/hmesfin/aida-notifications#readme",
        "Homepage": "https://github.com/hmesfin/aida-notifications",
        "Repository": "https://github.com/hmesfin/aida-notifications.git"
    },
    "split_keywords": [
        "django",
        " notifications",
        " email",
        " sms",
        " twilio",
        " anymail"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a056f2957b992a3d7ec960f9dfae4c592da3c234c70e074d81aeb7c96c27937d",
                "md5": "419179374f5c439bfeeb61b39fcb1b73",
                "sha256": "0f90f40be36f2be3d4a26fee1aee149a7b09aa8d1a1a4d8fd50087326745c221"
            },
            "downloads": -1,
            "filename": "django_aida_notifications-1.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "419179374f5c439bfeeb61b39fcb1b73",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 22641,
            "upload_time": "2025-08-16T02:45:47",
            "upload_time_iso_8601": "2025-08-16T02:45:47.247229Z",
            "url": "https://files.pythonhosted.org/packages/a0/56/f2957b992a3d7ec960f9dfae4c592da3c234c70e074d81aeb7c96c27937d/django_aida_notifications-1.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "025d5dddeef4430d9e7ff53bc790871dc329f65985c1d3c30a95f11ce10f8864",
                "md5": "ae44ea5fed344fed2c6189964ea9080a",
                "sha256": "3094a76a0d08de0d81cc5a8a972c86ead65ca79874ceeb04838b3723cb4be290"
            },
            "downloads": -1,
            "filename": "django_aida_notifications-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "ae44ea5fed344fed2c6189964ea9080a",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 23517,
            "upload_time": "2025-08-16T02:45:48",
            "upload_time_iso_8601": "2025-08-16T02:45:48.877506Z",
            "url": "https://files.pythonhosted.org/packages/02/5d/5dddeef4430d9e7ff53bc790871dc329f65985c1d3c30a95f11ce10f8864/django_aida_notifications-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-16 02:45:48",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "hmesfin",
    "github_project": "aida-notifications",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "Django",
            "specs": [
                [
                    ">=",
                    "3.2"
                ],
                [
                    "<",
                    "6.0"
                ]
            ]
        },
        {
            "name": "django-anymail",
            "specs": [
                [
                    ">=",
                    "8.0"
                ]
            ]
        },
        {
            "name": "twilio",
            "specs": [
                [
                    ">=",
                    "7.0"
                ]
            ]
        },
        {
            "name": "redis",
            "specs": [
                [
                    ">=",
                    "4.0"
                ]
            ]
        },
        {
            "name": "django-redis",
            "specs": [
                [
                    ">=",
                    "5.0"
                ]
            ]
        },
        {
            "name": "celery",
            "specs": [
                [
                    ">=",
                    "5.0"
                ]
            ]
        }
    ],
    "lcname": "django-aida-notifications"
}
        
Elapsed time: 1.74153s