# Django AIDA Notifications
[](https://pypi.org/project/django-aida-notifications/)
[](https://www.djangoproject.com/)
[](https://pypi.org/project/django-aida-notifications/)
[](https://github.com/hmesfin/aida-notifications/blob/main/LICENSE)
[](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[](https://pypi.org/project/django-aida-notifications/)\n[](https://www.djangoproject.com/)\n[](https://pypi.org/project/django-aida-notifications/)\n[](https://github.com/hmesfin/aida-notifications/blob/main/LICENSE)\n[](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"
}