django-slack-tools 0.2.2__tar.gz → 0.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/.devcontainer/devcontainer.json +1 -1
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/.github/dependabot.yaml +2 -1
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/.github/workflows/ci.yaml +16 -12
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/.github/workflows/docs.yaml +1 -1
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/.github/workflows/release.yaml +2 -1
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/.pre-commit-config.yaml +6 -1
- django_slack_tools-0.3.0/.python-version +1 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/.vscode/settings.json +1 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/Makefile +8 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/PKG-INFO +12 -60
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/README.md +2 -54
- django_slack_tools-0.3.0/django_slack_tools/app_settings.py +87 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/locale/ko_KR/LC_MESSAGES/django.po +150 -186
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/slack_messages/admin/message.py +1 -52
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/slack_messages/admin/message_recipient.py +2 -2
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/slack_messages/admin/messaging_policy.py +5 -5
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/slack_messages/backends/__init__.py +3 -3
- django_slack_tools-0.3.0/django_slack_tools/slack_messages/backends/base.py +65 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/slack_messages/backends/dummy.py +0 -12
- django_slack_tools-0.2.2/django_slack_tools/slack_messages/backends/logging.py → django_slack_tools-0.3.0/django_slack_tools/slack_messages/backends/logging_.py +0 -6
- django_slack_tools-0.3.0/django_slack_tools/slack_messages/backends/slack.py +88 -0
- django_slack_tools-0.3.0/django_slack_tools/slack_messages/message_templates/__init__.py +5 -0
- django_slack_tools-0.3.0/django_slack_tools/slack_messages/message_templates/base.py +17 -0
- {django_slack_tools-0.2.2/django_slack_tools/utils/template → django_slack_tools-0.3.0/django_slack_tools/slack_messages/message_templates}/django.py +30 -25
- django_slack_tools-0.3.0/django_slack_tools/slack_messages/message_templates/python.py +38 -0
- django_slack_tools-0.3.0/django_slack_tools/slack_messages/messenger.py +158 -0
- django_slack_tools-0.3.0/django_slack_tools/slack_messages/middlewares/__init__.py +4 -0
- django_slack_tools-0.3.0/django_slack_tools/slack_messages/middlewares/base.py +34 -0
- django_slack_tools-0.3.0/django_slack_tools/slack_messages/middlewares/django.py +218 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/slack_messages/migrations/0001_initial.py +4 -4
- django_slack_tools-0.3.0/django_slack_tools/slack_messages/migrations/0005_alter_slackmessagingpolicy_template_type.py +46 -0
- django_slack_tools-0.3.0/django_slack_tools/slack_messages/migrations/0006_alter_slackmessage_id.py +26 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/slack_messages/models/mention.py +1 -1
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/slack_messages/models/message.py +5 -2
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/slack_messages/models/message_recipient.py +1 -1
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/slack_messages/models/messaging_policy.py +4 -4
- django_slack_tools-0.3.0/django_slack_tools/slack_messages/request.py +91 -0
- django_slack_tools-0.3.0/django_slack_tools/slack_messages/response.py +21 -0
- django_slack_tools-0.3.0/django_slack_tools/slack_messages/shortcuts.py +78 -0
- django_slack_tools-0.3.0/django_slack_tools/slack_messages/tasks.py +79 -0
- django_slack_tools-0.3.0/django_slack_tools/slack_messages/template_loaders/__init__.py +11 -0
- django_slack_tools-0.3.0/django_slack_tools/slack_messages/template_loaders/base.py +16 -0
- django_slack_tools-0.3.0/django_slack_tools/slack_messages/template_loaders/django.py +74 -0
- django_slack_tools-0.3.0/django_slack_tools/slack_messages/template_loaders/errors.py +9 -0
- django_slack_tools-0.2.2/django_slack_tools/utils/slack/django.py → django_slack_tools-0.3.0/django_slack_tools/slack_messages/validators.py +1 -1
- django_slack_tools-0.3.0/django_slack_tools/utils/import_helper.py +37 -0
- django_slack_tools-0.3.0/django_slack_tools/utils/repr.py +10 -0
- django_slack_tools-0.3.0/django_slack_tools/utils/slack/__init__.py +3 -0
- django_slack_tools-0.3.0/docs/api-references/slack-messages/django-integration.md +15 -0
- django_slack_tools-0.3.0/docs/api-references/slack-messages/messenger-framework.md +19 -0
- django_slack_tools-0.3.0/docs/api-references/slack-messages/sending-messages.md +11 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/docs/index.md +1 -1
- django_slack_tools-0.3.0/docs/quick-start.md +74 -0
- django_slack_tools-0.3.0/examples/todo/.env.example +2 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/examples/todo/Makefile +6 -7
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/examples/todo/README.md +29 -16
- django_slack_tools-0.3.0/examples/todo/docs/messages.png +0 -0
- django_slack_tools-0.3.0/examples/todo/docs/slack-app-home.png +0 -0
- django_slack_tools-0.3.0/examples/todo/docs/slash-command.png +0 -0
- django_slack_tools-0.3.0/examples/todo/dump.json +60 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/examples/todo/pyproject.toml +1 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/examples/todo/todo/settings.py +31 -7
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/examples/todo/todo_app/services.py +3 -3
- django_slack_tools-0.3.0/examples/todo/todo_app/signals.py +52 -0
- django_slack_tools-0.3.0/examples/todo/todo_app/templates/todo-created.xml +7 -0
- django_slack_tools-0.3.0/examples/todo/todo_app/templates/todo-updated.xml +26 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/examples/todo/uv.lock +28 -4
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/mkdocs.yaml +4 -5
- django_slack_tools-0.3.0/noxfile.py +29 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/pyproject.toml +19 -17
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/testproj/config/settings.py +21 -5
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/tests/_factories.py +1 -1
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/tests/_helpers.py +15 -0
- django_slack_tools-0.3.0/tests/conftest.py +57 -0
- django_slack_tools-0.3.0/tests/slack_messages/_factories.py +93 -0
- django_slack_tools-0.3.0/tests/slack_messages/_helpers.py +71 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/tests/slack_messages/admin/test_mention.py +3 -1
- django_slack_tools-0.3.0/tests/slack_messages/admin/test_message.py +57 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/tests/slack_messages/admin/test_message_recipient.py +3 -1
- django_slack_tools-0.3.0/tests/slack_messages/backends/test_base.py +1 -0
- django_slack_tools-0.3.0/tests/slack_messages/backends/test_dummy.py +44 -0
- django_slack_tools-0.3.0/tests/slack_messages/backends/test_logging_.py +44 -0
- django_slack_tools-0.3.0/tests/slack_messages/backends/test_slack.py +211 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/test_base.py +1 -0
- {django_slack_tools-0.2.2/tests/utils/template → django_slack_tools-0.3.0/tests/slack_messages/message_templates}/test_django.py +22 -7
- django_slack_tools-0.2.2/tests/utils/template/test_dict.py → django_slack_tools-0.3.0/tests/slack_messages/message_templates/test_python.py +3 -3
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/approval.json +48 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/approval.png +0 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/approval.xml +35 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/bullet-list.json +52 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/bullet-list.png +0 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/bullet-list.xml +26 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/newsletter.json +172 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/newsletter.png +0 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/newsletter.xml +85 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/notification.json +106 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/notification.png +0 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/notification.xml +61 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/onboarding-1.json +62 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/onboarding-1.png +0 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/onboarding-1.xml +42 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/onboarding-2.json +46 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/onboarding-2.png +0 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/onboarding-2.xml +29 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/poll.json +133 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/poll.png +0 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/poll.xml +58 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/search-results-1.json +155 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/search-results-1.png +0 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/search-results-1.xml +76 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/search-results-2.json +236 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/search-results-2.png +0 -0
- django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/search-results-2.xml +122 -0
- django_slack_tools-0.3.0/tests/slack_messages/middlewares/test_base.py +0 -0
- django_slack_tools-0.3.0/tests/slack_messages/middlewares/test_django.py +442 -0
- django_slack_tools-0.3.0/tests/slack_messages/models/__init__.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/tests/slack_messages/models/_factories.py +16 -7
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/tests/slack_messages/models/test_mention.py +14 -14
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/tests/slack_messages/models/test_message.py +4 -4
- django_slack_tools-0.3.0/tests/slack_messages/template_loaders/__init__.py +0 -0
- django_slack_tools-0.3.0/tests/slack_messages/template_loaders/test_base.py +1 -0
- django_slack_tools-0.3.0/tests/slack_messages/template_loaders/test_django.py +130 -0
- django_slack_tools-0.3.0/tests/slack_messages/test_messenger.py +214 -0
- django_slack_tools-0.2.2/tests/utils/slack/test_message.py → django_slack_tools-0.3.0/tests/slack_messages/test_request.py +11 -4
- django_slack_tools-0.3.0/tests/slack_messages/test_response.py +6 -0
- django_slack_tools-0.3.0/tests/slack_messages/test_shortcuts.py +145 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/tests/slack_messages/test_tasks.py +26 -38
- django_slack_tools-0.3.0/tests/slack_messages/test_validators.py +30 -0
- django_slack_tools-0.3.0/tests/test_app_settings.py +155 -0
- django_slack_tools-0.3.0/tests/utils/__init__.py +0 -0
- django_slack_tools-0.3.0/tests/utils/django/__init__.py +0 -0
- {django_slack_tools-0.2.2/tests/utils → django_slack_tools-0.3.0/tests/utils/django}/test_widgets.py +1 -1
- django_slack_tools-0.3.0/tests/utils/slack/__init__.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/tests/utils/slack/test_django.py +4 -4
- django_slack_tools-0.3.0/tests/utils/test_import_helper.py +0 -0
- django_slack_tools-0.3.0/tests/utils/test_repr.py +1 -0
- django_slack_tools-0.3.0/uv.lock +2079 -0
- django_slack_tools-0.2.2/.python-version +0 -1
- django_slack_tools-0.2.2/django_slack_tools/__init__.py +0 -1
- django_slack_tools-0.2.2/django_slack_tools/app_settings.py +0 -123
- django_slack_tools-0.2.2/django_slack_tools/slack_messages/backends/base.py +0 -229
- django_slack_tools-0.2.2/django_slack_tools/slack_messages/backends/slack.py +0 -142
- django_slack_tools-0.2.2/django_slack_tools/slack_messages/message.py +0 -110
- django_slack_tools-0.2.2/django_slack_tools/slack_messages/tasks.py +0 -112
- django_slack_tools-0.2.2/django_slack_tools/utils/slack/__init__.py +0 -11
- django_slack_tools-0.2.2/django_slack_tools/utils/slack/message.py +0 -93
- django_slack_tools-0.2.2/django_slack_tools/utils/template/__init__.py +0 -5
- django_slack_tools-0.2.2/django_slack_tools/utils/template/base.py +0 -17
- django_slack_tools-0.2.2/django_slack_tools/utils/template/dict.py +0 -52
- django_slack_tools-0.2.2/docs/api-references/slack-messages/messaging-backends.md +0 -3
- django_slack_tools-0.2.2/docs/api-references/slack-messages/models.md +0 -3
- django_slack_tools-0.2.2/docs/api-references/slack-messages/sending-messages.md +0 -3
- django_slack_tools-0.2.2/docs/tutorials/quick-start.md +0 -51
- django_slack_tools-0.2.2/examples/todo/todo_app/signals.py +0 -32
- django_slack_tools-0.2.2/tests/conftest.py +0 -24
- django_slack_tools-0.2.2/tests/slack_messages/_factories.py +0 -52
- django_slack_tools-0.2.2/tests/slack_messages/admin/test_message.py +0 -120
- django_slack_tools-0.2.2/tests/slack_messages/backends/test_base.py +0 -3
- django_slack_tools-0.2.2/tests/slack_messages/backends/test_dummy.py +0 -19
- django_slack_tools-0.2.2/tests/slack_messages/backends/test_logging.py +0 -19
- django_slack_tools-0.2.2/tests/slack_messages/backends/test_slack.py +0 -190
- django_slack_tools-0.2.2/tests/slack_messages/test_message.py +0 -233
- django_slack_tools-0.2.2/tests/test_app_settings.py +0 -130
- django_slack_tools-0.2.2/uv.lock +0 -1966
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/.devcontainer/onCreateCommand.sh +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/.editorconfig +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/.gitattributes +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/.gitignore +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/.vscode/extensions.json +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/.vscode/launch.json +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/CONTRIBUTING.md +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/LICENSE +0 -0
- {django_slack_tools-0.2.2/django_slack_tools/slack_messages → django_slack_tools-0.3.0/django_slack_tools}/__init__.py +0 -0
- /django_slack_tools-0.2.2/django_slack_tools/slack_messages/migrations/__init__.py → /django_slack_tools-0.3.0/django_slack_tools/py.typed +0 -0
- {django_slack_tools-0.2.2/django_slack_tools/utils → django_slack_tools-0.3.0/django_slack_tools/slack_messages}/__init__.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/slack_messages/admin/__init__.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/slack_messages/admin/mention.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/slack_messages/apps.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/slack_messages/migrations/0002_default_policy.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/slack_messages/migrations/0003_default_recipient.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/slack_messages/migrations/0004_slackmessagingpolicy_template_type.py +0 -0
- {django_slack_tools-0.2.2/examples/todo/todo_app → django_slack_tools-0.3.0/django_slack_tools/slack_messages/migrations}/__init__.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/slack_messages/models/__init__.py +0 -0
- {django_slack_tools-0.2.2/examples/todo/todo_app/migrations → django_slack_tools-0.3.0/django_slack_tools/utils}/__init__.py +0 -0
- {django_slack_tools-0.2.2/testproj → django_slack_tools-0.3.0/django_slack_tools/utils/django}/__init__.py +0 -0
- {django_slack_tools-0.2.2/django_slack_tools/utils → django_slack_tools-0.3.0/django_slack_tools/utils/django}/model_mixins.py +0 -0
- {django_slack_tools-0.2.2/django_slack_tools/utils → django_slack_tools-0.3.0/django_slack_tools/utils/django}/widgets.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/utils/slack/misc.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/django_slack_tools/views.py +0 -0
- /django_slack_tools-0.2.2/docs/api-references/slack-messages/celery.md → /django_slack_tools-0.3.0/docs/api-references/slack-messages/celery-support.md +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/examples/todo/.python-version +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/examples/todo/docker-compose.yaml +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/examples/todo/manage.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/examples/todo/todo/__init__.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/examples/todo/todo/celery.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/examples/todo/todo/slack_app.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/examples/todo/todo/urls.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/examples/todo/todo/wsgi.py +0 -0
- {django_slack_tools-0.2.2/testproj/config → django_slack_tools-0.3.0/examples/todo/todo_app}/__init__.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/examples/todo/todo_app/admin.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/examples/todo/todo_app/apps.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/examples/todo/todo_app/migrations/0001_initial.py +0 -0
- {django_slack_tools-0.2.2/tests → django_slack_tools-0.3.0/examples/todo/todo_app/migrations}/__init__.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/examples/todo/todo_app/models.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/examples/todo/todo_app/slack_listeners.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/manage.py +0 -0
- {django_slack_tools-0.2.2/tests/slack_messages → django_slack_tools-0.3.0/testproj}/__init__.py +0 -0
- {django_slack_tools-0.2.2/tests/slack_messages/admin → django_slack_tools-0.3.0/testproj/config}/__init__.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/testproj/config/slack_app.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/testproj/config/urls.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/testproj/config/wsgi.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/testproj/manage.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/testproj/templates/greet.xml +0 -0
- {django_slack_tools-0.2.2/tests/slack_messages/backends → django_slack_tools-0.3.0/tests}/__init__.py +0 -0
- {django_slack_tools-0.2.2/tests/slack_messages/models → django_slack_tools-0.3.0/tests/slack_messages}/__init__.py +0 -0
- {django_slack_tools-0.2.2/tests/utils → django_slack_tools-0.3.0/tests/slack_messages/admin}/__init__.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/tests/slack_messages/admin/test_messaging_policy.py +0 -0
- {django_slack_tools-0.2.2/tests/utils/slack → django_slack_tools-0.3.0/tests/slack_messages/backends}/__init__.py +0 -0
- {django_slack_tools-0.2.2/tests/utils/template → django_slack_tools-0.3.0/tests/slack_messages/message_templates}/__init__.py +0 -0
- /django_slack_tools-0.2.2/testproj/templates/001-template.xml → /django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/complex-template-with-context.xml +0 -0
- /django_slack_tools-0.2.2/tests/utils/template/testcases/001.json → /django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/complex-template.json +0 -0
- /django_slack_tools-0.2.2/tests/utils/template/testcases/001.png → /django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/complex-template.png +0 -0
- /django_slack_tools-0.2.2/tests/utils/template/testcases/001.xml → /django_slack_tools-0.3.0/tests/slack_messages/message_templates/testcases/complex-template.xml +0 -0
- /django_slack_tools-0.2.2/tests/utils/template/test_base.py → /django_slack_tools-0.3.0/tests/slack_messages/middlewares/__init__.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/tests/slack_messages/models/test_message_recipient.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/tests/slack_messages/models/test_messaging_policy.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/tests/slack_messages/test_apps.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/tests/test_views.py +0 -0
- {django_slack_tools-0.2.2/tests/utils → django_slack_tools-0.3.0/tests/utils/django}/test_model_mixins.py +0 -0
- {django_slack_tools-0.2.2 → django_slack_tools-0.3.0}/tests/utils/slack/test_misc.py +0 -0
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"ghcr.io/devcontainers/features/docker-in-docker:2": {}
|
|
10
10
|
},
|
|
11
11
|
"onCreateCommand": "./.devcontainer/onCreateCommand.sh",
|
|
12
|
-
"
|
|
12
|
+
"postAttachCommand": "make install",
|
|
13
13
|
"customizations": {
|
|
14
14
|
"vscode": {
|
|
15
15
|
"extensions": [
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
|
2
2
|
version: 2
|
|
3
|
+
enable-beta-ecosystems: true
|
|
3
4
|
updates:
|
|
4
5
|
- package-ecosystem: github-actions
|
|
5
6
|
directory: /
|
|
6
7
|
schedule:
|
|
7
8
|
interval: monthly
|
|
8
9
|
|
|
9
|
-
- package-ecosystem:
|
|
10
|
+
- package-ecosystem: uv
|
|
10
11
|
directory: /
|
|
11
12
|
schedule:
|
|
12
13
|
interval: monthly
|
|
@@ -8,6 +8,9 @@ on:
|
|
|
8
8
|
|
|
9
9
|
permissions: read-all
|
|
10
10
|
|
|
11
|
+
env:
|
|
12
|
+
UV_FROZEN: 1
|
|
13
|
+
|
|
11
14
|
jobs:
|
|
12
15
|
lint:
|
|
13
16
|
name: Lint
|
|
@@ -17,13 +20,13 @@ jobs:
|
|
|
17
20
|
uses: actions/checkout@v4
|
|
18
21
|
|
|
19
22
|
- name: Set up uv
|
|
20
|
-
uses: astral-sh/setup-uv@
|
|
23
|
+
uses: astral-sh/setup-uv@v5
|
|
21
24
|
with:
|
|
22
25
|
version: latest
|
|
23
26
|
enable-cache: true
|
|
24
27
|
|
|
25
28
|
- name: Install deps
|
|
26
|
-
run: uv sync --
|
|
29
|
+
run: uv sync --all-extras
|
|
27
30
|
|
|
28
31
|
- uses: pre-commit/action@v3.0.1
|
|
29
32
|
env:
|
|
@@ -35,15 +38,15 @@ jobs:
|
|
|
35
38
|
test:
|
|
36
39
|
name: Test (Python ${{ matrix.python-version }}, Django ${{ matrix.django-version }})
|
|
37
40
|
runs-on: ubuntu-latest
|
|
41
|
+
permissions:
|
|
42
|
+
contents: read
|
|
43
|
+
id-token: write
|
|
38
44
|
strategy:
|
|
39
45
|
fail-fast: false
|
|
40
46
|
matrix:
|
|
41
47
|
python-version: ["3.10", "3.11", "3.12"]
|
|
42
48
|
django-version: ["4.2", "5.0", "5.1"]
|
|
43
49
|
include:
|
|
44
|
-
- python-version: "3.8"
|
|
45
|
-
django-version: "4.2"
|
|
46
|
-
|
|
47
50
|
- python-version: "3.9"
|
|
48
51
|
django-version: "4.2"
|
|
49
52
|
|
|
@@ -55,7 +58,7 @@ jobs:
|
|
|
55
58
|
uses: actions/checkout@v4
|
|
56
59
|
|
|
57
60
|
- name: Set up uv
|
|
58
|
-
uses: astral-sh/setup-uv@
|
|
61
|
+
uses: astral-sh/setup-uv@v5
|
|
59
62
|
with:
|
|
60
63
|
version: latest
|
|
61
64
|
enable-cache: true
|
|
@@ -64,31 +67,32 @@ jobs:
|
|
|
64
67
|
run: uv python pin "${{ matrix.python-version }}"
|
|
65
68
|
|
|
66
69
|
- name: Install deps
|
|
67
|
-
run: uv sync --
|
|
70
|
+
run: uv sync --all-extras
|
|
68
71
|
|
|
69
72
|
- name: Install Django
|
|
70
73
|
run: uv pip install Django=="${{ matrix.django-version }}.*"
|
|
71
74
|
|
|
72
75
|
- name: Run tests
|
|
73
|
-
run: uv run
|
|
76
|
+
run: uv run nox
|
|
74
77
|
|
|
75
78
|
- name: Upload test results to Codecov
|
|
76
|
-
uses: codecov/
|
|
79
|
+
uses: codecov/codecov-action@v5
|
|
77
80
|
with:
|
|
78
|
-
|
|
81
|
+
use_oidc: true
|
|
79
82
|
fail_ci_if_error: false
|
|
83
|
+
report_type: test_results
|
|
80
84
|
files: junit.xml
|
|
81
85
|
flags: >-
|
|
82
86
|
python-${{ matrix.python-version }},
|
|
83
87
|
django-${{ matrix.django-version }}
|
|
84
88
|
|
|
85
89
|
- name: Upload coverage report
|
|
86
|
-
uses: codecov/codecov-action@
|
|
90
|
+
uses: codecov/codecov-action@v5
|
|
87
91
|
env:
|
|
88
92
|
PYTHON: ${{ matrix.python-version }}
|
|
89
93
|
DJANGO: ${{ matrix.django-version }}
|
|
90
94
|
with:
|
|
91
|
-
|
|
95
|
+
use_oidc: true
|
|
92
96
|
fail_ci_if_error: false
|
|
93
97
|
files: coverage.xml
|
|
94
98
|
env_vars: PYTHON,DJANGO
|
|
@@ -17,7 +17,7 @@ jobs:
|
|
|
17
17
|
uses: actions/checkout@v4
|
|
18
18
|
|
|
19
19
|
- name: Set up uv
|
|
20
|
-
uses: astral-sh/setup-uv@
|
|
20
|
+
uses: astral-sh/setup-uv@v5
|
|
21
21
|
with:
|
|
22
22
|
version: latest
|
|
23
23
|
enable-cache: true
|
|
@@ -47,6 +47,7 @@ jobs:
|
|
|
47
47
|
- release
|
|
48
48
|
permissions:
|
|
49
49
|
id-token: write
|
|
50
|
+
environment: pypi
|
|
50
51
|
steps:
|
|
51
52
|
- name: Retrieve release distributions
|
|
52
53
|
uses: actions/download-artifact@v4
|
|
@@ -11,7 +11,12 @@ repos:
|
|
|
11
11
|
rev: v0.3.0
|
|
12
12
|
hooks:
|
|
13
13
|
- id: check-directory-structure
|
|
14
|
-
args:
|
|
14
|
+
args:
|
|
15
|
+
- --source
|
|
16
|
+
- django_slack_tools
|
|
17
|
+
- --extend-exclude
|
|
18
|
+
- '**/migrations/*.py'
|
|
19
|
+
- '**/errors.py'
|
|
15
20
|
|
|
16
21
|
- repo: local
|
|
17
22
|
hooks:
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.9
|
|
@@ -38,6 +38,14 @@ serve-docs: ## Serve dev documents
|
|
|
38
38
|
--dev-addr $$([ ! -z "$${CONTAINER:-}" ] && echo '0.0.0.0:8000' || echo '127.0.0.1:8000')
|
|
39
39
|
.PHONY: serve-docs
|
|
40
40
|
|
|
41
|
+
makemessages: ## Update translation files
|
|
42
|
+
uv run python manage.py makemessages --all --ignore 'examples/*' --no-obsolete
|
|
43
|
+
.PHONY: makemessages
|
|
44
|
+
|
|
45
|
+
compilemessages: ## Compile translation files
|
|
46
|
+
uv run python manage.py compilemessages --ignore 'examples/*'
|
|
47
|
+
.PHONY: compilemessages
|
|
48
|
+
|
|
41
49
|
|
|
42
50
|
# =============================================================================
|
|
43
51
|
# CI
|
|
@@ -1,16 +1,19 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: django-slack-tools
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Little helpers working with Slack bot 🤖 in Django.
|
|
5
5
|
Author-email: Yuchan Lee <lasuillard@gmail.com>
|
|
6
|
-
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Requires-Python: <4.0,>=3.9
|
|
7
9
|
Requires-Dist: django<5.2,>=4.2
|
|
10
|
+
Requires-Dist: pydantic<3,>=2
|
|
8
11
|
Requires-Dist: slack-bolt<2,>=1
|
|
9
12
|
Requires-Dist: xmltodict<1,>=0.14.1
|
|
10
13
|
Provides-Extra: celery
|
|
11
14
|
Requires-Dist: celery<6,>=5; extra == 'celery'
|
|
12
15
|
Provides-Extra: dev
|
|
13
|
-
Requires-Dist: django-debug-toolbar
|
|
16
|
+
Requires-Dist: django-debug-toolbar<6.0,>=4.4; extra == 'dev'
|
|
14
17
|
Requires-Dist: django-extensions~=3.2; extra == 'dev'
|
|
15
18
|
Requires-Dist: django-stubs[compatible-mypy]~=5.1; extra == 'dev'
|
|
16
19
|
Requires-Dist: ipykernel~=6.27; extra == 'dev'
|
|
@@ -23,8 +26,9 @@ Provides-Extra: test
|
|
|
23
26
|
Requires-Dist: coverage~=7.3; extra == 'test'
|
|
24
27
|
Requires-Dist: django-coverage-plugin~=3.1; extra == 'test'
|
|
25
28
|
Requires-Dist: factory-boy~=3.3; extra == 'test'
|
|
26
|
-
Requires-Dist: faker
|
|
27
|
-
Requires-Dist:
|
|
29
|
+
Requires-Dist: faker<37.0,>=30.3; extra == 'test'
|
|
30
|
+
Requires-Dist: nox<2025.3.0,>=2024.10.9; extra == 'test'
|
|
31
|
+
Requires-Dist: pytest-cov<7,>=5; extra == 'test'
|
|
28
32
|
Requires-Dist: pytest-django~=4.9; extra == 'test'
|
|
29
33
|
Requires-Dist: pytest-sugar~=1.0; extra == 'test'
|
|
30
34
|
Requires-Dist: pytest-xdist~=3.6; extra == 'test'
|
|
@@ -66,61 +70,9 @@ And more in future roadmap...
|
|
|
66
70
|
|
|
67
71
|
Currently it is focused on messaging features. In future, hoping to bring more helpful features across Slack Bot ecosystem, such as event subscriptions, modals, bot interactions, etc.
|
|
68
72
|
|
|
69
|
-
##
|
|
73
|
+
## 🗞️ Documentation
|
|
70
74
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
> [!WARNING]
|
|
74
|
-
> 0.x versions are for development. Breaking changes can be made at any time. If gonna use this package, recommend to pin down the version.
|
|
75
|
-
|
|
76
|
-
Install the package:
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
$ pip install django-slack-tools
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
Add the app to the your Django settings:
|
|
83
|
-
|
|
84
|
-
```python
|
|
85
|
-
INSTALLED_APPS = [
|
|
86
|
-
...
|
|
87
|
-
"django.contrib.messages", # Used in admin
|
|
88
|
-
"django_slack_tools.slack_messages",
|
|
89
|
-
...
|
|
90
|
-
]
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
Add configuration for application:
|
|
94
|
-
|
|
95
|
-
```python
|
|
96
|
-
DJANGO_SLACK_TOOLS = {
|
|
97
|
-
# Module path to Slack Bolt application or callable returns the app
|
|
98
|
-
"SLACK_APP": "path.to.your.slack.app",
|
|
99
|
-
|
|
100
|
-
# Messaging backend configuration
|
|
101
|
-
"BACKEND": {
|
|
102
|
-
"NAME": "django_slack_tools.slack_messages.backends.SlackBackend",
|
|
103
|
-
"OPTIONS": {
|
|
104
|
-
# TODO(#44): Reasonable defaults to reduce some duplicates
|
|
105
|
-
"slack_app": "path.to.your.slack.app",
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
Then, run the database migration and send messages:
|
|
112
|
-
|
|
113
|
-
```python
|
|
114
|
-
from django_slack_tools.slack_messages.message import slack_message
|
|
115
|
-
|
|
116
|
-
message = slack_message(
|
|
117
|
-
"I like threading",
|
|
118
|
-
channel="id-of-channel",
|
|
119
|
-
header={"reply_broadcast": True},
|
|
120
|
-
)
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
Please check the [documentation](https://lasuillard.github.io/django-slack-tools/) for more about details.
|
|
75
|
+
Please check the [documentation](https://lasuillard.github.io/django-slack-tools/) for more details.
|
|
124
76
|
|
|
125
77
|
## 💖 Contributing
|
|
126
78
|
|
|
@@ -33,61 +33,9 @@ And more in future roadmap...
|
|
|
33
33
|
|
|
34
34
|
Currently it is focused on messaging features. In future, hoping to bring more helpful features across Slack Bot ecosystem, such as event subscriptions, modals, bot interactions, etc.
|
|
35
35
|
|
|
36
|
-
##
|
|
36
|
+
## 🗞️ Documentation
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
> [!WARNING]
|
|
41
|
-
> 0.x versions are for development. Breaking changes can be made at any time. If gonna use this package, recommend to pin down the version.
|
|
42
|
-
|
|
43
|
-
Install the package:
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
$ pip install django-slack-tools
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
Add the app to the your Django settings:
|
|
50
|
-
|
|
51
|
-
```python
|
|
52
|
-
INSTALLED_APPS = [
|
|
53
|
-
...
|
|
54
|
-
"django.contrib.messages", # Used in admin
|
|
55
|
-
"django_slack_tools.slack_messages",
|
|
56
|
-
...
|
|
57
|
-
]
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
Add configuration for application:
|
|
61
|
-
|
|
62
|
-
```python
|
|
63
|
-
DJANGO_SLACK_TOOLS = {
|
|
64
|
-
# Module path to Slack Bolt application or callable returns the app
|
|
65
|
-
"SLACK_APP": "path.to.your.slack.app",
|
|
66
|
-
|
|
67
|
-
# Messaging backend configuration
|
|
68
|
-
"BACKEND": {
|
|
69
|
-
"NAME": "django_slack_tools.slack_messages.backends.SlackBackend",
|
|
70
|
-
"OPTIONS": {
|
|
71
|
-
# TODO(#44): Reasonable defaults to reduce some duplicates
|
|
72
|
-
"slack_app": "path.to.your.slack.app",
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
Then, run the database migration and send messages:
|
|
79
|
-
|
|
80
|
-
```python
|
|
81
|
-
from django_slack_tools.slack_messages.message import slack_message
|
|
82
|
-
|
|
83
|
-
message = slack_message(
|
|
84
|
-
"I like threading",
|
|
85
|
-
channel="id-of-channel",
|
|
86
|
-
header={"reply_broadcast": True},
|
|
87
|
-
)
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
Please check the [documentation](https://lasuillard.github.io/django-slack-tools/) for more about details.
|
|
38
|
+
Please check the [documentation](https://lasuillard.github.io/django-slack-tools/) for more details.
|
|
91
39
|
|
|
92
40
|
## 💖 Contributing
|
|
93
41
|
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"""Application settings."""
|
|
2
|
+
# flake8: noqa: UP007
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from logging import getLogger
|
|
7
|
+
from typing import TYPE_CHECKING, TypedDict
|
|
8
|
+
|
|
9
|
+
from django.conf import settings
|
|
10
|
+
from django.core.exceptions import ImproperlyConfigured
|
|
11
|
+
from django.utils.module_loading import import_string
|
|
12
|
+
from slack_bolt import App
|
|
13
|
+
from typing_extensions import NotRequired, Self
|
|
14
|
+
|
|
15
|
+
from django_slack_tools.utils.import_helper import LazyInitSpec, lazy_init
|
|
16
|
+
|
|
17
|
+
if TYPE_CHECKING:
|
|
18
|
+
from django_slack_tools.slack_messages.messenger import Messenger
|
|
19
|
+
|
|
20
|
+
logger = getLogger(__name__)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class SettingsDict(TypedDict):
|
|
24
|
+
"""Dictionary input for app settings."""
|
|
25
|
+
|
|
26
|
+
slack_app: str
|
|
27
|
+
messengers: NotRequired[dict[str, LazyInitSpec]]
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class AppSettings:
|
|
31
|
+
"""Application settings."""
|
|
32
|
+
|
|
33
|
+
slack_app: App
|
|
34
|
+
messengers: dict[str, Messenger]
|
|
35
|
+
|
|
36
|
+
def __init__(self, slack_app: App, messengers: dict[str, Messenger]) -> None: # noqa: D107
|
|
37
|
+
if not isinstance(slack_app, App):
|
|
38
|
+
msg = f"Expected {App!s} instance, got {type(slack_app)}"
|
|
39
|
+
raise TypeError(msg)
|
|
40
|
+
|
|
41
|
+
self.slack_app = slack_app
|
|
42
|
+
self.messengers = messengers
|
|
43
|
+
|
|
44
|
+
@classmethod
|
|
45
|
+
def from_dict(cls, settings_dict: SettingsDict) -> Self:
|
|
46
|
+
"""Initialize settings from a dictionary."""
|
|
47
|
+
try:
|
|
48
|
+
slack_app = import_string(settings_dict["slack_app"])
|
|
49
|
+
messengers = {
|
|
50
|
+
name: cls._create_messenger(spec) for name, spec in settings_dict.get("messengers", {}).items()
|
|
51
|
+
}
|
|
52
|
+
return cls(
|
|
53
|
+
slack_app=slack_app,
|
|
54
|
+
messengers=messengers,
|
|
55
|
+
)
|
|
56
|
+
except Exception as err:
|
|
57
|
+
msg = f"Couldn't initialize app settings: {err!s}"
|
|
58
|
+
raise ImproperlyConfigured(msg) from err
|
|
59
|
+
|
|
60
|
+
@classmethod
|
|
61
|
+
def _create_messenger(cls, spec: LazyInitSpec) -> Messenger:
|
|
62
|
+
class_ = import_string(spec["class"])
|
|
63
|
+
args, kwargs = spec.get("args", ()), spec.get("kwargs", {})
|
|
64
|
+
|
|
65
|
+
# Lazy-init all the things
|
|
66
|
+
kwargs = kwargs.copy()
|
|
67
|
+
kwargs["template_loaders"] = [lazy_init(tl) for tl in kwargs["template_loaders"]]
|
|
68
|
+
kwargs["middlewares"] = [lazy_init(tl) for tl in kwargs["middlewares"]]
|
|
69
|
+
kwargs["messaging_backend"] = lazy_init(kwargs["messaging_backend"])
|
|
70
|
+
|
|
71
|
+
# Create the messenger
|
|
72
|
+
return class_(*args, **kwargs) # type: ignore[no-any-return]
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def get_settings_from_django(settings_key: str = "DJANGO_SLACK_TOOLS") -> AppSettings:
|
|
76
|
+
"""Get application settings."""
|
|
77
|
+
django_settings: SettingsDict = getattr(settings, settings_key)
|
|
78
|
+
return AppSettings.from_dict(django_settings or {})
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
app_settings = get_settings_from_django()
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def get_messenger(name: str | None = None) -> Messenger:
|
|
85
|
+
"""Get a messenger instance by name."""
|
|
86
|
+
name = name or "default"
|
|
87
|
+
return app_settings.messengers[name]
|