django-slack-tools 0.2.2__tar.gz → 0.3.1__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.
Files changed (230) hide show
  1. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/.devcontainer/devcontainer.json +1 -1
  2. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/.github/dependabot.yaml +2 -1
  3. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/.github/workflows/ci.yaml +16 -12
  4. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/.github/workflows/docs.yaml +1 -1
  5. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/.github/workflows/release.yaml +2 -1
  6. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/.pre-commit-config.yaml +6 -1
  7. django_slack_tools-0.3.1/.python-version +1 -0
  8. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/.vscode/settings.json +1 -0
  9. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/Makefile +8 -0
  10. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/PKG-INFO +12 -60
  11. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/README.md +2 -54
  12. django_slack_tools-0.3.1/django_slack_tools/app_settings.py +87 -0
  13. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/locale/ko_KR/LC_MESSAGES/django.po +150 -186
  14. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/slack_messages/admin/message.py +1 -52
  15. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/slack_messages/admin/message_recipient.py +2 -2
  16. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/slack_messages/admin/messaging_policy.py +5 -5
  17. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/slack_messages/backends/__init__.py +3 -3
  18. django_slack_tools-0.3.1/django_slack_tools/slack_messages/backends/base.py +65 -0
  19. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/slack_messages/backends/dummy.py +0 -12
  20. django_slack_tools-0.2.2/django_slack_tools/slack_messages/backends/logging.py → django_slack_tools-0.3.1/django_slack_tools/slack_messages/backends/logging_.py +0 -6
  21. django_slack_tools-0.3.1/django_slack_tools/slack_messages/backends/slack.py +88 -0
  22. django_slack_tools-0.3.1/django_slack_tools/slack_messages/message_templates/__init__.py +5 -0
  23. django_slack_tools-0.3.1/django_slack_tools/slack_messages/message_templates/base.py +17 -0
  24. {django_slack_tools-0.2.2/django_slack_tools/utils/template → django_slack_tools-0.3.1/django_slack_tools/slack_messages/message_templates}/django.py +30 -25
  25. django_slack_tools-0.3.1/django_slack_tools/slack_messages/message_templates/python.py +38 -0
  26. django_slack_tools-0.3.1/django_slack_tools/slack_messages/messenger.py +158 -0
  27. django_slack_tools-0.3.1/django_slack_tools/slack_messages/middlewares/__init__.py +4 -0
  28. django_slack_tools-0.3.1/django_slack_tools/slack_messages/middlewares/base.py +34 -0
  29. django_slack_tools-0.3.1/django_slack_tools/slack_messages/middlewares/django.py +218 -0
  30. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/slack_messages/migrations/0001_initial.py +4 -4
  31. django_slack_tools-0.3.1/django_slack_tools/slack_messages/migrations/0005_alter_slackmessagingpolicy_template_type.py +46 -0
  32. django_slack_tools-0.3.1/django_slack_tools/slack_messages/migrations/0006_alter_slackmessage_id.py +26 -0
  33. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/slack_messages/models/mention.py +1 -1
  34. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/slack_messages/models/message.py +5 -2
  35. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/slack_messages/models/message_recipient.py +1 -1
  36. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/slack_messages/models/messaging_policy.py +4 -4
  37. django_slack_tools-0.3.1/django_slack_tools/slack_messages/request.py +91 -0
  38. django_slack_tools-0.3.1/django_slack_tools/slack_messages/response.py +21 -0
  39. django_slack_tools-0.3.1/django_slack_tools/slack_messages/shortcuts.py +78 -0
  40. django_slack_tools-0.3.1/django_slack_tools/slack_messages/tasks.py +63 -0
  41. django_slack_tools-0.3.1/django_slack_tools/slack_messages/template_loaders/__init__.py +11 -0
  42. django_slack_tools-0.3.1/django_slack_tools/slack_messages/template_loaders/base.py +16 -0
  43. django_slack_tools-0.3.1/django_slack_tools/slack_messages/template_loaders/django.py +74 -0
  44. django_slack_tools-0.3.1/django_slack_tools/slack_messages/template_loaders/errors.py +9 -0
  45. django_slack_tools-0.2.2/django_slack_tools/utils/slack/django.py → django_slack_tools-0.3.1/django_slack_tools/slack_messages/validators.py +1 -1
  46. django_slack_tools-0.3.1/django_slack_tools/utils/import_helper.py +37 -0
  47. django_slack_tools-0.3.1/django_slack_tools/utils/repr.py +10 -0
  48. django_slack_tools-0.3.1/django_slack_tools/utils/slack/__init__.py +3 -0
  49. django_slack_tools-0.3.1/docs/api-references/slack-messages/django-integration.md +15 -0
  50. django_slack_tools-0.3.1/docs/api-references/slack-messages/messenger-framework.md +19 -0
  51. django_slack_tools-0.3.1/docs/api-references/slack-messages/sending-messages.md +11 -0
  52. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/docs/index.md +1 -1
  53. django_slack_tools-0.3.1/docs/quick-start.md +74 -0
  54. django_slack_tools-0.3.1/examples/todo/.env.example +2 -0
  55. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/examples/todo/Makefile +6 -7
  56. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/examples/todo/README.md +29 -16
  57. django_slack_tools-0.3.1/examples/todo/docs/messages.png +0 -0
  58. django_slack_tools-0.3.1/examples/todo/docs/slack-app-home.png +0 -0
  59. django_slack_tools-0.3.1/examples/todo/docs/slash-command.png +0 -0
  60. django_slack_tools-0.3.1/examples/todo/dump.json +60 -0
  61. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/examples/todo/pyproject.toml +1 -0
  62. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/examples/todo/todo/settings.py +31 -7
  63. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/examples/todo/todo_app/services.py +3 -3
  64. django_slack_tools-0.3.1/examples/todo/todo_app/signals.py +52 -0
  65. django_slack_tools-0.3.1/examples/todo/todo_app/templates/todo-created.xml +7 -0
  66. django_slack_tools-0.3.1/examples/todo/todo_app/templates/todo-updated.xml +26 -0
  67. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/examples/todo/uv.lock +28 -4
  68. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/mkdocs.yaml +4 -5
  69. django_slack_tools-0.3.1/noxfile.py +29 -0
  70. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/pyproject.toml +19 -17
  71. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/testproj/config/settings.py +21 -5
  72. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/tests/_factories.py +1 -1
  73. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/tests/_helpers.py +15 -0
  74. django_slack_tools-0.3.1/tests/conftest.py +57 -0
  75. django_slack_tools-0.3.1/tests/slack_messages/_factories.py +93 -0
  76. django_slack_tools-0.3.1/tests/slack_messages/_helpers.py +71 -0
  77. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/tests/slack_messages/admin/test_mention.py +3 -1
  78. django_slack_tools-0.3.1/tests/slack_messages/admin/test_message.py +57 -0
  79. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/tests/slack_messages/admin/test_message_recipient.py +3 -1
  80. django_slack_tools-0.3.1/tests/slack_messages/backends/test_base.py +1 -0
  81. django_slack_tools-0.3.1/tests/slack_messages/backends/test_dummy.py +44 -0
  82. django_slack_tools-0.3.1/tests/slack_messages/backends/test_logging_.py +44 -0
  83. django_slack_tools-0.3.1/tests/slack_messages/backends/test_slack.py +211 -0
  84. django_slack_tools-0.3.1/tests/slack_messages/message_templates/test_base.py +1 -0
  85. {django_slack_tools-0.2.2/tests/utils/template → django_slack_tools-0.3.1/tests/slack_messages/message_templates}/test_django.py +22 -7
  86. django_slack_tools-0.2.2/tests/utils/template/test_dict.py → django_slack_tools-0.3.1/tests/slack_messages/message_templates/test_python.py +3 -3
  87. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/approval.json +48 -0
  88. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/approval.png +0 -0
  89. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/approval.xml +35 -0
  90. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/bullet-list.json +52 -0
  91. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/bullet-list.png +0 -0
  92. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/bullet-list.xml +26 -0
  93. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/newsletter.json +172 -0
  94. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/newsletter.png +0 -0
  95. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/newsletter.xml +85 -0
  96. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/notification.json +106 -0
  97. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/notification.png +0 -0
  98. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/notification.xml +61 -0
  99. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/onboarding-1.json +62 -0
  100. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/onboarding-1.png +0 -0
  101. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/onboarding-1.xml +42 -0
  102. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/onboarding-2.json +46 -0
  103. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/onboarding-2.png +0 -0
  104. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/onboarding-2.xml +29 -0
  105. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/poll.json +133 -0
  106. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/poll.png +0 -0
  107. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/poll.xml +58 -0
  108. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/search-results-1.json +155 -0
  109. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/search-results-1.png +0 -0
  110. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/search-results-1.xml +76 -0
  111. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/search-results-2.json +236 -0
  112. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/search-results-2.png +0 -0
  113. django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/search-results-2.xml +122 -0
  114. django_slack_tools-0.3.1/tests/slack_messages/middlewares/test_base.py +0 -0
  115. django_slack_tools-0.3.1/tests/slack_messages/middlewares/test_django.py +442 -0
  116. django_slack_tools-0.3.1/tests/slack_messages/models/__init__.py +0 -0
  117. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/tests/slack_messages/models/_factories.py +16 -7
  118. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/tests/slack_messages/models/test_mention.py +14 -14
  119. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/tests/slack_messages/models/test_message.py +4 -4
  120. django_slack_tools-0.3.1/tests/slack_messages/template_loaders/__init__.py +0 -0
  121. django_slack_tools-0.3.1/tests/slack_messages/template_loaders/test_base.py +1 -0
  122. django_slack_tools-0.3.1/tests/slack_messages/template_loaders/test_django.py +130 -0
  123. django_slack_tools-0.3.1/tests/slack_messages/test_messenger.py +214 -0
  124. django_slack_tools-0.2.2/tests/utils/slack/test_message.py → django_slack_tools-0.3.1/tests/slack_messages/test_request.py +11 -4
  125. django_slack_tools-0.3.1/tests/slack_messages/test_response.py +6 -0
  126. django_slack_tools-0.3.1/tests/slack_messages/test_shortcuts.py +145 -0
  127. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/tests/slack_messages/test_tasks.py +25 -38
  128. django_slack_tools-0.3.1/tests/slack_messages/test_validators.py +30 -0
  129. django_slack_tools-0.3.1/tests/test_app_settings.py +155 -0
  130. django_slack_tools-0.3.1/tests/utils/__init__.py +0 -0
  131. django_slack_tools-0.3.1/tests/utils/django/__init__.py +0 -0
  132. {django_slack_tools-0.2.2/tests/utils → django_slack_tools-0.3.1/tests/utils/django}/test_widgets.py +1 -1
  133. django_slack_tools-0.3.1/tests/utils/slack/__init__.py +0 -0
  134. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/tests/utils/slack/test_django.py +4 -4
  135. django_slack_tools-0.3.1/tests/utils/test_import_helper.py +0 -0
  136. django_slack_tools-0.3.1/tests/utils/test_repr.py +1 -0
  137. django_slack_tools-0.3.1/uv.lock +2079 -0
  138. django_slack_tools-0.2.2/.python-version +0 -1
  139. django_slack_tools-0.2.2/django_slack_tools/__init__.py +0 -1
  140. django_slack_tools-0.2.2/django_slack_tools/app_settings.py +0 -123
  141. django_slack_tools-0.2.2/django_slack_tools/slack_messages/backends/base.py +0 -229
  142. django_slack_tools-0.2.2/django_slack_tools/slack_messages/backends/slack.py +0 -142
  143. django_slack_tools-0.2.2/django_slack_tools/slack_messages/message.py +0 -110
  144. django_slack_tools-0.2.2/django_slack_tools/slack_messages/tasks.py +0 -112
  145. django_slack_tools-0.2.2/django_slack_tools/utils/slack/__init__.py +0 -11
  146. django_slack_tools-0.2.2/django_slack_tools/utils/slack/message.py +0 -93
  147. django_slack_tools-0.2.2/django_slack_tools/utils/template/__init__.py +0 -5
  148. django_slack_tools-0.2.2/django_slack_tools/utils/template/base.py +0 -17
  149. django_slack_tools-0.2.2/django_slack_tools/utils/template/dict.py +0 -52
  150. django_slack_tools-0.2.2/docs/api-references/slack-messages/messaging-backends.md +0 -3
  151. django_slack_tools-0.2.2/docs/api-references/slack-messages/models.md +0 -3
  152. django_slack_tools-0.2.2/docs/api-references/slack-messages/sending-messages.md +0 -3
  153. django_slack_tools-0.2.2/docs/tutorials/quick-start.md +0 -51
  154. django_slack_tools-0.2.2/examples/todo/todo_app/signals.py +0 -32
  155. django_slack_tools-0.2.2/tests/conftest.py +0 -24
  156. django_slack_tools-0.2.2/tests/slack_messages/_factories.py +0 -52
  157. django_slack_tools-0.2.2/tests/slack_messages/admin/test_message.py +0 -120
  158. django_slack_tools-0.2.2/tests/slack_messages/backends/test_base.py +0 -3
  159. django_slack_tools-0.2.2/tests/slack_messages/backends/test_dummy.py +0 -19
  160. django_slack_tools-0.2.2/tests/slack_messages/backends/test_logging.py +0 -19
  161. django_slack_tools-0.2.2/tests/slack_messages/backends/test_slack.py +0 -190
  162. django_slack_tools-0.2.2/tests/slack_messages/test_message.py +0 -233
  163. django_slack_tools-0.2.2/tests/test_app_settings.py +0 -130
  164. django_slack_tools-0.2.2/uv.lock +0 -1966
  165. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/.devcontainer/onCreateCommand.sh +0 -0
  166. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/.editorconfig +0 -0
  167. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/.gitattributes +0 -0
  168. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/.gitignore +0 -0
  169. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/.vscode/extensions.json +0 -0
  170. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/.vscode/launch.json +0 -0
  171. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/CONTRIBUTING.md +0 -0
  172. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/LICENSE +0 -0
  173. {django_slack_tools-0.2.2/django_slack_tools/slack_messages → django_slack_tools-0.3.1/django_slack_tools}/__init__.py +0 -0
  174. /django_slack_tools-0.2.2/django_slack_tools/slack_messages/migrations/__init__.py → /django_slack_tools-0.3.1/django_slack_tools/py.typed +0 -0
  175. {django_slack_tools-0.2.2/django_slack_tools/utils → django_slack_tools-0.3.1/django_slack_tools/slack_messages}/__init__.py +0 -0
  176. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/slack_messages/admin/__init__.py +0 -0
  177. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/slack_messages/admin/mention.py +0 -0
  178. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/slack_messages/apps.py +0 -0
  179. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/slack_messages/migrations/0002_default_policy.py +0 -0
  180. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/slack_messages/migrations/0003_default_recipient.py +0 -0
  181. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/slack_messages/migrations/0004_slackmessagingpolicy_template_type.py +0 -0
  182. {django_slack_tools-0.2.2/examples/todo/todo_app → django_slack_tools-0.3.1/django_slack_tools/slack_messages/migrations}/__init__.py +0 -0
  183. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/slack_messages/models/__init__.py +0 -0
  184. {django_slack_tools-0.2.2/examples/todo/todo_app/migrations → django_slack_tools-0.3.1/django_slack_tools/utils}/__init__.py +0 -0
  185. {django_slack_tools-0.2.2/testproj → django_slack_tools-0.3.1/django_slack_tools/utils/django}/__init__.py +0 -0
  186. {django_slack_tools-0.2.2/django_slack_tools/utils → django_slack_tools-0.3.1/django_slack_tools/utils/django}/model_mixins.py +0 -0
  187. {django_slack_tools-0.2.2/django_slack_tools/utils → django_slack_tools-0.3.1/django_slack_tools/utils/django}/widgets.py +0 -0
  188. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/utils/slack/misc.py +0 -0
  189. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/django_slack_tools/views.py +0 -0
  190. /django_slack_tools-0.2.2/docs/api-references/slack-messages/celery.md → /django_slack_tools-0.3.1/docs/api-references/slack-messages/celery-support.md +0 -0
  191. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/examples/todo/.python-version +0 -0
  192. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/examples/todo/docker-compose.yaml +0 -0
  193. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/examples/todo/manage.py +0 -0
  194. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/examples/todo/todo/__init__.py +0 -0
  195. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/examples/todo/todo/celery.py +0 -0
  196. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/examples/todo/todo/slack_app.py +0 -0
  197. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/examples/todo/todo/urls.py +0 -0
  198. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/examples/todo/todo/wsgi.py +0 -0
  199. {django_slack_tools-0.2.2/testproj/config → django_slack_tools-0.3.1/examples/todo/todo_app}/__init__.py +0 -0
  200. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/examples/todo/todo_app/admin.py +0 -0
  201. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/examples/todo/todo_app/apps.py +0 -0
  202. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/examples/todo/todo_app/migrations/0001_initial.py +0 -0
  203. {django_slack_tools-0.2.2/tests → django_slack_tools-0.3.1/examples/todo/todo_app/migrations}/__init__.py +0 -0
  204. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/examples/todo/todo_app/models.py +0 -0
  205. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/examples/todo/todo_app/slack_listeners.py +0 -0
  206. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/manage.py +0 -0
  207. {django_slack_tools-0.2.2/tests/slack_messages → django_slack_tools-0.3.1/testproj}/__init__.py +0 -0
  208. {django_slack_tools-0.2.2/tests/slack_messages/admin → django_slack_tools-0.3.1/testproj/config}/__init__.py +0 -0
  209. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/testproj/config/slack_app.py +0 -0
  210. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/testproj/config/urls.py +0 -0
  211. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/testproj/config/wsgi.py +0 -0
  212. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/testproj/manage.py +0 -0
  213. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/testproj/templates/greet.xml +0 -0
  214. {django_slack_tools-0.2.2/tests/slack_messages/backends → django_slack_tools-0.3.1/tests}/__init__.py +0 -0
  215. {django_slack_tools-0.2.2/tests/slack_messages/models → django_slack_tools-0.3.1/tests/slack_messages}/__init__.py +0 -0
  216. {django_slack_tools-0.2.2/tests/utils → django_slack_tools-0.3.1/tests/slack_messages/admin}/__init__.py +0 -0
  217. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/tests/slack_messages/admin/test_messaging_policy.py +0 -0
  218. {django_slack_tools-0.2.2/tests/utils/slack → django_slack_tools-0.3.1/tests/slack_messages/backends}/__init__.py +0 -0
  219. {django_slack_tools-0.2.2/tests/utils/template → django_slack_tools-0.3.1/tests/slack_messages/message_templates}/__init__.py +0 -0
  220. /django_slack_tools-0.2.2/testproj/templates/001-template.xml → /django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/complex-template-with-context.xml +0 -0
  221. /django_slack_tools-0.2.2/tests/utils/template/testcases/001.json → /django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/complex-template.json +0 -0
  222. /django_slack_tools-0.2.2/tests/utils/template/testcases/001.png → /django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/complex-template.png +0 -0
  223. /django_slack_tools-0.2.2/tests/utils/template/testcases/001.xml → /django_slack_tools-0.3.1/tests/slack_messages/message_templates/testcases/complex-template.xml +0 -0
  224. /django_slack_tools-0.2.2/tests/utils/template/test_base.py → /django_slack_tools-0.3.1/tests/slack_messages/middlewares/__init__.py +0 -0
  225. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/tests/slack_messages/models/test_message_recipient.py +0 -0
  226. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/tests/slack_messages/models/test_messaging_policy.py +0 -0
  227. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/tests/slack_messages/test_apps.py +0 -0
  228. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/tests/test_views.py +0 -0
  229. {django_slack_tools-0.2.2/tests/utils → django_slack_tools-0.3.1/tests/utils/django}/test_model_mixins.py +0 -0
  230. {django_slack_tools-0.2.2 → django_slack_tools-0.3.1}/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
- "updateContentCommand": "make install",
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: pip
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@v3
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 --frozen --all-extras
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@v3
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 --frozen --all-extras
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 --frozen pytest
76
+ run: uv run nox
74
77
 
75
78
  - name: Upload test results to Codecov
76
- uses: codecov/test-results-action@v1
79
+ uses: codecov/codecov-action@v5
77
80
  with:
78
- token: ${{ secrets.CODECOV_TOKEN }}
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@v4
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
- token: ${{ secrets.CODECOV_TOKEN }}
95
+ use_oidc: true
92
96
  fail_ci_if_error: false
93
97
  files: coverage.xml
94
98
  env_vars: PYTHON,DJANGO
@@ -15,7 +15,7 @@ jobs:
15
15
  uses: actions/checkout@v4
16
16
 
17
17
  - name: Set up uv
18
- uses: astral-sh/setup-uv@v3
18
+ uses: astral-sh/setup-uv@v5
19
19
  with:
20
20
  version: latest
21
21
  enable-cache: true
@@ -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@v3
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: [--source, django_slack_tools, --extend-exclude, '**/migrations/*.py']
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
@@ -42,6 +42,7 @@
42
42
  "python.testing.pytestEnabled": true,
43
43
  "python.testing.pytestArgs": [
44
44
  "--no-cov", // https://code.visualstudio.com/docs/python/testing#_pytest-configuration-settings
45
+ "-vv"
45
46
  ],
46
47
  "autoDocstring.docstringFormat": "google-notypes"
47
48
  }
@@ -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.3
1
+ Metadata-Version: 2.4
2
2
  Name: django-slack-tools
3
- Version: 0.2.2
3
+ Version: 0.3.1
4
4
  Summary: Little helpers working with Slack bot 🤖 in Django.
5
5
  Author-email: Yuchan Lee <lasuillard@gmail.com>
6
- Requires-Python: <4.0,>=3.8
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~=4.4; extra == 'dev'
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~=30.3; extra == 'test'
27
- Requires-Dist: pytest-cov~=5.0; extra == 'test'
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
- ## 🚀 Installation
73
+ ## 🗞️ Documentation
70
74
 
71
- **django-slack-tools** supports Python 3.8+ and Django 4.2+. Supports for each deps will be dropped as soon as the ends of security updates.
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
- ## 🚀 Installation
36
+ ## 🗞️ Documentation
37
37
 
38
- **django-slack-tools** supports Python 3.8+ and Django 4.2+. Supports for each deps will be dropped as soon as the ends of security updates.
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]