argus-server 2.4.0__tar.gz → 2.6.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.
Files changed (587) hide show
  1. {argus_server-2.4.0 → argus_server-2.6.0}/CHANGELOG.md +58 -1
  2. {argus_server-2.4.0 → argus_server-2.6.0}/NOTES.md +28 -0
  3. {argus_server-2.4.0 → argus_server-2.6.0}/PKG-INFO +4 -4
  4. {argus_server-2.4.0 → argus_server-2.6.0}/README.md +3 -3
  5. {argus_server-2.4.0 → argus_server-2.6.0}/codecov.yml +2 -2
  6. {argus_server-2.4.0 → argus_server-2.6.0}/docs/about-argus.rst +1 -0
  7. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/customizing-filtering.rst +14 -9
  8. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/regenerate-the-ER-diagram.rst +3 -3
  9. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/release-checklist.rst +2 -2
  10. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/sonarqube.rst +9 -0
  11. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/vendor-a-repo.rst +1 -1
  12. {argus_server-2.4.0 → argus_server-2.6.0}/docs/django_settings.py +1 -0
  13. {argus_server-2.4.0 → argus_server-2.6.0}/docs/integrations/notifications/writing-notification-plugins.rst +1 -1
  14. {argus_server-2.4.0 → argus_server-2.6.0}/docs/reference/htmx-frontend.rst +1 -1
  15. argus_server-2.6.0/docs/reference/img/ER_model.png +0 -0
  16. {argus_server-2.4.0 → argus_server-2.6.0}/docs/reference/models.rst +12 -0
  17. argus_server-2.6.0/docs/reference/planned-maintenance.rst +43 -0
  18. argus_server-2.6.0/requirements/django52.txt +1 -0
  19. {argus_server-2.4.0 → argus_server-2.6.0}/requirements-django52.txt +3 -3
  20. {argus_server-2.4.0 → argus_server-2.6.0}/requirements.txt +3 -3
  21. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/factories.py +2 -1
  22. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/dev/management/commands/create_fake_incident.py +2 -1
  23. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/dev/management/commands/create_source.py +9 -2
  24. argus_server-2.6.0/src/argus/filter/checks.py +25 -0
  25. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/filter/default.py +1 -2
  26. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/filter/filterwrapper.py +26 -17
  27. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/filter/queryset_filters.py +16 -1
  28. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/context_processors.py +5 -0
  29. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/incident/columns.py +5 -5
  30. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/incident/views.py +1 -1
  31. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/static/styles.css +205 -8
  32. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/tailwindtheme/snippets/30-incident-table.css +4 -0
  33. argus_server-2.6.0/src/argus/htmx/tailwindtheme/snippets/35-cards.css +15 -0
  34. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/tailwindtheme/styles.css +1 -0
  35. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/destination/_collapse_with_forms.html +1 -1
  36. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/destination/_create_form.html +1 -1
  37. argus_server-2.6.0/src/argus/htmx/templates/htmx/destination/destination_list.html +7 -0
  38. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/forms/dropdown_select_multiple.html +1 -1
  39. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_base_incident_table.html +1 -1
  40. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_ack_icon.html +4 -2
  41. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_filterable_column_header_content.html +10 -10
  42. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_status_icon.html +3 -2
  43. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/incident_detail.html +12 -12
  44. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/notificationprofile/base.html +1 -1
  45. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/notificationprofile/notificationprofile_form.html +1 -1
  46. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/notificationprofile/notificationprofile_list.html +2 -2
  47. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/styleguide.html +27 -0
  48. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/timeslot/base.html +1 -1
  49. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/timeslot/timeslot_list.html +2 -4
  50. argus_server-2.6.0/src/argus/htmx/templates/htmx/user/_preference_choice_preview_theme.html +13 -0
  51. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/user/_user_menu.html +14 -1
  52. argus_server-2.6.0/src/argus/htmx/templates/htmx/user/preference_form/_base_form.html +21 -0
  53. argus_server-2.6.0/src/argus/htmx/templates/htmx/user/preference_form/_incident_table_form.html +13 -0
  54. argus_server-2.6.0/src/argus/htmx/templates/htmx/user/preference_form/_incident_table_preview.html +30 -0
  55. argus_server-2.6.0/src/argus/htmx/templates/htmx/user/preference_form/_preference_form_script.html +26 -0
  56. argus_server-2.6.0/src/argus/htmx/templates/htmx/user/preference_form/_theme_and_format_form.html +10 -0
  57. argus_server-2.6.0/src/argus/htmx/templates/htmx/user/preferences_list.html +12 -0
  58. argus_server-2.6.0/src/argus/htmx/templates/htmx/user/radio_option.html +13 -0
  59. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/messages/_notification_messages.html +1 -1
  60. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/registration/login.html +10 -0
  61. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/user/preferences/forms.py +22 -2
  62. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/user/urls.py +1 -0
  63. argus_server-2.6.0/src/argus/htmx/user/views.py +84 -0
  64. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/factories.py +1 -1
  65. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/models.py +1 -1
  66. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/signals.py +5 -0
  67. argus_server-2.6.0/src/argus/notificationprofile/filterwrapper.py +47 -0
  68. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/media/__init__.py +7 -5
  69. argus_server-2.6.0/src/argus/plannedmaintenance/admin.py +102 -0
  70. argus_server-2.6.0/src/argus/plannedmaintenance/apps.py +6 -0
  71. argus_server-2.6.0/src/argus/plannedmaintenance/factories.py +22 -0
  72. argus_server-2.6.0/src/argus/plannedmaintenance/migrations/0001_initial.py +76 -0
  73. argus_server-2.6.0/src/argus/plannedmaintenance/models.py +85 -0
  74. argus_server-2.6.0/src/argus/plannedmaintenance/templates/plannedmaintenance/admin/planned_maintenance_change_form.html +8 -0
  75. argus_server-2.6.0/src/argus/plannedmaintenance/utils.py +52 -0
  76. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/site/settings/base.py +3 -0
  77. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/site/settings/test_CI.py +11 -0
  78. argus_server-2.6.0/src/argus/version.py +1 -0
  79. {argus_server-2.4.0 → argus_server-2.6.0}/tests/auth/test_knox_views.py +3 -1
  80. {argus_server-2.4.0 → argus_server-2.6.0}/tests/dev/test_create_source.py +7 -0
  81. {argus_server-2.4.0 → argus_server-2.6.0}/tests/filter/test_filterwrapper.py +39 -40
  82. argus_server-2.6.0/tests/htmx/test_context_processors.py +12 -0
  83. argus_server-2.6.0/tests/htmx/user/test_views.py +34 -0
  84. argus_server-2.6.0/tests/notificationprofile/migrations/__init__.py +0 -0
  85. argus_server-2.6.0/tests/notificationprofile/test_filterwrapper.py +84 -0
  86. argus_server-2.6.0/tests/plannedmaintenance/__init__.py +0 -0
  87. argus_server-2.6.0/tests/plannedmaintenance/test_models.py +117 -0
  88. argus_server-2.6.0/tests/plannedmaintenance/test_utils.py +115 -0
  89. argus_server-2.6.0/tests/site/__init__.py +0 -0
  90. argus_server-2.6.0/tests/util/__init__.py +0 -0
  91. {argus_server-2.4.0 → argus_server-2.6.0}/tox.ini +14 -2
  92. argus_server-2.4.0/docs/reference/img/ER_model.png +0 -0
  93. argus_server-2.4.0/requirements/django52.txt +0 -1
  94. argus_server-2.4.0/src/argus/filter/checks.py +0 -22
  95. argus_server-2.4.0/src/argus/htmx/templates/htmx/destination/destination_list.html +0 -5
  96. argus_server-2.4.0/src/argus/htmx/templates/htmx/user/preferences_list.html +0 -14
  97. argus_server-2.4.0/src/argus/htmx/templates/htmx/user/radio_option.html +0 -10
  98. argus_server-2.4.0/src/argus/htmx/user/views.py +0 -44
  99. argus_server-2.4.0/src/argus/version.py +0 -1
  100. {argus_server-2.4.0 → argus_server-2.6.0}/.git-blame-ignore-revs +0 -0
  101. {argus_server-2.4.0 → argus_server-2.6.0}/.gitattributes +0 -0
  102. {argus_server-2.4.0 → argus_server-2.6.0}/.gitignore +0 -0
  103. {argus_server-2.4.0 → argus_server-2.6.0}/.mailmap +0 -0
  104. {argus_server-2.4.0 → argus_server-2.6.0}/.pre-commit-config.yaml +0 -0
  105. {argus_server-2.4.0 → argus_server-2.6.0}/.readthedocs.yaml +0 -0
  106. {argus_server-2.4.0 → argus_server-2.6.0}/.sonarcloud.properties +0 -0
  107. {argus_server-2.4.0 → argus_server-2.6.0}/CONTRIBUTING.rst +0 -0
  108. {argus_server-2.4.0 → argus_server-2.6.0}/CONTRIBUTORS.md +0 -0
  109. {argus_server-2.4.0 → argus_server-2.6.0}/Dockerfile +0 -0
  110. {argus_server-2.4.0 → argus_server-2.6.0}/LICENSE +0 -0
  111. {argus_server-2.4.0 → argus_server-2.6.0}/MAINTAINING.rst +0 -0
  112. {argus_server-2.4.0 → argus_server-2.6.0}/Makefile +0 -0
  113. {argus_server-2.4.0 → argus_server-2.6.0}/UPGRADING.md +0 -0
  114. {argus_server-2.4.0 → argus_server-2.6.0}/changelog.d/.gitkeep +0 -0
  115. {argus_server-2.4.0 → argus_server-2.6.0}/cmd.sh-template +0 -0
  116. {argus_server-2.4.0 → argus_server-2.6.0}/constraints.txt +0 -0
  117. {argus_server-2.4.0 → argus_server-2.6.0}/docker/Dockerfile +0 -0
  118. {argus_server-2.4.0 → argus_server-2.6.0}/docker/README.md +0 -0
  119. {argus_server-2.4.0 → argus_server-2.6.0}/docker/docker-entrypoint.sh +0 -0
  120. {argus_server-2.4.0 → argus_server-2.6.0}/docker/dockersettings.py +0 -0
  121. {argus_server-2.4.0 → argus_server-2.6.0}/docker-compose.yml +0 -0
  122. {argus_server-2.4.0 → argus_server-2.6.0}/docs/Makefile +0 -0
  123. {argus_server-2.4.0 → argus_server-2.6.0}/docs/_exts/djangodocs.py +0 -0
  124. {argus_server-2.4.0 → argus_server-2.6.0}/docs/_static/.gitkeep +0 -0
  125. {argus_server-2.4.0 → argus_server-2.6.0}/docs/_templates/.gitkeep +0 -0
  126. {argus_server-2.4.0 → argus_server-2.6.0}/docs/conf.py +0 -0
  127. {argus_server-2.4.0 → argus_server-2.6.0}/docs/customization/htmx-frontend.rst +0 -0
  128. {argus_server-2.4.0 → argus_server-2.6.0}/docs/customization.rst +0 -0
  129. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/add-more-preferences.rst +0 -0
  130. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/change-settings.rst +0 -0
  131. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/changelog-entry.rst +0 -0
  132. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/commit-messages.rst +0 -0
  133. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/federated-logins.rst +0 -0
  134. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/howtos-for-git.rst +0 -0
  135. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/howtos-for-github.rst +0 -0
  136. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/htmx-frontend/column_for_specific_ack_group.rst +0 -0
  137. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/htmx-frontend/column_for_specific_tag.rst +0 -0
  138. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/htmx-frontend/custom-incident-actions.rst +0 -0
  139. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/htmx-frontend/customize-filtering.rst +0 -0
  140. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/htmx-frontend/dependencies.rst +0 -0
  141. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/htmx-frontend/font_awesome.rst +0 -0
  142. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/htmx-frontend/override_templates.rst +0 -0
  143. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/htmx-frontend.rst +0 -0
  144. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/notification-system-testing.rst +0 -0
  145. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/recover-from-migration-trouble.rst +0 -0
  146. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/toggle-django-debug-toolbar.rst +0 -0
  147. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/trigger-test-error-pages.rst +0 -0
  148. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos/update-contributors.rst +0 -0
  149. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/howtos.rst +0 -0
  150. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/makefile-rules.rst +0 -0
  151. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/management-commands.rst +0 -0
  152. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/notes.rst +0 -0
  153. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/styleguide.rst +0 -0
  154. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development/troubleshooting.rst +0 -0
  155. {argus_server-2.4.0 → argus_server-2.6.0}/docs/development.rst +0 -0
  156. {argus_server-2.4.0 → argus_server-2.6.0}/docs/img/default_timeslot.png +0 -0
  157. {argus_server-2.4.0 → argus_server-2.6.0}/docs/img/destinations_view.png +0 -0
  158. {argus_server-2.4.0 → argus_server-2.6.0}/docs/img/example_timeslot.png +0 -0
  159. {argus_server-2.4.0 → argus_server-2.6.0}/docs/img/filter_selector.png +0 -0
  160. {argus_server-2.4.0 → argus_server-2.6.0}/docs/img/incident_details_view.png +0 -0
  161. {argus_server-2.4.0 → argus_server-2.6.0}/docs/img/incidents_filter.png +0 -0
  162. {argus_server-2.4.0 → argus_server-2.6.0}/docs/img/incidents_page.png +0 -0
  163. {argus_server-2.4.0 → argus_server-2.6.0}/docs/img/new_notification_profile.png +0 -0
  164. {argus_server-2.4.0 → argus_server-2.6.0}/docs/img/notification_profiles.png +0 -0
  165. {argus_server-2.4.0 → argus_server-2.6.0}/docs/img/synced_destination_delete_error.png +0 -0
  166. {argus_server-2.4.0 → argus_server-2.6.0}/docs/img/timeslots_view.png +0 -0
  167. {argus_server-2.4.0 → argus_server-2.6.0}/docs/img/unsaved_recurrence.png +0 -0
  168. {argus_server-2.4.0 → argus_server-2.6.0}/docs/img/user_menu.png +0 -0
  169. {argus_server-2.4.0 → argus_server-2.6.0}/docs/index.rst +0 -0
  170. {argus_server-2.4.0 → argus_server-2.6.0}/docs/integrations/_note.rst +0 -0
  171. {argus_server-2.4.0 → argus_server-2.6.0}/docs/integrations/glue-services/index.rst +0 -0
  172. {argus_server-2.4.0 → argus_server-2.6.0}/docs/integrations/glue-services/writing-glueservices.rst +0 -0
  173. {argus_server-2.4.0 → argus_server-2.6.0}/docs/integrations/index.rst +0 -0
  174. {argus_server-2.4.0 → argus_server-2.6.0}/docs/integrations/notifications/email-plugin.rst +0 -0
  175. {argus_server-2.4.0 → argus_server-2.6.0}/docs/integrations/notifications/index.rst +0 -0
  176. {argus_server-2.4.0 → argus_server-2.6.0}/docs/integrations/notifications/sms-plugin.rst +0 -0
  177. {argus_server-2.4.0 → argus_server-2.6.0}/docs/integrations/ticket-systems/index.rst +0 -0
  178. {argus_server-2.4.0 → argus_server-2.6.0}/docs/integrations/ticket-systems/writing-ticket-system-plugins.rst +0 -0
  179. {argus_server-2.4.0 → argus_server-2.6.0}/docs/make.bat +0 -0
  180. {argus_server-2.4.0 → argus_server-2.6.0}/docs/reference/admin.rst +0 -0
  181. {argus_server-2.4.0 → argus_server-2.6.0}/docs/reference/api/v2.rst +0 -0
  182. {argus_server-2.4.0 → argus_server-2.6.0}/docs/reference/api.rst +0 -0
  183. {argus_server-2.4.0 → argus_server-2.6.0}/docs/reference/authentication.rst +0 -0
  184. {argus_server-2.4.0 → argus_server-2.6.0}/docs/reference/glossary.rst +0 -0
  185. {argus_server-2.4.0 → argus_server-2.6.0}/docs/reference/site-specific-settings.rst +0 -0
  186. {argus_server-2.4.0 → argus_server-2.6.0}/docs/reference.rst +0 -0
  187. {argus_server-2.4.0 → argus_server-2.6.0}/docs/user-manual.rst +0 -0
  188. {argus_server-2.4.0 → argus_server-2.6.0}/pyproject.toml +0 -0
  189. {argus_server-2.4.0 → argus_server-2.6.0}/requirements/dev.txt +0 -0
  190. {argus_server-2.4.0 → argus_server-2.6.0}/requirements/please-pip-sync.txt +0 -0
  191. {argus_server-2.4.0 → argus_server-2.6.0}/requirements/test.txt +0 -0
  192. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/__init__.py +0 -0
  193. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/__init__.py +0 -0
  194. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/admin.py +0 -0
  195. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/apps.py +0 -0
  196. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/authentication.py +0 -0
  197. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/context_processors.py +0 -0
  198. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/drftoken/__init__.py +0 -0
  199. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/drftoken/serializers.py +0 -0
  200. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/drftoken/urls.py +0 -0
  201. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/drftoken/views.py +0 -0
  202. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/knox/__init__.py +0 -0
  203. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/knox/serializers.py +0 -0
  204. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/knox/urls.py +0 -0
  205. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/knox/views.py +0 -0
  206. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/management/__init__.py +0 -0
  207. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/management/commands/__init__.py +0 -0
  208. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/management/commands/changeuser.py +0 -0
  209. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/management/commands/createuser.py +0 -0
  210. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/management/commands/grantsuperuser.py +0 -0
  211. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/management/commands/revokesuperuser.py +0 -0
  212. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/management/commands/setpassword.py +0 -0
  213. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/migrations/0001_initial.py +0 -0
  214. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/migrations/0002_alter_user_first_name.py +0 -0
  215. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/migrations/0002_squashed_auth_20250512_add_preferences_model.py +0 -0
  216. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/migrations/0003_delete_phonenumber.py +0 -0
  217. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/migrations/0004_add_preferences_model.py +0 -0
  218. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/migrations/__init__.py +0 -0
  219. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/models.py +0 -0
  220. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/serializers.py +0 -0
  221. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/urls.py +0 -0
  222. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/utils.py +0 -0
  223. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/auth/views.py +0 -0
  224. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/base/__init__.py +0 -0
  225. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/base/apps.py +0 -0
  226. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/base/static/favicon.svg +0 -0
  227. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/base/templates/base.html +0 -0
  228. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/base/templates/index.html +0 -0
  229. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/compat.py +0 -0
  230. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/dev/__init__.py +0 -0
  231. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/dev/apps.py +0 -0
  232. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/dev/management/__init__.py +0 -0
  233. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/dev/management/commands/__init__.py +0 -0
  234. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/dev/management/commands/bulk_incidents.py +0 -0
  235. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/dev/management/commands/check_token_expiry.py +0 -0
  236. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/dev/management/commands/close_incident.py +0 -0
  237. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/dev/management/commands/gen_secret_key.py +0 -0
  238. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/dev/management/commands/initial_setup.py +0 -0
  239. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/dev/management/commands/list_filters.py +0 -0
  240. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/dev/management/commands/stresstest.py +0 -0
  241. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/dev/management/commands/toggle_profile_activation.py +0 -0
  242. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/dev/utils.py +0 -0
  243. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/drf/__init__.py +0 -0
  244. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/drf/permissions.py +0 -0
  245. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/filter/__init__.py +0 -0
  246. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/filter/apps.py +0 -0
  247. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/filter/factories.py +0 -0
  248. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/filter/filters.py +0 -0
  249. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/filter/primitive_serializers.py +0 -0
  250. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/filter/serializers.py +0 -0
  251. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/filter/swappable/__init__.py +0 -0
  252. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/filter/swappable/serializers.py +0 -0
  253. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/filter/validators.py +0 -0
  254. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/__init__.py +0 -0
  255. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/appconfig.py +0 -0
  256. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/apps.py +0 -0
  257. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/auth/__init__.py +0 -0
  258. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/auth/views.py +0 -0
  259. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/checks.py +0 -0
  260. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/constants.py +0 -0
  261. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/dateformat/__init__.py +0 -0
  262. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/dateformat/constants.py +0 -0
  263. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/defaults.py +0 -0
  264. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/destination/__init__.py +0 -0
  265. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/destination/forms.py +0 -0
  266. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/destination/urls.py +0 -0
  267. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/destination/views.py +0 -0
  268. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/forms.py +0 -0
  269. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/htmx_urls.py +0 -0
  270. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/incident/__init__.py +0 -0
  271. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/incident/constants.py +0 -0
  272. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/incident/filter.py +0 -0
  273. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/incident/forms/__init__.py +0 -0
  274. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/incident/forms/base.py +0 -0
  275. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/incident/forms/incident_actions.py +0 -0
  276. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/incident/forms/incident_filters.py +0 -0
  277. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/incident/urls.py +0 -0
  278. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/incident/utils.py +0 -0
  279. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/management/__init__.py +0 -0
  280. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/management/commands/__init__.py +0 -0
  281. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/management/commands/tailwind_config.py +0 -0
  282. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/middleware.py +0 -0
  283. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/migrations/0001_initial.py +0 -0
  284. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/migrations/__init__.py +0 -0
  285. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/modals.py +0 -0
  286. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/models.py +0 -0
  287. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/notificationprofile/__init__.py +0 -0
  288. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/notificationprofile/urls.py +0 -0
  289. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/notificationprofile/views.py +0 -0
  290. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/request.py +0 -0
  291. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/root_urls.py +0 -0
  292. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/settings.py +0 -0
  293. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/static/choices-11.1.0.min.js +0 -0
  294. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/static/htmx-2.0.2.min.js +0 -0
  295. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/static/hyperscript-0.9.13.min.js +0 -0
  296. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/static/logo_white.svg +0 -0
  297. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/tailwindtheme/README.md +0 -0
  298. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/tailwindtheme/__init__.py +0 -0
  299. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/tailwindtheme/config.py +0 -0
  300. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/tailwindtheme/get_tailwind.py +0 -0
  301. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/tailwindtheme/snippets/10-tailwind.css +0 -0
  302. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/tailwindtheme/snippets/15-alert-message.css +0 -0
  303. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/tailwindtheme/snippets/20-loading-box.css +0 -0
  304. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/tailwindtheme/snippets/25-choices.css +0 -0
  305. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/tailwindtheme/tailwind.config.js +0 -0
  306. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/tailwindtheme/utils.py +0 -0
  307. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/400.html +0 -0
  308. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/401.html +0 -0
  309. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/403.html +0 -0
  310. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/404.html +0 -0
  311. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/410.html +0 -0
  312. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/500.html +0 -0
  313. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/django/forms/errors/dict/ul.html +0 -0
  314. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/django/forms/errors/list/ul.html +0 -0
  315. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/django/forms/field.html +0 -0
  316. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/django/forms/label.html +0 -0
  317. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/django/forms/widgets/attrs.html +0 -0
  318. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/django/forms/widgets/checkbox.html +0 -0
  319. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/django/forms/widgets/checkbox_option.html +0 -0
  320. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/django/forms/widgets/classless_attrs.html +0 -0
  321. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/django/forms/widgets/date.html +0 -0
  322. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/django/forms/widgets/datetime.html +0 -0
  323. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/django/forms/widgets/input.html +0 -0
  324. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/django/forms/widgets/radio_option.html +0 -0
  325. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/django/forms/widgets/range.html +0 -0
  326. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/django/forms/widgets/select.html +0 -0
  327. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/django/forms/widgets/time.html +0 -0
  328. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/_base_confirm_dialog.html +0 -0
  329. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/_base_form_modal.html +0 -0
  330. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/_base_form_modal_button.html +0 -0
  331. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/_base_form_modal_experimental.html +0 -0
  332. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/base.html +0 -0
  333. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/components/_page_title.html +0 -0
  334. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/components/incident_list_refresh_info_select.html +0 -0
  335. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/destination/_content.html +0 -0
  336. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/destination/_delete_form.html +0 -0
  337. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/destination/_edit_form.html +0 -0
  338. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/destination/_form_list.html +0 -0
  339. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/forms/badge_dropdown_select_multiple.html +0 -0
  340. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/forms/checkbox_select_multiple.html +0 -0
  341. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/forms/input_field.html +0 -0
  342. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/forms/search_select_multiple.html +0 -0
  343. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_base.html +0 -0
  344. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_base_incident_update_modal.html +0 -0
  345. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_delete_filter_confirm_dialog.html +0 -0
  346. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_existing_filters.html +0 -0
  347. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_filter_controls.html +0 -0
  348. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_filter_create_modal.html +0 -0
  349. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_filter_delete_dropdown.html +0 -0
  350. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_filter_select.html +0 -0
  351. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_filter_update_dropdown.html +0 -0
  352. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_incident_acknowledge_modal.html +0 -0
  353. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_incident_close_modal.html +0 -0
  354. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_incident_filterbox.html +0 -0
  355. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_incident_list_menubar.html +0 -0
  356. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_incident_list_refresh_info.html +0 -0
  357. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_incident_list_update_menu.html +0 -0
  358. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_incident_reopen_modal.html +0 -0
  359. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_incident_table.html +0 -0
  360. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_incident_table_autorefresh.html +0 -0
  361. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_incident_table_cell_wrapper_default.html +0 -0
  362. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_incident_table_cell_wrapper_link_to_details.html +0 -0
  363. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_incident_table_footer.html +0 -0
  364. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_incident_table_paginator.html +0 -0
  365. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_incident_table_paginator_pageitem.html +0 -0
  366. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_incident_table_row.html +0 -0
  367. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_incident_table_rows.html +0 -0
  368. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_incident_ticket_autocreate_modal.html +0 -0
  369. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_incident_ticket_edit_modal.html +0 -0
  370. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_incident_ticket_manual_create_modal.html +0 -0
  371. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_unpaged_incident_table.html +0 -0
  372. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/_update_filter_confirm_dialog.html +0 -0
  373. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_ack.html +0 -0
  374. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_actions.html +0 -0
  375. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_age.html +0 -0
  376. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_checkbox.html +0 -0
  377. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_color_status.html +0 -0
  378. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_combined_status.html +0 -0
  379. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_combined_status_icons.html +0 -0
  380. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_description.html +0 -0
  381. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_filterable_column_header.html +0 -0
  382. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_level.html +0 -0
  383. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_list_select_all_checkbox_header.html +0 -0
  384. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_pk.html +0 -0
  385. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_source.html +0 -0
  386. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_source_type.html +0 -0
  387. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_start_time.html +0 -0
  388. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_start_time_and_age.html +0 -0
  389. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_start_time_header.html +0 -0
  390. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_status.html +0 -0
  391. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_tag.html +0 -0
  392. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_ticket.html +0 -0
  393. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/cells/search_fields/input_search.html +0 -0
  394. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/filter_list.html +0 -0
  395. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/incident_list.html +0 -0
  396. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/responses/_incident_list_refresh.html +0 -0
  397. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/incident/responses/empty_list_item.html +0 -0
  398. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/notificationprofile/_notificationprofile_form.html +0 -0
  399. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/notificationprofile/_notificationprofile_form_div.html +0 -0
  400. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/notificationprofile/notificationprofile_confirm_delete.html +0 -0
  401. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/timeslot/_delete_timeslot_confirm_dialog.html +0 -0
  402. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/timeslot/_timeslot_detail.html +0 -0
  403. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/timeslot/_timeslot_form.html +0 -0
  404. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/timeslot/checkbox_option.html +0 -0
  405. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/timeslot/timerecurrence_div.html +0 -0
  406. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/timeslot/timeslot_confirm_delete.html +0 -0
  407. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/timeslot/timeslot_form.html +0 -0
  408. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/user/_current_theme.html +0 -0
  409. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/user/_dateformat_dropdown.html +0 -0
  410. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/user/_incidents_table_columns_dropdown.html +0 -0
  411. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/user/_incidents_table_layout_dropdown.html +0 -0
  412. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/user/_page_size_dropdown.html +0 -0
  413. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/user/_preference_choice_nopreview.html +0 -0
  414. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/user/_preference_choice_preview_datetime.html +0 -0
  415. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/user/_theme_dropdown.html +0 -0
  416. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/user/_update_interval_dropdown.html +0 -0
  417. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/user/_user_menu_logout.html +0 -0
  418. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/user/_user_menu_notification_config.html +0 -0
  419. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx/user/preference_field_form.html +0 -0
  420. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/htmx_base.html +0 -0
  421. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/messages/_notification_message.html +0 -0
  422. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/messages/_notification_messages_htmx_append.html +0 -0
  423. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/tailwind/styles.css +0 -0
  424. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/tailwind/tailwind.config.js +0 -0
  425. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templates/tailwind_whitelist.html +0 -0
  426. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templatetags/__init__.py +0 -0
  427. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/templatetags/argus_htmx.py +0 -0
  428. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/themes/__init__.py +0 -0
  429. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/themes/utils.py +0 -0
  430. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/timeslot/__init__.py +0 -0
  431. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/timeslot/urls.py +0 -0
  432. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/timeslot/views.py +0 -0
  433. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/urls.py +0 -0
  434. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/user/__init__.py +0 -0
  435. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/user/factories.py +0 -0
  436. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/user/preferences/__init__.py +0 -0
  437. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/user/preferences/models.py +0 -0
  438. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/user/preferences/utils.py +0 -0
  439. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/utils.py +0 -0
  440. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/views.py +0 -0
  441. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/htmx/widgets.py +0 -0
  442. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/__init__.py +0 -0
  443. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/admin.py +0 -0
  444. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/apps.py +0 -0
  445. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/constants.py +0 -0
  446. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/fields.py +0 -0
  447. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/forms.py +0 -0
  448. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/migrations/0001_initial.py +0 -0
  449. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/migrations/0001_squashed_incident_20250514.py +0 -0
  450. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/migrations/0002_empty_source_incident_id.py +0 -0
  451. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/migrations/0003_incident_level.py +0 -0
  452. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/migrations/0004_add_ChangeEvent_proxy.py +0 -0
  453. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/migrations/0005_alter_event_type.py +0 -0
  454. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/migrations/0006_incident_search_text.py +0 -0
  455. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/migrations/0007_alter_event_type.py +0 -0
  456. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/migrations/0008_incident_metadata.py +0 -0
  457. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/migrations/0009_use_bigautofield_on_quickly_growing_tables.py +0 -0
  458. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/migrations/__init__.py +0 -0
  459. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/serializers.py +0 -0
  460. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/templates/incident/admin/fake_incident_add_form.html +0 -0
  461. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/templates/incident/admin/incident_change_list.html +0 -0
  462. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/templates/incident/admin/widgets/split_datetime_infinity.html +0 -0
  463. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/templates/incident/ticket/default_ticket_body.html +0 -0
  464. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/ticket/__init__.py +0 -0
  465. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/ticket/base.py +0 -0
  466. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/ticket/dummy.py +0 -0
  467. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/ticket/utils.py +0 -0
  468. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/urls.py +0 -0
  469. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/validators.py +0 -0
  470. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/views.py +0 -0
  471. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/incident/widgets.py +0 -0
  472. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/__init__.py +0 -0
  473. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/admin.py +0 -0
  474. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/apps.py +0 -0
  475. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/checks.py +0 -0
  476. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/factories.py +0 -0
  477. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/media/base.py +0 -0
  478. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/media/email.py +0 -0
  479. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/media/sms_as_email.py +0 -0
  480. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/migrations/0001_squashed_0015_remove_days_alter_days_array.py +0 -0
  481. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/migrations/0001_squashed_notificationprofile_20250512.py +0 -0
  482. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/migrations/0016_noop.py +0 -0
  483. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/migrations/0017_change_event_type_to_event_types.py +0 -0
  484. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/migrations/0018_remove_closed_and_unacked_from_filterblob.py +0 -0
  485. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/migrations/__init__.py +0 -0
  486. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/models.py +0 -0
  487. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/serializers.py +0 -0
  488. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/signals.py +0 -0
  489. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/templates/notificationprofile/email.html +0 -0
  490. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/templates/notificationprofile/email.txt +0 -0
  491. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/templates/schemawrapper.html +0 -0
  492. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/urls.py +0 -0
  493. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/notificationprofile/views.py +0 -0
  494. {argus_server-2.4.0/src/argus/site → argus_server-2.6.0/src/argus/plannedmaintenance}/__init__.py +0 -0
  495. {argus_server-2.4.0/src/argus/util → argus_server-2.6.0/src/argus/plannedmaintenance/migrations}/__init__.py +0 -0
  496. {argus_server-2.4.0/tests → argus_server-2.6.0/src/argus/site}/__init__.py +0 -0
  497. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/site/api_v2_urls.py +0 -0
  498. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/site/logging.py +0 -0
  499. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/site/serializers.py +0 -0
  500. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/site/settings/__init__.py +0 -0
  501. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/site/settings/_serializers.py +0 -0
  502. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/site/settings/backend.py +0 -0
  503. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/site/settings/dev.py +0 -0
  504. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/site/settings/dockerdev.py +0 -0
  505. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/site/settings/prod.py +0 -0
  506. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/site/urls.py +0 -0
  507. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/site/utils.py +0 -0
  508. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/site/views.py +0 -0
  509. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/site/wsgi.py +0 -0
  510. {argus_server-2.4.0/tests/auth/management_commands → argus_server-2.6.0/src/argus/util}/__init__.py +0 -0
  511. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/util/admin_utils.py +0 -0
  512. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/util/datetime_utils.py +0 -0
  513. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/util/testing.py +0 -0
  514. {argus_server-2.4.0 → argus_server-2.6.0}/src/argus/util/utils.py +0 -0
  515. {argus_server-2.4.0/tests/dev → argus_server-2.6.0/tests}/__init__.py +0 -0
  516. {argus_server-2.4.0 → argus_server-2.6.0}/tests/auth/__init__.py +0 -0
  517. {argus_server-2.4.0/tests/filter → argus_server-2.6.0/tests/auth/management_commands}/__init__.py +0 -0
  518. {argus_server-2.4.0 → argus_server-2.6.0}/tests/auth/management_commands/test_changeuser.py +0 -0
  519. {argus_server-2.4.0 → argus_server-2.6.0}/tests/auth/management_commands/test_createuser.py +0 -0
  520. {argus_server-2.4.0 → argus_server-2.6.0}/tests/auth/models.py +0 -0
  521. {argus_server-2.4.0 → argus_server-2.6.0}/tests/auth/test_auth.py +0 -0
  522. {argus_server-2.4.0 → argus_server-2.6.0}/tests/auth/test_models.py +0 -0
  523. {argus_server-2.4.0 → argus_server-2.6.0}/tests/auth/test_utils.py +0 -0
  524. {argus_server-2.4.0 → argus_server-2.6.0}/tests/auth/test_views.py +0 -0
  525. {argus_server-2.4.0/tests/htmx → argus_server-2.6.0/tests/dev}/__init__.py +0 -0
  526. {argus_server-2.4.0 → argus_server-2.6.0}/tests/dev/test_bulk_incidents.py +0 -0
  527. {argus_server-2.4.0 → argus_server-2.6.0}/tests/dev/test_check_token_expiry.py +0 -0
  528. {argus_server-2.4.0 → argus_server-2.6.0}/tests/dev/test_close_incident.py +0 -0
  529. {argus_server-2.4.0 → argus_server-2.6.0}/tests/dev/test_create_fake_incident.py +0 -0
  530. {argus_server-2.4.0 → argus_server-2.6.0}/tests/dev/test_gen_secret_key.py +0 -0
  531. {argus_server-2.4.0 → argus_server-2.6.0}/tests/dev/test_initial_setup.py +0 -0
  532. {argus_server-2.4.0 → argus_server-2.6.0}/tests/dev/test_list_filters.py +0 -0
  533. {argus_server-2.4.0 → argus_server-2.6.0}/tests/dev/test_toggle_profile_activation.py +0 -0
  534. {argus_server-2.4.0 → argus_server-2.6.0}/tests/dev/test_utils.py +0 -0
  535. {argus_server-2.4.0/tests/htmx/incident → argus_server-2.6.0/tests/filter}/__init__.py +0 -0
  536. {argus_server-2.4.0 → argus_server-2.6.0}/tests/filter/dummyplugin.py +0 -0
  537. {argus_server-2.4.0 → argus_server-2.6.0}/tests/filter/test_filterplugin.py +0 -0
  538. {argus_server-2.4.0 → argus_server-2.6.0}/tests/filter/test_queryset_filters.py +0 -0
  539. {argus_server-2.4.0 → argus_server-2.6.0}/tests/helpers.py +0 -0
  540. {argus_server-2.4.0/tests/htmx/notificationprofile → argus_server-2.6.0/tests/htmx}/__init__.py +0 -0
  541. {argus_server-2.4.0/tests/incident/fixtures → argus_server-2.6.0/tests/htmx/incident}/__init__.py +0 -0
  542. {argus_server-2.4.0 → argus_server-2.6.0}/tests/htmx/incident/test_customization.py +0 -0
  543. {argus_server-2.4.0 → argus_server-2.6.0}/tests/htmx/incident/test_filter.py +0 -0
  544. {argus_server-2.4.0 → argus_server-2.6.0}/tests/htmx/incident/test_forms_incident_filters.py +0 -0
  545. {argus_server-2.4.0 → argus_server-2.6.0}/tests/htmx/incident/test_utils.py +0 -0
  546. {argus_server-2.4.0 → argus_server-2.6.0}/tests/htmx/incident/test_views.py +0 -0
  547. {argus_server-2.4.0/tests/incident/ticket_plugins → argus_server-2.6.0/tests/htmx/notificationprofile}/__init__.py +0 -0
  548. {argus_server-2.4.0 → argus_server-2.6.0}/tests/htmx/notificationprofile/test_forms.py +0 -0
  549. {argus_server-2.4.0 → argus_server-2.6.0}/tests/htmx/test_incident_columns_rendering.py +0 -0
  550. {argus_server-2.4.0 → argus_server-2.6.0}/tests/htmx/test_middleware.py +0 -0
  551. {argus_server-2.4.0 → argus_server-2.6.0}/tests/htmx/test_templatetags.py +0 -0
  552. {argus_server-2.4.0 → argus_server-2.6.0}/tests/htmx/test_utils.py +0 -0
  553. {argus_server-2.4.0/tests/incident/unit → argus_server-2.6.0/tests/htmx/user}/__init__.py +0 -0
  554. {argus_server-2.4.0 → argus_server-2.6.0}/tests/incident/__init__.py +0 -0
  555. {argus_server-2.4.0/tests/notificationprofile/destinations → argus_server-2.6.0/tests/incident/fixtures}/__init__.py +0 -0
  556. {argus_server-2.4.0 → argus_server-2.6.0}/tests/incident/test_change_event.py +0 -0
  557. {argus_server-2.4.0 → argus_server-2.6.0}/tests/incident/test_create_fake_incident.py +0 -0
  558. {argus_server-2.4.0 → argus_server-2.6.0}/tests/incident/test_event.py +0 -0
  559. {argus_server-2.4.0 → argus_server-2.6.0}/tests/incident/test_filters.py +0 -0
  560. {argus_server-2.4.0 → argus_server-2.6.0}/tests/incident/test_incident.py +0 -0
  561. {argus_server-2.4.0 → argus_server-2.6.0}/tests/incident/test_incident_fields.py +0 -0
  562. {argus_server-2.4.0 → argus_server-2.6.0}/tests/incident/test_queryset.py +0 -0
  563. {argus_server-2.4.0 → argus_server-2.6.0}/tests/incident/test_serializers.py +0 -0
  564. {argus_server-2.4.0 → argus_server-2.6.0}/tests/incident/test_source_system.py +0 -0
  565. {argus_server-2.4.0 → argus_server-2.6.0}/tests/incident/test_source_system_type.py +0 -0
  566. {argus_server-2.4.0 → argus_server-2.6.0}/tests/incident/test_views.py +0 -0
  567. {argus_server-2.4.0/tests/notificationprofile/migrations → argus_server-2.6.0/tests/incident/ticket_plugins}/__init__.py +0 -0
  568. {argus_server-2.4.0 → argus_server-2.6.0}/tests/incident/ticket_plugins/test_base.py +0 -0
  569. {argus_server-2.4.0 → argus_server-2.6.0}/tests/incident/ticket_plugins/test_dummy.py +0 -0
  570. {argus_server-2.4.0 → argus_server-2.6.0}/tests/incident/ticket_plugins/test_utils.py +0 -0
  571. {argus_server-2.4.0/tests/site → argus_server-2.6.0/tests/incident/unit}/__init__.py +0 -0
  572. {argus_server-2.4.0 → argus_server-2.6.0}/tests/incident/unit/test_incident_details_url.py +0 -0
  573. {argus_server-2.4.0 → argus_server-2.6.0}/tests/migration_example.py +0 -0
  574. {argus_server-2.4.0 → argus_server-2.6.0}/tests/notificationprofile/__init__.py +0 -0
  575. {argus_server-2.4.0/tests/util → argus_server-2.6.0/tests/notificationprofile/destinations}/__init__.py +0 -0
  576. {argus_server-2.4.0 → argus_server-2.6.0}/tests/notificationprofile/destinations/test_email.py +0 -0
  577. {argus_server-2.4.0 → argus_server-2.6.0}/tests/notificationprofile/destinations/test_sms.py +0 -0
  578. {argus_server-2.4.0 → argus_server-2.6.0}/tests/notificationprofile/test_github236.py +0 -0
  579. {argus_server-2.4.0 → argus_server-2.6.0}/tests/notificationprofile/test_media.py +0 -0
  580. {argus_server-2.4.0 → argus_server-2.6.0}/tests/notificationprofile/test_models.py +0 -0
  581. {argus_server-2.4.0 → argus_server-2.6.0}/tests/notificationprofile/test_serializers.py +0 -0
  582. {argus_server-2.4.0 → argus_server-2.6.0}/tests/notificationprofile/test_views.py +0 -0
  583. {argus_server-2.4.0 → argus_server-2.6.0}/tests/site/test_misc.py +0 -0
  584. {argus_server-2.4.0 → argus_server-2.6.0}/tests/site/test_settings_helpers.py +0 -0
  585. {argus_server-2.4.0 → argus_server-2.6.0}/tests/site/test_settings_validators.py +0 -0
  586. {argus_server-2.4.0 → argus_server-2.6.0}/tests/site/test_views.py +0 -0
  587. {argus_server-2.4.0 → argus_server-2.6.0}/tests/util/test_utils.py +0 -0
@@ -4,10 +4,67 @@ read by developers.
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
- This project uses [*towncrier*](https://towncrier.readthedocs.io/) and the changes for the upcoming release can be found in <https://github.com/Uninett/Argus/tree/master/changelog.d/>.
7
+ This project uses [*towncrier*](https://towncrier.readthedocs.io/) and the changes for the upcoming release can be found in <https://github.com/Uninett/Argus/tree/main/changelog.d/>.
8
8
 
9
9
  <!-- towncrier release notes start -->
10
10
 
11
+ ## [2.6.0] - 2026-01-06
12
+
13
+ This is a tiny release to finish up what was started at the end of 2025.
14
+
15
+ ### Added
16
+
17
+ - Add preview for incident table preferences
18
+ ([#1658](https://github.com/Uninett/Argus/issues/1658))
19
+
20
+ ### Fixed
21
+
22
+ - Filter on source type in dashboard. The previous release made it work for
23
+ notifications but not in the incident list in the frontend.
24
+ - Fix bug where the incident table overlaps filter dropdowns
25
+ ([#1669](https://github.com/Uninett/Argus/issues/1669))
26
+
27
+
28
+ ## [2.5.0] - 2025-12-04
29
+
30
+ The big new thing this time around is a way to prevent notifications from
31
+ certain incidents by masking them via a planned maintenance filter stored in
32
+ a planned maintenance task. This task works just like a notification profile:
33
+ more filters add precision. The only way to set up a filter right now is via
34
+ the admin. Users with admin-access can click on the admin link, see the section
35
+ "ARGUS_PLANNEDMAINTENANCE".
36
+
37
+ We want some feedback on the feature before we add support
38
+ for setting up planned maintenance tasks via the API and the frontend.
39
+
40
+ Otherwise: work on increasing consistency in the frontend continues, and the
41
+ version number of argus should now always be available.
42
+
43
+ Customizers, please see the NOTES.md, the preferences page has more changes.
44
+
45
+ Remember to migrate if upgrading.
46
+
47
+ ### Added
48
+
49
+ - Add preview for theme and date format preferences
50
+ ([#1557](https://github.com/Uninett/Argus/issues/1557))
51
+ - Add model for planned maintenance tasks
52
+ ([#1586](https://github.com/Uninett/Argus/issues/1586))
53
+ - Added functionality to add/edit planned maintenance tasks to Django admin
54
+ ([#1587](https://github.com/Uninett/Argus/issues/1587))
55
+ - Filter out events covered by ongoing planned maintenance tasks from being
56
+ sent ([#1588](https://github.com/Uninett/Argus/issues/1588))
57
+ - Added Argus version number to user menu dropdown and login page
58
+ ([#1650](https://github.com/Uninett/Argus/issues/1650))
59
+
60
+ ### Changed
61
+
62
+ - Split user preferences into multiple sections
63
+ ([#1557](https://github.com/Uninett/Argus/issues/1557))
64
+ - Increase accessibility of cards by using borders instead of shadow
65
+ ([#1641](https://github.com/Uninett/Argus/issues/1641))
66
+
67
+
11
68
  ## [2.4.0] - 2025-11-28
12
69
 
13
70
  The most important feature this release is being able to filter on source
@@ -3,6 +3,34 @@
3
3
  This file documents changes to Argus that are relevant for operations,
4
4
  customizers and end-users.
5
5
 
6
+
7
+ ## [2.6.0] - 2026-01-06
8
+
9
+ This is a tiny release to finish up what was started at the end of 2025.
10
+
11
+ The feature for having mutiple column presets for the incident list is now
12
+ finished. Please make add issue if you have a column-type you would like
13
+ added.
14
+
15
+ Also, there were some bugs with the typeahead for the tag filter and the new
16
+ source system type filter that was introduced in 2.4.0, the ones we know of
17
+ have been fixed.
18
+
19
+ ## [2.5.0] - 2025-12-04
20
+
21
+ This release adds a new app, "argus.plannedmaintenance", which uses a new
22
+ database table, so remember to migrate.
23
+
24
+ The new table is to store planned maintenance tasks, which are used to exclude
25
+ some notifications from being sent. A notification is only sent *iff* an
26
+ incident and its events are not found by any filter during a currently ongoing
27
+ planned maintenance task.
28
+
29
+ Customizers: We have started work on adding previews to all the preferences;
30
+ first out is previews of themes and date formats. If you have added your own
31
+ preferences or otherwise customized the preferences page you need to take extra
32
+ care when upgrading.
33
+
6
34
  ## [2.4.0] - 2025-11-28
7
35
 
8
36
  The most important feature this release is being able to filter on source
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: argus-server
3
- Version: 2.4.0
3
+ Version: 2.6.0
4
4
  Summary: Argus is an alert aggregator for monitoring systems
5
5
  Project-URL: Homepage, https://github.com/Uninett/Argus
6
6
  Author-email: Uninett Opensource <opensource@uninett.no>
@@ -59,7 +59,7 @@ Description-Content-Type: text/markdown
59
59
 
60
60
  # Argus
61
61
  [![test badge](https://github.com/Uninett/Argus/actions/workflows/python.yml/badge.svg)](https://github.com/Uninett/Argus/actions)
62
- [![codecov badge](https://codecov.io/gh/Uninett/Argus/branch/master/graph/badge.svg)](https://codecov.io/gh/Uninett/Argus)
62
+ [![codecov badge](https://codecov.io/gh/Uninett/Argus/branch/main/graph/badge.svg)](https://codecov.io/gh/Uninett/Argus)
63
63
  [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
64
64
  [![djLint](https://img.shields.io/badge/html%20style-djlint-blue.svg)](https://www.djlint.com)
65
65
  [![docs badge](https://readthedocs.org/projects/argus-server/badge/?version=latest&style=flat)](http://argus-server.rtfd.io/en/latest/)
@@ -320,12 +320,12 @@ Refer to the [tox.ini](tox.ini) file for further options.
320
320
 
321
321
  Do not ever remove these
322
322
 
323
- * master
323
+ * main
324
324
  * argus-demo
325
325
  * stable/SOMETHING
326
326
 
327
327
  The last branch-type is for backporting bugfixes and similar to older releases,
328
- bypassing master if necessary.
328
+ bypassing main if necessary.
329
329
 
330
330
 
331
331
  ## How to do maintenance
@@ -1,6 +1,6 @@
1
1
  # Argus
2
2
  [![test badge](https://github.com/Uninett/Argus/actions/workflows/python.yml/badge.svg)](https://github.com/Uninett/Argus/actions)
3
- [![codecov badge](https://codecov.io/gh/Uninett/Argus/branch/master/graph/badge.svg)](https://codecov.io/gh/Uninett/Argus)
3
+ [![codecov badge](https://codecov.io/gh/Uninett/Argus/branch/main/graph/badge.svg)](https://codecov.io/gh/Uninett/Argus)
4
4
  [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
5
5
  [![djLint](https://img.shields.io/badge/html%20style-djlint-blue.svg)](https://www.djlint.com)
6
6
  [![docs badge](https://readthedocs.org/projects/argus-server/badge/?version=latest&style=flat)](http://argus-server.rtfd.io/en/latest/)
@@ -261,12 +261,12 @@ Refer to the [tox.ini](tox.ini) file for further options.
261
261
 
262
262
  Do not ever remove these
263
263
 
264
- * master
264
+ * main
265
265
  * argus-demo
266
266
  * stable/SOMETHING
267
267
 
268
268
  The last branch-type is for backporting bugfixes and similar to older releases,
269
- bypassing master if necessary.
269
+ bypassing main if necessary.
270
270
 
271
271
 
272
272
  ## How to do maintenance
@@ -2,10 +2,10 @@ coverage:
2
2
  status:
3
3
  project:
4
4
  default:
5
- threshold: 90%
5
+ threshold: 1%
6
6
  patch:
7
7
  default:
8
- threshold: 90%
8
+ threshold: 1%
9
9
 
10
10
  ignore:
11
11
  - "manage.py"
@@ -67,6 +67,7 @@ server, such as:
67
67
  * Administration of Argus user accounts
68
68
  * Creating API authentication tokens for users
69
69
  * Defining new source systems to collect incidents from
70
+ * Creating and updating planned maintenance tasks
70
71
 
71
72
  Pick and choose
72
73
  ---------------
@@ -27,24 +27,29 @@ changed incidents.
27
27
  FilterWrapper
28
28
  -------------
29
29
 
30
- Base class, the important methods are ``incident_fits`` and ``event_fits``.
30
+ Base class, the important methods are ``incident_fits``, ``event_fits`` and
31
+ ``filter_fits``. The latter two take a single event. ``filter_fits`` checks
32
+ both ``event_fits`` and ``incident_fits``, in that order.
31
33
 
32
34
  FallbackFilterWrapper
33
35
  ---------------------
34
36
 
35
37
  Subclass of ``FilterWrapper``. Merges a filter with the filter in the setting
36
- ``ARGUS_FALLBACK_FILTER``.
38
+ :setting:`ARGUS_FALLBACK_FILTER`.
37
39
 
38
- ComplexFilterWrapper
39
- --------------------
40
+ PrecisionFilterWrapper
41
+ ----------------------
40
42
 
41
- OR's together multiple simple FilterWrappers, used by NotificationProfile.
43
+ AND's together multiple simple filters, using ``FilterWrapper`` by default. Not
44
+ used directly.
42
45
 
43
- ComplexFallbackFilterWrapper
44
- ----------------------------
46
+ Has the methods ``incident_fits`` and ``event_fits``, and ``filter_fits`` which
47
+ takes an event and checks both ``event_fits`` and ``incident_fits``, in that
48
+ order.
45
49
 
46
- Subclass of ``FilterWrapper``. Takes the setting ``ARGUS_FALLBACK_FILTER`` into
47
- account for each filter.
50
+ ``NotificationProfile`` has the subclass ``NotificationProfileFilterWrapper``,
51
+ which combines a ``PrecisionFilterWrapper`` with a ``FallbackFilterWrapper``.
52
+ It is thus affected by the setting :setting:`ARGUS_FALLBACK_FILTER`.
48
53
 
49
54
  ---------------------------------------
50
55
  Matching a filter to multiple incidents
@@ -20,7 +20,7 @@ Test by making a .dot-file
20
20
 
21
21
  To test if everything is installed correctly, run::
22
22
 
23
- python manage.py graph_models argus_auth argus_incident argus_notificationprofile \
23
+ python manage.py graph_models argus_auth argus_incident argus_notificationprofile argus_plannedmaintenance \
24
24
  --group-models -X Permission,AbstractUser,AbstractBaseUser,PermissionsMixin
25
25
 
26
26
  This will dump a `.dot-file <https://graphviz.org/doc/info/lang.html>`_, the
@@ -42,7 +42,7 @@ We need to have one more dependency installed: one of ``pygraphviz`` or
42
42
 
43
43
  To generate the final PNG in the correct location, run::
44
44
 
45
- python manage.py graph_models argus_auth argus_incident argus_notificationprofile \
45
+ python manage.py graph_models argus_auth argus_incident argus_notificationprofile argus_plannedmaintenance \
46
46
  --group-models -X Permission,AbstractUser,AbstractBaseUser,PermissionsMixin \
47
47
  -o docs/reference/img/ER_model.png
48
48
 
@@ -52,7 +52,7 @@ Use ``graphviz`` directly on a .dot-file
52
52
  1. Make sure you have graphviz installed, how is OS/distro dependent
53
53
  2. Generate the dot-file with::
54
54
 
55
- python manage.py graph_models argus_auth argus_incident argus_notificationprofile \
55
+ python manage.py graph_models argus_auth argus_incident argus_notificationprofile argus_plannedmaintenance \
56
56
  --group-models -X Permission,AbstractUser,AbstractBaseUser,PermissionsMixin \
57
57
  -o ER_model.dot
58
58
  3. Generate the PNG with ``dot``::
@@ -43,11 +43,11 @@ not needed to do this yet.
43
43
  Checklist
44
44
  ---------
45
45
 
46
- #. Ensure you're on the correct branch to be released. Either ``master`` or
46
+ #. Ensure you're on the correct branch to be released. Either ``main`` or
47
47
  newest stable, which has a name of the form ``stable/1.5.x``. Release from
48
48
  the stable branch only under exceptional circumstances. For instance:
49
49
  there's a critical bugfix for production and there's a lot of new stuff on
50
- master that is not ready to go.
50
+ main that is not ready to go.
51
51
 
52
52
  #. Check that there are no files that have not been commited:
53
53
 
@@ -16,4 +16,13 @@ python:S1192 - String literals should not be duplicated
16
16
  If it makes it more readable, for example if configuration is happening within the
17
17
  Python code, then we accept it with "This is better for readability".
18
18
 
19
+ python:S2208 - Wildcard imports should not be used
20
+ --------------------------------------------------
21
+
22
+ This is okay in settings files. Mark as false positive with "Django standard
23
+ practice for settings files". Notice that `sonarqube`_ ignores all ``#noqa``
24
+ so "#noqa: `F401`_, `F403`_" won't help.
25
+
19
26
  .. _sonarqube: https://www.sonarsource.com/products/sonarcloud/
27
+ .. _F401: https://www.flake8rules.com/rules/F401.html
28
+ .. _F403: https://www.flake8rules.com/rules/F403.html
@@ -55,7 +55,7 @@ Prep the ORIGIN repo
55
55
 
56
56
  git fetch TARGET
57
57
 
58
- 9. Merge ORIGIN-clone's "main" into feceiving's "master"::
58
+ 9. Merge ORIGIN-clone's "main" into receiving's "master"::
59
59
 
60
60
  git merge --allow-unrelated-histories TARGET/master
61
61
 
@@ -25,6 +25,7 @@ INSTALLED_APPS = [
25
25
  "argus.filter",
26
26
  "argus.notificationprofile",
27
27
  "argus.dev",
28
+ "argus.plannedmaintenance",
28
29
  ]
29
30
 
30
31
  MEDIA_PLUGINS = []
@@ -4,7 +4,7 @@ Writing your own notification plugin
4
4
  ====================================
5
5
 
6
6
  When writing a new notification plugin the plugins for
7
- `SMS-as-Email <https://github.com/Uninett/Argus/blob/master/src/argus/notificationprofile/media/sms_as_email.py>`_
7
+ `SMS-as-Email <https://github.com/Uninett/Argus/blob/main/src/argus/notificationprofile/media/sms_as_email.py>`_
8
8
  and
9
9
  `Teams <https://github.com/Uninett/argus_notification_msteams/blob/main/src/argus_notification_msteams.py>`_
10
10
  can be used as guides.
@@ -304,7 +304,7 @@ start_time_and_age
304
304
  :From: start_time + age
305
305
  :Name: start_time_and_age
306
306
  :Description: When the incident started, and how long it has been ongoing.
307
- :Redundant with: start_time
307
+ :Redundant with: start_time, age
308
308
 
309
309
  age
310
310
  :From: age
@@ -89,6 +89,18 @@ Handling notifications
89
89
  Holds a ``DestinationConfig``'s type. The ``installed``-field is updated
90
90
  on startup to keep track of which ``notification plugin``\s are installed.
91
91
 
92
+ Handling maintenance work
93
+ =========================
94
+
95
+ .. glossary::
96
+
97
+ PlannedMaintenanceTask
98
+ Holds who created the task and when (not editable), the start and end time
99
+ of such a task, and a description of what this maintenance work entails and/or
100
+ why it is happening.
101
+
102
+ It also holds a collection of ``Filter``\s that describe what kind of events are
103
+ covered by that planned maintenance.
92
104
 
93
105
  ER diagram
94
106
  ==========
@@ -0,0 +1,43 @@
1
+ ===================
2
+ Planned maintenance
3
+ ===================
4
+
5
+ To interact with planned maintenance tasks visit the admin interface at:
6
+ ``/admin/argus_plannedmaintenance/plannedmaintenancetask/``.
7
+
8
+ A planned maintenance task consists of a start time and an end time (where the latter
9
+ is by default infinity). Those define the period during which planned work is happening
10
+ and when notifications for events, for example for affected devices, should not be
11
+ sent.
12
+
13
+ Filters are used to define exactly which kind of events notifications should be
14
+ suppressed for. As it is for notification profiles, if multiple filters are connected
15
+ to one planned maintenance task, then that tasks will only lead to a notification being
16
+ suppressed if all of the filters apply to that event.
17
+
18
+ .. warning:: When notifications are suppressed during a planned maintenance task and
19
+ that task ends, while the incident is still open, you will not receive a
20
+ notification.
21
+ It is your responsibility to check that everything is resolved when a planned
22
+ maintenance task is finished!
23
+
24
+ The planned maintenance task list
25
+ =================================
26
+
27
+ In the admin you can view a list of planned maintenance tasks, filter them and search
28
+ for specific ones.
29
+
30
+ You can also select multiple planned maintenance tasks and delete them or mark them as
31
+ finished. Marking a task as finished will set an open task's end time to the current
32
+ time. If you mark a task as finished that has not begun yet, then that task will be
33
+ deleted.
34
+
35
+ Adding/editing a planned maintenance task
36
+ =========================================
37
+
38
+ If you want to add a planned maintenance task click the
39
+ ``Add planned maintenance task`` button. If you want to see details for a specific
40
+ task or edit it, click the username in the column ``created by``.
41
+
42
+ You can mark an existing task as finished and see its history by clicking on the
43
+ buttons in the top right corner of the edit page.
@@ -0,0 +1 @@
1
+ django>=5.2.9,<6.0
@@ -2,7 +2,7 @@
2
2
  # This file is autogenerated by pip-compile with Python 3.12
3
3
  # by the following command:
4
4
  #
5
- # pip-compile --output-file=requirements-django52.txt constraints.txt pyproject.toml requirements/django52.txt
5
+ # pip-compile --no-strip-extras --output-file=requirements-django52.txt constraints.txt pyproject.toml requirements/django52.txt
6
6
  #
7
7
  annotated-types==0.7.0
8
8
  # via pydantic
@@ -37,7 +37,7 @@ defusedxml==0.7.1
37
37
  # social-auth-core
38
38
  dj-database-url==2.3.0
39
39
  # via argus-server (pyproject.toml)
40
- django==5.2.8
40
+ django==5.2.9
41
41
  # via
42
42
  # -r requirements/django52.txt
43
43
  # argus-server (pyproject.toml)
@@ -162,7 +162,7 @@ tzdata==2025.2
162
162
  # via faker
163
163
  uritemplate==4.1.1
164
164
  # via drf-spectacular
165
- urllib3==2.5.0
165
+ urllib3==2.6.0
166
166
  # via
167
167
  # -r constraints.txt
168
168
  # requests
@@ -2,7 +2,7 @@
2
2
  # This file is autogenerated by pip-compile with Python 3.12
3
3
  # by the following command:
4
4
  #
5
- # pip-compile --output-file=requirements-django52.txt constraints.txt pyproject.toml requirements/django52.txt
5
+ # pip-compile --no-strip-extras --output-file=requirements-django52.txt constraints.txt pyproject.toml requirements/django52.txt
6
6
  #
7
7
  annotated-types==0.7.0
8
8
  # via pydantic
@@ -37,7 +37,7 @@ defusedxml==0.7.1
37
37
  # social-auth-core
38
38
  dj-database-url==2.3.0
39
39
  # via argus-server (pyproject.toml)
40
- django==5.2.8
40
+ django==5.2.9
41
41
  # via
42
42
  # -r requirements/django52.txt
43
43
  # argus-server (pyproject.toml)
@@ -162,7 +162,7 @@ tzdata==2025.2
162
162
  # via faker
163
163
  uritemplate==4.1.1
164
164
  # via drf-spectacular
165
- urllib3==2.5.0
165
+ urllib3==2.6.0
166
166
  # via
167
167
  # -r constraints.txt
168
168
  # requests
@@ -16,7 +16,6 @@ class BaseUserFactory(factory.django.DjangoModelFactory):
16
16
 
17
17
  is_staff = False
18
18
  is_superuser = False
19
- password = factory.PostGenerationMethodCall("set_password", "defaultpassword")
20
19
 
21
20
 
22
21
  class PersonUserFactory(BaseUserFactory):
@@ -30,6 +29,7 @@ class PersonUserFactory(BaseUserFactory):
30
29
  lambda o: "%s.%s@%s" % (o.first_name.lower(), o.last_name.lower(), factory.Faker("safe_domain_name"))
31
30
  )
32
31
  username = email
32
+ password = factory.django.Password("very SECRET P455w0rD")
33
33
 
34
34
 
35
35
  class SourceUserFactory(BaseUserFactory):
@@ -40,6 +40,7 @@ class SourceUserFactory(BaseUserFactory):
40
40
  username = factory.Sequence(lambda n: "source_%d" % n)
41
41
  is_staff = False
42
42
  is_superuser = False
43
+ password = factory.django.Password(None)
43
44
 
44
45
 
45
46
  class AdminUserFactory(PersonUserFactory):
@@ -8,6 +8,7 @@ from django.contrib.auth import get_user_model
8
8
  from django.core.exceptions import ValidationError
9
9
  from django.core.management import CommandError, call_command
10
10
  from django.core.management.base import BaseCommand
11
+ from django.db.utils import IntegrityError
11
12
 
12
13
  from argus.dev.utils import get_json_from_file
13
14
  from argus.incident.constants import Level
@@ -125,5 +126,5 @@ class Command(BaseCommand):
125
126
 
126
127
  try:
127
128
  create_fake_incident(**incident)
128
- except (ValueError, ValidationError) as e:
129
+ except (IntegrityError, ValueError, ValidationError) as e:
129
130
  self.stderr.write(self.style.ERROR(str(e)))
@@ -1,6 +1,9 @@
1
1
  from django.core.management.base import BaseCommand
2
+ from django.db import transaction
2
3
 
4
+ from argus.auth.factories import SourceUserFactory
3
5
  from argus.incident.factories import SourceSystemFactory, SourceSystemTypeFactory
6
+ from argus.incident.models import SourceSystem
4
7
 
5
8
 
6
9
  class Command(BaseCommand):
@@ -15,5 +18,9 @@ class Command(BaseCommand):
15
18
  def handle(self, *args, **options):
16
19
  source = options["source"]
17
20
  source_type = options.get("source_type") or "argus"
18
- sst = SourceSystemTypeFactory(name=source_type.lower())
19
- SourceSystemFactory(name=source, type=sst)
21
+ if SourceSystem.objects.filter(name=source, type__name=source_type).exists():
22
+ return
23
+ with transaction.atomic():
24
+ user = SourceUserFactory(username=source)
25
+ sst = SourceSystemTypeFactory(name=source_type.lower())
26
+ SourceSystemFactory(user=user, name=source, type=sst)
@@ -0,0 +1,25 @@
1
+ from django.conf import settings
2
+ from django.core.checks import Warning
3
+
4
+ from rest_framework import serializers
5
+
6
+ from argus.filter.validators import validate_jsonfilter
7
+
8
+
9
+ __all__ = ["fallback_filter_check"]
10
+
11
+
12
+ def fallback_filter_check(app_configs, **kwargs):
13
+ fallback_filter = getattr(settings, "ARGUS_FALLBACK_FILTER", {})
14
+ try:
15
+ validate_jsonfilter(fallback_filter)
16
+ except serializers.ValidationError:
17
+ warning = Warning(
18
+ 'The ARGUS_FALLBACK_FILTER setting is invalid and has been set to "{}"',
19
+ hint="See the docs for the format of the ARGUS_FALLBACK_FILTER setting",
20
+ obj=fallback_filter,
21
+ id="argus_filter.W001",
22
+ )
23
+ return [warning]
24
+ else:
25
+ return []
@@ -1,8 +1,7 @@
1
1
  from .filterwrapper import ( # noqa: F401
2
2
  FilterWrapper,
3
3
  FallbackFilterWrapper,
4
- ComplexFilterWrapper,
5
- ComplexFallbackFilterWrapper,
4
+ PrecisionFilterWrapper,
6
5
  )
7
6
  from .queryset_filters import QuerySetFilter # noqa: F401
8
7
  from .filters import ( # noqa: F401
@@ -9,14 +9,15 @@ from argus.compat import StrEnum
9
9
 
10
10
 
11
11
  if TYPE_CHECKING:
12
+ from django.db.models import Model
13
+ from django.db.models.query import QuerySet
12
14
  from argus.incident.models import Event, Incident
13
15
 
14
16
 
15
17
  __all__ = [
16
18
  "FilterWrapper",
17
19
  "FallbackFilterWrapper",
18
- "ComplexFilterWrapper",
19
- "ComplexFallbackFilterWrapper",
20
+ "PrecisionFilterWrapper",
20
21
  ]
21
22
 
22
23
 
@@ -120,6 +121,13 @@ class FilterWrapper:
120
121
  LOG.debug("Filter: %s: HIT!", self)
121
122
  return not any_failed
122
123
 
124
+ def filter_fits(self, event) -> bool:
125
+ event_fits = self.event_fits(event)
126
+ incident_fits = self.incident_fits(event.incident)
127
+ if event_fits and incident_fits:
128
+ return True
129
+ return False
130
+
123
131
 
124
132
  class FallbackFilterWrapper(FilterWrapper):
125
133
  "Changed by ARGUS_FALLBACK_FILTER setting"
@@ -133,36 +141,37 @@ class FallbackFilterWrapper(FilterWrapper):
133
141
  return value if value else self.fallback_filter.get(key, None)
134
142
 
135
143
 
136
- class ComplexFilterWrapper:
144
+ class PrecisionFilterWrapper:
145
+ "Combine several filters together via Boolean AND for higher precision"
146
+
137
147
  filterwrapper = FilterWrapper
138
148
 
139
- def __init__(self, **kwargs):
140
- self.profile = kwargs.pop("profile", None)
149
+ def __init__(self, model_or_queryset: Model | QuerySet, filterwrapper: Optional[FilterWrapper] = None):
150
+ # subclasses accepting model needs to pass on the manager in super()
151
+ self.queryset = model_or_queryset
152
+ if filterwrapper:
153
+ self.filterwrapper = filterwrapper
141
154
 
142
155
  def incident_fits(self, incident: Incident) -> bool:
143
156
  """Check against multiple filters
144
157
 
145
158
  The filters are AND-ed together for greater precision.
146
159
  """
147
- if not self.profile.active:
148
- return False
149
- is_selected_by_time = self.profile.timeslot.timestamp_is_within_time_recurrences(incident.start_time)
150
- if not is_selected_by_time:
151
- return False
152
- for f in self.profile.filters.only("filter"):
160
+ for f in self.queryset.only("filter"):
153
161
  if not self.filterwrapper(f.filter).incident_fits(incident):
154
162
  return False
155
163
  return True
156
164
 
157
165
  def event_fits(self, event: Event) -> bool:
158
- if not self.profile.active:
159
- return False
160
166
  # return as early as possible
161
- for f in self.profile.filters.only("filter"):
167
+ for f in self.queryset.only("filter"):
162
168
  if FilterWrapper(f.filter).event_fits(event):
163
169
  return True
164
170
  return False
165
171
 
166
-
167
- class ComplexFallbackFilterWrapper(ComplexFilterWrapper):
168
- filterwrapper = FallbackFilterWrapper
172
+ def filter_fits(self, event: Event) -> bool:
173
+ event_fits = self.event_fits(event)
174
+ incident_fits = self.incident_fits(event.incident)
175
+ if event_fits and incident_fits:
176
+ return True
177
+ return False