argus-server 2.2.1__tar.gz → 2.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (549) hide show
  1. {argus_server-2.2.1 → argus_server-2.3.0}/.mailmap +3 -0
  2. {argus_server-2.2.1 → argus_server-2.3.0}/CHANGELOG.md +96 -0
  3. {argus_server-2.2.1 → argus_server-2.3.0}/CONTRIBUTORS.md +2 -0
  4. {argus_server-2.2.1 → argus_server-2.3.0}/Dockerfile +6 -2
  5. {argus_server-2.2.1 → argus_server-2.3.0}/Makefile +5 -2
  6. {argus_server-2.2.1 → argus_server-2.3.0}/NOTES.md +64 -0
  7. {argus_server-2.2.1 → argus_server-2.3.0}/PKG-INFO +1 -1
  8. {argus_server-2.2.1 → argus_server-2.3.0}/docs/customization/htmx-frontend.rst +28 -13
  9. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/howtos-for-github.rst +1 -1
  10. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/htmx-frontend/override_templates.rst +1 -1
  11. argus_server-2.3.0/docs/development/howtos/sonarqube.rst +19 -0
  12. argus_server-2.3.0/docs/development/styleguide.rst +23 -0
  13. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development.rst +1 -0
  14. {argus_server-2.2.1 → argus_server-2.3.0}/docs/integrations/glue-services/index.rst +11 -0
  15. {argus_server-2.2.1 → argus_server-2.3.0}/docs/reference/htmx-frontend.rst +128 -4
  16. {argus_server-2.2.1 → argus_server-2.3.0}/docs/reference/site-specific-settings.rst +28 -2
  17. {argus_server-2.2.1 → argus_server-2.3.0}/docs/user-manual.rst +37 -13
  18. {argus_server-2.2.1 → argus_server-2.3.0}/pyproject.toml +6 -1
  19. {argus_server-2.2.1 → argus_server-2.3.0}/requirements-django52.txt +3 -3
  20. {argus_server-2.2.1 → argus_server-2.3.0}/requirements.txt +3 -3
  21. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/models.py +2 -2
  22. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/utils.py +3 -3
  23. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/filter/filterwrapper.py +4 -0
  24. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/constants.py +0 -8
  25. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/dateformat/constants.py +8 -8
  26. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/defaults.py +2 -2
  27. argus_server-2.3.0/src/argus/htmx/forms.py +73 -0
  28. argus_server-2.3.0/src/argus/htmx/incident/columns.py +250 -0
  29. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/incident/filter.py +29 -15
  30. argus_server-2.3.0/src/argus/htmx/incident/forms/base.py +101 -0
  31. argus_server-2.3.0/src/argus/htmx/incident/forms/incident_actions.py +20 -0
  32. argus_server-2.3.0/src/argus/htmx/incident/forms/incident_filters.py +135 -0
  33. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/incident/utils.py +2 -2
  34. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/incident/views.py +91 -32
  35. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/notificationprofile/views.py +1 -0
  36. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/static/styles.css +302 -22
  37. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/tailwindtheme/config.py +1 -0
  38. argus_server-2.3.0/src/argus/htmx/templates/django/forms/errors/dict/ul.html +5 -0
  39. argus_server-2.3.0/src/argus/htmx/templates/django/forms/errors/list/ul.html +6 -0
  40. argus_server-2.3.0/src/argus/htmx/templates/django/forms/field.html +20 -0
  41. argus_server-2.3.0/src/argus/htmx/templates/django/forms/label.html +13 -0
  42. argus_server-2.3.0/src/argus/htmx/templates/django/forms/widgets/checkbox.html +6 -0
  43. argus_server-2.3.0/src/argus/htmx/templates/django/forms/widgets/checkbox_option.html +12 -0
  44. argus_server-2.3.0/src/argus/htmx/templates/django/forms/widgets/classless_attrs.html +9 -0
  45. argus_server-2.3.0/src/argus/htmx/templates/django/forms/widgets/date.html +6 -0
  46. argus_server-2.3.0/src/argus/htmx/templates/django/forms/widgets/datetime.html +6 -0
  47. argus_server-2.3.0/src/argus/htmx/templates/django/forms/widgets/input.html +6 -0
  48. argus_server-2.3.0/src/argus/htmx/templates/django/forms/widgets/radio_option.html +12 -0
  49. argus_server-2.3.0/src/argus/htmx/templates/django/forms/widgets/range.html +5 -0
  50. argus_server-2.3.0/src/argus/htmx/templates/django/forms/widgets/select.html +12 -0
  51. argus_server-2.3.0/src/argus/htmx/templates/django/forms/widgets/time.html +8 -0
  52. argus_server-2.3.0/src/argus/htmx/templates/htmx/base.html +51 -0
  53. argus_server-2.3.0/src/argus/htmx/templates/htmx/components/_page_title.html +9 -0
  54. argus_server-2.3.0/src/argus/htmx/templates/htmx/components/incident_list_refresh_info_select.html +18 -0
  55. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/destination/destination_list.html +1 -0
  56. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_incident_filterbox.html +16 -13
  57. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_incident_list_refresh_info.html +5 -18
  58. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_incident_table.html +1 -1
  59. argus_server-2.3.0/src/argus/htmx/templates/htmx/incident/_incident_table_cell_wrapper_default.html +12 -0
  60. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_incident_table_cell_wrapper_link_to_details.html +1 -0
  61. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_incident_table_paginator_pageitem.html +2 -2
  62. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_ack.html +1 -0
  63. argus_server-2.3.0/src/argus/htmx/templates/htmx/incident/cells/_incident_actions.html +2 -0
  64. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_checkbox.html +1 -0
  65. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_color_status.html +1 -0
  66. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_combined_status.html +1 -0
  67. argus_server-2.3.0/src/argus/htmx/templates/htmx/incident/cells/_incident_description.html +2 -0
  68. argus_server-2.3.0/src/argus/htmx/templates/htmx/incident/cells/_incident_filterable_column_header.html +13 -0
  69. argus_server-2.3.0/src/argus/htmx/templates/htmx/incident/cells/_incident_filterable_column_header_content.html +40 -0
  70. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_level.html +1 -0
  71. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_list_select_all_checkbox_header.html +1 -0
  72. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_pk.html +1 -0
  73. argus_server-2.3.0/src/argus/htmx/templates/htmx/incident/cells/_incident_source.html +2 -0
  74. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_start_time.html +1 -0
  75. argus_server-2.3.0/src/argus/htmx/templates/htmx/incident/cells/_incident_start_time_header.html +2 -0
  76. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_status.html +1 -0
  77. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_tag.html +1 -0
  78. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/cells/_incident_ticket.html +1 -0
  79. argus_server-2.3.0/src/argus/htmx/templates/htmx/incident/cells/search_fields/input_search.html +7 -0
  80. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/notificationprofile/_notificationprofile_form.html +2 -2
  81. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/notificationprofile/_notificationprofile_form_div.html +2 -2
  82. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/notificationprofile/base.html +1 -1
  83. argus_server-2.3.0/src/argus/htmx/templates/htmx/styleguide.html +202 -0
  84. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/timeslot/base.html +1 -1
  85. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/timeslot/timerecurrence_div.html +1 -1
  86. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/user/_dateformat_dropdown.html +3 -3
  87. argus_server-2.3.0/src/argus/htmx/templates/htmx/user/_incidents_table_columns_dropdown.html +30 -0
  88. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/user/_page_size_dropdown.html +3 -3
  89. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/user/_theme_dropdown.html +3 -3
  90. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/user/_user_menu.html +3 -3
  91. argus_server-2.3.0/src/argus/htmx/templates/htmx/user/preference_field_form.html +19 -0
  92. argus_server-2.3.0/src/argus/htmx/templates/htmx/user/preferences_list.html +14 -0
  93. argus_server-2.3.0/src/argus/htmx/templates/htmx/user/radio_option.html +10 -0
  94. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/registration/login.html +1 -9
  95. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templatetags/argus_htmx.py +12 -2
  96. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/timeslot/views.py +0 -1
  97. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/urls.py +2 -1
  98. argus_server-2.3.0/src/argus/htmx/user/factories.py +13 -0
  99. argus_server-2.3.0/src/argus/htmx/user/preferences/forms.py +195 -0
  100. argus_server-2.3.0/src/argus/htmx/user/preferences/models.py +40 -0
  101. argus_server-2.3.0/src/argus/htmx/user/preferences/utils.py +14 -0
  102. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/user/views.py +7 -1
  103. argus_server-2.3.0/src/argus/htmx/views.py +39 -0
  104. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/admin.py +1 -0
  105. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/media/__init__.py +24 -4
  106. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/media/base.py +41 -6
  107. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/media/email.py +19 -24
  108. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/media/sms_as_email.py +11 -15
  109. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/util/admin_utils.py +2 -2
  110. argus_server-2.3.0/src/argus/version.py +1 -0
  111. {argus_server-2.2.1 → argus_server-2.3.0}/tests/auth/models.py +2 -1
  112. {argus_server-2.2.1 → argus_server-2.3.0}/tests/filter/test_filterwrapper.py +43 -0
  113. {argus_server-2.2.1 → argus_server-2.3.0}/tests/htmx/incident/test_customization.py +4 -4
  114. argus_server-2.3.0/tests/htmx/incident/test_forms_incident_filters.py +112 -0
  115. argus_server-2.3.0/tests/htmx/incident/test_views.py +58 -0
  116. argus_server-2.2.1/tests/htmx/test_incident.py → argus_server-2.3.0/tests/htmx/test_incident_columns_rendering.py +11 -4
  117. argus_server-2.3.0/tests/htmx/test_templatetags.py +20 -0
  118. {argus_server-2.2.1 → argus_server-2.3.0}/tests/notificationprofile/test_media.py +21 -5
  119. argus_server-2.3.0/tests/util/__init__.py +0 -0
  120. argus_server-2.2.1/docker-entrypoint.sh +0 -7
  121. argus_server-2.2.1/manage.py +0 -24
  122. argus_server-2.2.1/src/argus/htmx/incident/customization.py +0 -122
  123. argus_server-2.2.1/src/argus/htmx/incident/forms.py +0 -52
  124. argus_server-2.2.1/src/argus/htmx/templates/django/forms/div.html +0 -28
  125. argus_server-2.2.1/src/argus/htmx/templates/htmx/base.html +0 -47
  126. argus_server-2.2.1/src/argus/htmx/templates/htmx/incident/_incident_table_cell_wrapper_default.html +0 -7
  127. argus_server-2.2.1/src/argus/htmx/templates/htmx/incident/cells/_incident_actions.html +0 -1
  128. argus_server-2.2.1/src/argus/htmx/templates/htmx/incident/cells/_incident_description.html +0 -1
  129. argus_server-2.2.1/src/argus/htmx/templates/htmx/incident/cells/_incident_filterable_column_header.html +0 -32
  130. argus_server-2.2.1/src/argus/htmx/templates/htmx/incident/cells/_incident_source.html +0 -1
  131. argus_server-2.2.1/src/argus/htmx/templates/htmx/incident/cells/_incident_start_time_header.html +0 -1
  132. argus_server-2.2.1/src/argus/htmx/templates/htmx/user/_user_menu_user_preferences.html +0 -10
  133. argus_server-2.2.1/src/argus/htmx/templates/htmx/user/preferences.html +0 -22
  134. argus_server-2.2.1/src/argus/htmx/themes/constants.py +0 -13
  135. argus_server-2.2.1/src/argus/htmx/user/preferences/models.py +0 -75
  136. argus_server-2.2.1/src/argus/htmx/views.py +0 -9
  137. argus_server-2.2.1/src/argus/version.py +0 -1
  138. {argus_server-2.2.1 → argus_server-2.3.0}/.git-blame-ignore-revs +0 -0
  139. {argus_server-2.2.1 → argus_server-2.3.0}/.gitattributes +0 -0
  140. {argus_server-2.2.1 → argus_server-2.3.0}/.gitignore +0 -0
  141. {argus_server-2.2.1 → argus_server-2.3.0}/.pre-commit-config.yaml +0 -0
  142. {argus_server-2.2.1 → argus_server-2.3.0}/.readthedocs.yaml +0 -0
  143. {argus_server-2.2.1 → argus_server-2.3.0}/.sonarcloud.properties +0 -0
  144. {argus_server-2.2.1 → argus_server-2.3.0}/CONTRIBUTING.rst +0 -0
  145. {argus_server-2.2.1 → argus_server-2.3.0}/LICENSE +0 -0
  146. {argus_server-2.2.1 → argus_server-2.3.0}/MAINTAINING.rst +0 -0
  147. {argus_server-2.2.1 → argus_server-2.3.0}/README.md +0 -0
  148. {argus_server-2.2.1 → argus_server-2.3.0}/UPGRADING.md +0 -0
  149. {argus_server-2.2.1 → argus_server-2.3.0}/changelog.d/.gitkeep +0 -0
  150. {argus_server-2.2.1 → argus_server-2.3.0}/cmd.sh-template +0 -0
  151. {argus_server-2.2.1 → argus_server-2.3.0}/codecov.yml +0 -0
  152. {argus_server-2.2.1 → argus_server-2.3.0}/constraints.txt +0 -0
  153. {argus_server-2.2.1 → argus_server-2.3.0}/docker/Dockerfile +0 -0
  154. {argus_server-2.2.1 → argus_server-2.3.0}/docker/README.md +0 -0
  155. {argus_server-2.2.1 → argus_server-2.3.0}/docker/docker-entrypoint.sh +0 -0
  156. {argus_server-2.2.1 → argus_server-2.3.0}/docker/dockersettings.py +0 -0
  157. {argus_server-2.2.1 → argus_server-2.3.0}/docker-compose.yml +0 -0
  158. {argus_server-2.2.1 → argus_server-2.3.0}/docs/Makefile +0 -0
  159. {argus_server-2.2.1 → argus_server-2.3.0}/docs/_exts/djangodocs.py +0 -0
  160. {argus_server-2.2.1 → argus_server-2.3.0}/docs/_static/.gitkeep +0 -0
  161. {argus_server-2.2.1 → argus_server-2.3.0}/docs/_templates/.gitkeep +0 -0
  162. {argus_server-2.2.1 → argus_server-2.3.0}/docs/about-argus.rst +0 -0
  163. {argus_server-2.2.1 → argus_server-2.3.0}/docs/conf.py +0 -0
  164. {argus_server-2.2.1 → argus_server-2.3.0}/docs/customization.rst +0 -0
  165. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/add-more-preferences.rst +0 -0
  166. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/change-settings.rst +0 -0
  167. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/changelog-entry.rst +0 -0
  168. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/commit-messages.rst +0 -0
  169. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/customizing-filtering.rst +0 -0
  170. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/federated-logins.rst +0 -0
  171. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/howtos-for-git.rst +0 -0
  172. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/htmx-frontend/column_for_specific_ack_group.rst +0 -0
  173. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/htmx-frontend/column_for_specific_tag.rst +0 -0
  174. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/htmx-frontend/custom-incident-actions.rst +0 -0
  175. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/htmx-frontend/customize-filtering.rst +0 -0
  176. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/htmx-frontend/dependencies.rst +0 -0
  177. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/htmx-frontend/font_awesome.rst +0 -0
  178. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/htmx-frontend.rst +0 -0
  179. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/notification-system-testing.rst +0 -0
  180. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/recover-from-migration-trouble.rst +0 -0
  181. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/regenerate-the-ER-diagram.rst +0 -0
  182. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/release-checklist.rst +0 -0
  183. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/toggle-django-debug-toolbar.rst +0 -0
  184. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/update-contributors.rst +0 -0
  185. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos/vendor-a-repo.rst +0 -0
  186. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/howtos.rst +0 -0
  187. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/makefile-rules.rst +0 -0
  188. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/management-commands.rst +0 -0
  189. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/notes.rst +0 -0
  190. {argus_server-2.2.1 → argus_server-2.3.0}/docs/development/troubleshooting.rst +0 -0
  191. {argus_server-2.2.1 → argus_server-2.3.0}/docs/django_settings.py +0 -0
  192. {argus_server-2.2.1 → argus_server-2.3.0}/docs/img/default_timeslot.png +0 -0
  193. {argus_server-2.2.1 → argus_server-2.3.0}/docs/img/destinations_view.png +0 -0
  194. {argus_server-2.2.1 → argus_server-2.3.0}/docs/img/example_timeslot.png +0 -0
  195. {argus_server-2.2.1 → argus_server-2.3.0}/docs/img/filter_selector.png +0 -0
  196. {argus_server-2.2.1 → argus_server-2.3.0}/docs/img/incident_details_view.png +0 -0
  197. {argus_server-2.2.1 → argus_server-2.3.0}/docs/img/incidents_filter.png +0 -0
  198. {argus_server-2.2.1 → argus_server-2.3.0}/docs/img/incidents_page.png +0 -0
  199. {argus_server-2.2.1 → argus_server-2.3.0}/docs/img/new_notification_profile.png +0 -0
  200. {argus_server-2.2.1 → argus_server-2.3.0}/docs/img/notification_profiles.png +0 -0
  201. {argus_server-2.2.1 → argus_server-2.3.0}/docs/img/synced_destination_delete_error.png +0 -0
  202. {argus_server-2.2.1 → argus_server-2.3.0}/docs/img/timeslots_view.png +0 -0
  203. {argus_server-2.2.1 → argus_server-2.3.0}/docs/img/unsaved_recurrence.png +0 -0
  204. {argus_server-2.2.1 → argus_server-2.3.0}/docs/img/user_menu.png +0 -0
  205. {argus_server-2.2.1 → argus_server-2.3.0}/docs/index.rst +0 -0
  206. {argus_server-2.2.1 → argus_server-2.3.0}/docs/integrations/_note.rst +0 -0
  207. {argus_server-2.2.1 → argus_server-2.3.0}/docs/integrations/glue-services/writing-glueservices.rst +0 -0
  208. {argus_server-2.2.1 → argus_server-2.3.0}/docs/integrations/index.rst +0 -0
  209. {argus_server-2.2.1 → argus_server-2.3.0}/docs/integrations/notifications/email-plugin.rst +0 -0
  210. {argus_server-2.2.1 → argus_server-2.3.0}/docs/integrations/notifications/index.rst +0 -0
  211. {argus_server-2.2.1 → argus_server-2.3.0}/docs/integrations/notifications/sms-plugin.rst +0 -0
  212. {argus_server-2.2.1 → argus_server-2.3.0}/docs/integrations/notifications/writing-notification-plugins.rst +0 -0
  213. {argus_server-2.2.1 → argus_server-2.3.0}/docs/integrations/ticket-systems/index.rst +0 -0
  214. {argus_server-2.2.1 → argus_server-2.3.0}/docs/integrations/ticket-systems/writing-ticket-system-plugins.rst +0 -0
  215. {argus_server-2.2.1 → argus_server-2.3.0}/docs/make.bat +0 -0
  216. {argus_server-2.2.1 → argus_server-2.3.0}/docs/reference/admin.rst +0 -0
  217. {argus_server-2.2.1 → argus_server-2.3.0}/docs/reference/api/v2.rst +0 -0
  218. {argus_server-2.2.1 → argus_server-2.3.0}/docs/reference/api.rst +0 -0
  219. {argus_server-2.2.1 → argus_server-2.3.0}/docs/reference/authentication.rst +0 -0
  220. {argus_server-2.2.1 → argus_server-2.3.0}/docs/reference/glossary.rst +0 -0
  221. {argus_server-2.2.1 → argus_server-2.3.0}/docs/reference/img/ER_model.png +0 -0
  222. {argus_server-2.2.1 → argus_server-2.3.0}/docs/reference/models.rst +0 -0
  223. {argus_server-2.2.1 → argus_server-2.3.0}/docs/reference.rst +0 -0
  224. {argus_server-2.2.1 → argus_server-2.3.0}/requirements/dev.txt +0 -0
  225. {argus_server-2.2.1 → argus_server-2.3.0}/requirements/django52.txt +0 -0
  226. {argus_server-2.2.1 → argus_server-2.3.0}/requirements/please-pip-sync.txt +0 -0
  227. {argus_server-2.2.1 → argus_server-2.3.0}/requirements/test.txt +0 -0
  228. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/__init__.py +0 -0
  229. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/__init__.py +0 -0
  230. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/admin.py +0 -0
  231. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/apps.py +0 -0
  232. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/authentication.py +0 -0
  233. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/context_processors.py +0 -0
  234. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/drftoken/__init__.py +0 -0
  235. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/drftoken/serializers.py +0 -0
  236. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/drftoken/urls.py +0 -0
  237. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/drftoken/views.py +0 -0
  238. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/factories.py +0 -0
  239. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/knox/__init__.py +0 -0
  240. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/knox/serializers.py +0 -0
  241. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/knox/urls.py +0 -0
  242. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/knox/views.py +0 -0
  243. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/management/__init__.py +0 -0
  244. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/management/commands/__init__.py +0 -0
  245. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/management/commands/changeuser.py +0 -0
  246. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/management/commands/createuser.py +0 -0
  247. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/management/commands/grantsuperuser.py +0 -0
  248. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/management/commands/revokesuperuser.py +0 -0
  249. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/management/commands/setpassword.py +0 -0
  250. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/migrations/0001_initial.py +0 -0
  251. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/migrations/0002_alter_user_first_name.py +0 -0
  252. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/migrations/0002_squashed_auth_20250512_add_preferences_model.py +0 -0
  253. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/migrations/0003_delete_phonenumber.py +0 -0
  254. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/migrations/0004_add_preferences_model.py +0 -0
  255. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/migrations/__init__.py +0 -0
  256. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/serializers.py +0 -0
  257. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/urls.py +0 -0
  258. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/auth/views.py +0 -0
  259. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/base/__init__.py +0 -0
  260. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/base/apps.py +0 -0
  261. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/base/static/favicon.svg +0 -0
  262. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/base/templates/base.html +0 -0
  263. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/base/templates/index.html +0 -0
  264. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/compat.py +0 -0
  265. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/dev/__init__.py +0 -0
  266. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/dev/apps.py +0 -0
  267. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/dev/management/__init__.py +0 -0
  268. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/dev/management/commands/__init__.py +0 -0
  269. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/dev/management/commands/bulk_incidents.py +0 -0
  270. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/dev/management/commands/check_token_expiry.py +0 -0
  271. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/dev/management/commands/close_incident.py +0 -0
  272. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/dev/management/commands/create_fake_incident.py +0 -0
  273. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/dev/management/commands/create_source.py +0 -0
  274. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/dev/management/commands/gen_secret_key.py +0 -0
  275. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/dev/management/commands/initial_setup.py +0 -0
  276. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/dev/management/commands/list_filters.py +0 -0
  277. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/dev/management/commands/stresstest.py +0 -0
  278. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/dev/management/commands/toggle_profile_activation.py +0 -0
  279. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/dev/utils.py +0 -0
  280. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/drf/__init__.py +0 -0
  281. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/drf/permissions.py +0 -0
  282. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/filter/__init__.py +0 -0
  283. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/filter/apps.py +0 -0
  284. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/filter/checks.py +0 -0
  285. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/filter/default.py +0 -0
  286. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/filter/factories.py +0 -0
  287. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/filter/filters.py +0 -0
  288. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/filter/primitive_serializers.py +0 -0
  289. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/filter/queryset_filters.py +0 -0
  290. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/filter/serializers.py +0 -0
  291. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/filter/swappable/__init__.py +0 -0
  292. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/filter/swappable/serializers.py +0 -0
  293. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/filter/validators.py +0 -0
  294. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/__init__.py +0 -0
  295. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/appconfig.py +0 -0
  296. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/apps.py +0 -0
  297. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/auth/__init__.py +0 -0
  298. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/auth/views.py +0 -0
  299. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/checks.py +0 -0
  300. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/context_processors.py +0 -0
  301. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/dateformat/__init__.py +0 -0
  302. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/destination/__init__.py +0 -0
  303. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/destination/forms.py +0 -0
  304. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/destination/urls.py +0 -0
  305. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/destination/views.py +0 -0
  306. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/htmx_urls.py +0 -0
  307. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/incident/__init__.py +0 -0
  308. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/incident/constants.py +0 -0
  309. {argus_server-2.2.1/src/argus/htmx/management → argus_server-2.3.0/src/argus/htmx/incident/forms}/__init__.py +0 -0
  310. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/incident/urls.py +0 -0
  311. {argus_server-2.2.1/src/argus/htmx/management/commands → argus_server-2.3.0/src/argus/htmx/management}/__init__.py +0 -0
  312. {argus_server-2.2.1/src/argus/htmx/migrations → argus_server-2.3.0/src/argus/htmx/management/commands}/__init__.py +0 -0
  313. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/management/commands/tailwind_config.py +0 -0
  314. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/middleware.py +0 -0
  315. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/migrations/0001_initial.py +0 -0
  316. {argus_server-2.2.1/src/argus/htmx/notificationprofile → argus_server-2.3.0/src/argus/htmx/migrations}/__init__.py +0 -0
  317. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/modals.py +0 -0
  318. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/models.py +0 -0
  319. {argus_server-2.2.1/src/argus/htmx/tailwindtheme → argus_server-2.3.0/src/argus/htmx/notificationprofile}/__init__.py +0 -0
  320. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/notificationprofile/urls.py +0 -0
  321. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/request.py +0 -0
  322. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/root_urls.py +0 -0
  323. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/settings.py +0 -0
  324. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/static/htmx-2.0.2.min.js +0 -0
  325. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/static/hyperscript-0.9.13.min.js +0 -0
  326. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/static/logo_white.svg +0 -0
  327. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/tailwindtheme/README.md +0 -0
  328. {argus_server-2.2.1/src/argus/htmx/templatetags → argus_server-2.3.0/src/argus/htmx/tailwindtheme}/__init__.py +0 -0
  329. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/tailwindtheme/get_tailwind.py +0 -0
  330. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/tailwindtheme/snippets/10-tailwind.css +0 -0
  331. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/tailwindtheme/snippets/15-alert-message.css +0 -0
  332. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/tailwindtheme/snippets/20-loading-box.css +0 -0
  333. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/tailwindtheme/styles.css +0 -0
  334. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/tailwindtheme/tailwind.config.js +0 -0
  335. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/tailwindtheme/utils.py +0 -0
  336. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/django/forms/widgets/attrs.html +0 -0
  337. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/_base_confirm_dialog.html +0 -0
  338. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/_base_form_modal.html +0 -0
  339. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/_base_form_modal_button.html +0 -0
  340. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/_base_form_modal_experimental.html +0 -0
  341. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/destination/_collapse_with_forms.html +0 -0
  342. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/destination/_content.html +0 -0
  343. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/destination/_create_form.html +0 -0
  344. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/destination/_delete_form.html +0 -0
  345. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/destination/_edit_form.html +0 -0
  346. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/destination/_form_list.html +0 -0
  347. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/forms/badge_dropdown_select_multiple.html +0 -0
  348. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/forms/checkbox_select_multiple.html +0 -0
  349. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/forms/dropdown_select_multiple.html +0 -0
  350. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/forms/input_field.html +0 -0
  351. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_base.html +0 -0
  352. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_base_incident_update_modal.html +0 -0
  353. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_delete_filter_confirm_dialog.html +0 -0
  354. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_existing_filters.html +0 -0
  355. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_filter_controls.html +0 -0
  356. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_filter_create_modal.html +0 -0
  357. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_filter_delete_dropdown.html +0 -0
  358. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_filter_select.html +0 -0
  359. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_filter_update_dropdown.html +0 -0
  360. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_incident_acknowledge_modal.html +0 -0
  361. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_incident_close_modal.html +0 -0
  362. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_incident_list_menubar.html +0 -0
  363. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_incident_list_update_menu.html +0 -0
  364. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_incident_reopen_modal.html +0 -0
  365. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_incident_table_paginator.html +0 -0
  366. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_incident_table_row.html +0 -0
  367. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_incident_table_rows.html +0 -0
  368. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_incident_ticket_autocreate_modal.html +0 -0
  369. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_incident_ticket_edit_modal.html +0 -0
  370. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_incident_ticket_manual_create_modal.html +0 -0
  371. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/_update_filter_confirm_dialog.html +0 -0
  372. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/filter_list.html +0 -0
  373. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/incident_detail.html +0 -0
  374. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/incident_list.html +0 -0
  375. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/responses/_incident_list_refresh.html +0 -0
  376. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/incident/responses/empty_list_item.html +0 -0
  377. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/notificationprofile/notificationprofile_confirm_delete.html +0 -0
  378. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/notificationprofile/notificationprofile_form.html +0 -0
  379. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/notificationprofile/notificationprofile_list.html +0 -0
  380. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/timeslot/_delete_timeslot_confirm_dialog.html +0 -0
  381. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/timeslot/_timeslot_detail.html +0 -0
  382. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/timeslot/_timeslot_form.html +0 -0
  383. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/timeslot/checkbox_option.html +0 -0
  384. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/timeslot/timeslot_confirm_delete.html +0 -0
  385. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/timeslot/timeslot_form.html +0 -0
  386. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/timeslot/timeslot_list.html +0 -0
  387. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/user/_current_theme.html +0 -0
  388. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/user/_incidents_table_layout_dropdown.html +0 -0
  389. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/user/_update_interval_dropdown.html +0 -0
  390. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/user/_user_menu_logout.html +0 -0
  391. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx/user/_user_menu_notification_config.html +0 -0
  392. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/htmx_base.html +0 -0
  393. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/messages/_notification_message.html +0 -0
  394. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/messages/_notification_messages.html +0 -0
  395. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/messages/_notification_messages_htmx_append.html +0 -0
  396. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/tailwind/styles.css +0 -0
  397. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/tailwind/tailwind.config.js +0 -0
  398. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/templates/tailwind_whitelist.html +0 -0
  399. {argus_server-2.2.1/src/argus/htmx/themes → argus_server-2.3.0/src/argus/htmx/templatetags}/__init__.py +0 -0
  400. {argus_server-2.2.1/src/argus/htmx/timeslot → argus_server-2.3.0/src/argus/htmx/themes}/__init__.py +0 -0
  401. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/themes/utils.py +0 -0
  402. {argus_server-2.2.1/src/argus/htmx/user/preferences → argus_server-2.3.0/src/argus/htmx/timeslot}/__init__.py +0 -0
  403. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/timeslot/urls.py +0 -0
  404. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/user/__init__.py +0 -0
  405. {argus_server-2.2.1/src/argus/incident/migrations → argus_server-2.3.0/src/argus/htmx/user/preferences}/__init__.py +0 -0
  406. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/user/urls.py +0 -0
  407. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/utils.py +0 -0
  408. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/htmx/widgets.py +0 -0
  409. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/__init__.py +0 -0
  410. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/apps.py +0 -0
  411. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/constants.py +0 -0
  412. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/factories.py +0 -0
  413. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/fields.py +0 -0
  414. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/forms.py +0 -0
  415. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/migrations/0001_initial.py +0 -0
  416. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/migrations/0001_squashed_incident_20250514.py +0 -0
  417. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/migrations/0002_empty_source_incident_id.py +0 -0
  418. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/migrations/0003_incident_level.py +0 -0
  419. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/migrations/0004_add_ChangeEvent_proxy.py +0 -0
  420. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/migrations/0005_alter_event_type.py +0 -0
  421. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/migrations/0006_incident_search_text.py +0 -0
  422. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/migrations/0007_alter_event_type.py +0 -0
  423. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/migrations/0008_incident_metadata.py +0 -0
  424. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/migrations/0009_use_bigautofield_on_quickly_growing_tables.py +0 -0
  425. {argus_server-2.2.1/src/argus/incident/ticket → argus_server-2.3.0/src/argus/incident/migrations}/__init__.py +0 -0
  426. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/models.py +0 -0
  427. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/serializers.py +0 -0
  428. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/signals.py +0 -0
  429. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/templates/incident/admin/fake_incident_add_form.html +0 -0
  430. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/templates/incident/admin/incident_change_list.html +0 -0
  431. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/templates/incident/admin/widgets/split_datetime_infinity.html +0 -0
  432. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/templates/incident/ticket/default_ticket_body.html +0 -0
  433. {argus_server-2.2.1/src/argus/notificationprofile/migrations → argus_server-2.3.0/src/argus/incident/ticket}/__init__.py +0 -0
  434. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/ticket/base.py +0 -0
  435. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/ticket/dummy.py +0 -0
  436. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/ticket/utils.py +0 -0
  437. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/urls.py +0 -0
  438. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/validators.py +0 -0
  439. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/views.py +0 -0
  440. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/incident/widgets.py +0 -0
  441. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/__init__.py +0 -0
  442. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/admin.py +0 -0
  443. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/apps.py +0 -0
  444. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/checks.py +0 -0
  445. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/factories.py +0 -0
  446. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/migrations/0001_squashed_0015_remove_days_alter_days_array.py +0 -0
  447. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/migrations/0001_squashed_notificationprofile_20250512.py +0 -0
  448. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/migrations/0016_noop.py +0 -0
  449. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/migrations/0017_change_event_type_to_event_types.py +0 -0
  450. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/migrations/0018_remove_closed_and_unacked_from_filterblob.py +0 -0
  451. {argus_server-2.2.1/src/argus/site → argus_server-2.3.0/src/argus/notificationprofile/migrations}/__init__.py +0 -0
  452. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/models.py +0 -0
  453. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/serializers.py +0 -0
  454. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/signals.py +0 -0
  455. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/templates/notificationprofile/email.html +0 -0
  456. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/templates/notificationprofile/email.txt +0 -0
  457. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/templates/schemawrapper.html +0 -0
  458. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/urls.py +0 -0
  459. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/notificationprofile/views.py +0 -0
  460. {argus_server-2.2.1/src/argus/util → argus_server-2.3.0/src/argus/site}/__init__.py +0 -0
  461. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/site/api_v2_urls.py +0 -0
  462. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/site/logging.py +0 -0
  463. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/site/serializers.py +0 -0
  464. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/site/settings/__init__.py +0 -0
  465. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/site/settings/_serializers.py +0 -0
  466. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/site/settings/backend.py +0 -0
  467. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/site/settings/base.py +0 -0
  468. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/site/settings/dev.py +0 -0
  469. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/site/settings/dockerdev.py +0 -0
  470. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/site/settings/prod.py +0 -0
  471. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/site/settings/test_CI.py +0 -0
  472. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/site/urls.py +0 -0
  473. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/site/utils.py +0 -0
  474. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/site/views.py +0 -0
  475. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/site/wsgi.py +0 -0
  476. {argus_server-2.2.1/tests → argus_server-2.3.0/src/argus/util}/__init__.py +0 -0
  477. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/util/datetime_utils.py +0 -0
  478. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/util/testing.py +0 -0
  479. {argus_server-2.2.1 → argus_server-2.3.0}/src/argus/util/utils.py +0 -0
  480. {argus_server-2.2.1/tests/auth/management_commands → argus_server-2.3.0/tests}/__init__.py +0 -0
  481. {argus_server-2.2.1 → argus_server-2.3.0}/tests/auth/__init__.py +0 -0
  482. {argus_server-2.2.1/tests/dev → argus_server-2.3.0/tests/auth/management_commands}/__init__.py +0 -0
  483. {argus_server-2.2.1 → argus_server-2.3.0}/tests/auth/management_commands/test_changeuser.py +0 -0
  484. {argus_server-2.2.1 → argus_server-2.3.0}/tests/auth/management_commands/test_createuser.py +0 -0
  485. {argus_server-2.2.1 → argus_server-2.3.0}/tests/auth/test_auth.py +0 -0
  486. {argus_server-2.2.1 → argus_server-2.3.0}/tests/auth/test_knox_views.py +0 -0
  487. {argus_server-2.2.1 → argus_server-2.3.0}/tests/auth/test_models.py +0 -0
  488. {argus_server-2.2.1 → argus_server-2.3.0}/tests/auth/test_utils.py +0 -0
  489. {argus_server-2.2.1 → argus_server-2.3.0}/tests/auth/test_views.py +0 -0
  490. {argus_server-2.2.1/tests/filter → argus_server-2.3.0/tests/dev}/__init__.py +0 -0
  491. {argus_server-2.2.1 → argus_server-2.3.0}/tests/dev/test_bulk_incidents.py +0 -0
  492. {argus_server-2.2.1 → argus_server-2.3.0}/tests/dev/test_check_token_expiry.py +0 -0
  493. {argus_server-2.2.1 → argus_server-2.3.0}/tests/dev/test_close_incident.py +0 -0
  494. {argus_server-2.2.1 → argus_server-2.3.0}/tests/dev/test_create_fake_incident.py +0 -0
  495. {argus_server-2.2.1 → argus_server-2.3.0}/tests/dev/test_create_source.py +0 -0
  496. {argus_server-2.2.1 → argus_server-2.3.0}/tests/dev/test_gen_secret_key.py +0 -0
  497. {argus_server-2.2.1 → argus_server-2.3.0}/tests/dev/test_initial_setup.py +0 -0
  498. {argus_server-2.2.1 → argus_server-2.3.0}/tests/dev/test_list_filters.py +0 -0
  499. {argus_server-2.2.1 → argus_server-2.3.0}/tests/dev/test_toggle_profile_activation.py +0 -0
  500. {argus_server-2.2.1 → argus_server-2.3.0}/tests/dev/test_utils.py +0 -0
  501. {argus_server-2.2.1/tests/htmx → argus_server-2.3.0/tests/filter}/__init__.py +0 -0
  502. {argus_server-2.2.1 → argus_server-2.3.0}/tests/filter/dummyplugin.py +0 -0
  503. {argus_server-2.2.1 → argus_server-2.3.0}/tests/filter/test_filterplugin.py +0 -0
  504. {argus_server-2.2.1 → argus_server-2.3.0}/tests/filter/test_queryset_filters.py +0 -0
  505. {argus_server-2.2.1 → argus_server-2.3.0}/tests/helpers.py +0 -0
  506. {argus_server-2.2.1/tests/htmx/incident → argus_server-2.3.0/tests/htmx}/__init__.py +0 -0
  507. {argus_server-2.2.1/tests/htmx/notificationprofile → argus_server-2.3.0/tests/htmx/incident}/__init__.py +0 -0
  508. {argus_server-2.2.1 → argus_server-2.3.0}/tests/htmx/incident/test_filter.py +0 -0
  509. {argus_server-2.2.1 → argus_server-2.3.0}/tests/htmx/incident/test_utils.py +0 -0
  510. {argus_server-2.2.1/tests/incident/fixtures → argus_server-2.3.0/tests/htmx/notificationprofile}/__init__.py +0 -0
  511. {argus_server-2.2.1 → argus_server-2.3.0}/tests/htmx/notificationprofile/test_forms.py +0 -0
  512. {argus_server-2.2.1 → argus_server-2.3.0}/tests/htmx/test_middleware.py +0 -0
  513. {argus_server-2.2.1 → argus_server-2.3.0}/tests/htmx/test_utils.py +0 -0
  514. {argus_server-2.2.1 → argus_server-2.3.0}/tests/incident/__init__.py +0 -0
  515. {argus_server-2.2.1/tests/incident/ticket_plugins → argus_server-2.3.0/tests/incident/fixtures}/__init__.py +0 -0
  516. {argus_server-2.2.1 → argus_server-2.3.0}/tests/incident/test_change_event.py +0 -0
  517. {argus_server-2.2.1 → argus_server-2.3.0}/tests/incident/test_create_fake_incident.py +0 -0
  518. {argus_server-2.2.1 → argus_server-2.3.0}/tests/incident/test_event.py +0 -0
  519. {argus_server-2.2.1 → argus_server-2.3.0}/tests/incident/test_filters.py +0 -0
  520. {argus_server-2.2.1 → argus_server-2.3.0}/tests/incident/test_incident.py +0 -0
  521. {argus_server-2.2.1 → argus_server-2.3.0}/tests/incident/test_incident_fields.py +0 -0
  522. {argus_server-2.2.1 → argus_server-2.3.0}/tests/incident/test_queryset.py +0 -0
  523. {argus_server-2.2.1 → argus_server-2.3.0}/tests/incident/test_serializers.py +0 -0
  524. {argus_server-2.2.1 → argus_server-2.3.0}/tests/incident/test_source_system.py +0 -0
  525. {argus_server-2.2.1 → argus_server-2.3.0}/tests/incident/test_source_system_type.py +0 -0
  526. {argus_server-2.2.1 → argus_server-2.3.0}/tests/incident/test_views.py +0 -0
  527. {argus_server-2.2.1/tests/incident/unit → argus_server-2.3.0/tests/incident/ticket_plugins}/__init__.py +0 -0
  528. {argus_server-2.2.1 → argus_server-2.3.0}/tests/incident/ticket_plugins/test_base.py +0 -0
  529. {argus_server-2.2.1 → argus_server-2.3.0}/tests/incident/ticket_plugins/test_dummy.py +0 -0
  530. {argus_server-2.2.1 → argus_server-2.3.0}/tests/incident/ticket_plugins/test_utils.py +0 -0
  531. {argus_server-2.2.1/tests/notificationprofile/destinations → argus_server-2.3.0/tests/incident/unit}/__init__.py +0 -0
  532. {argus_server-2.2.1 → argus_server-2.3.0}/tests/incident/unit/test_incident_details_url.py +0 -0
  533. {argus_server-2.2.1 → argus_server-2.3.0}/tests/migration_example.py +0 -0
  534. {argus_server-2.2.1 → argus_server-2.3.0}/tests/notificationprofile/__init__.py +0 -0
  535. {argus_server-2.2.1/tests/notificationprofile/migrations → argus_server-2.3.0/tests/notificationprofile/destinations}/__init__.py +0 -0
  536. {argus_server-2.2.1 → argus_server-2.3.0}/tests/notificationprofile/destinations/test_email.py +0 -0
  537. {argus_server-2.2.1 → argus_server-2.3.0}/tests/notificationprofile/destinations/test_sms.py +0 -0
  538. {argus_server-2.2.1/tests/site → argus_server-2.3.0/tests/notificationprofile/migrations}/__init__.py +0 -0
  539. {argus_server-2.2.1 → argus_server-2.3.0}/tests/notificationprofile/test_github236.py +0 -0
  540. {argus_server-2.2.1 → argus_server-2.3.0}/tests/notificationprofile/test_models.py +0 -0
  541. {argus_server-2.2.1 → argus_server-2.3.0}/tests/notificationprofile/test_serializers.py +0 -0
  542. {argus_server-2.2.1 → argus_server-2.3.0}/tests/notificationprofile/test_views.py +0 -0
  543. {argus_server-2.2.1/tests/util → argus_server-2.3.0/tests/site}/__init__.py +0 -0
  544. {argus_server-2.2.1 → argus_server-2.3.0}/tests/site/test_misc.py +0 -0
  545. {argus_server-2.2.1 → argus_server-2.3.0}/tests/site/test_settings_helpers.py +0 -0
  546. {argus_server-2.2.1 → argus_server-2.3.0}/tests/site/test_settings_validators.py +0 -0
  547. {argus_server-2.2.1 → argus_server-2.3.0}/tests/site/test_views.py +0 -0
  548. {argus_server-2.2.1 → argus_server-2.3.0}/tests/util/test_utils.py +0 -0
  549. {argus_server-2.2.1 → argus_server-2.3.0}/tox.ini +0 -0
@@ -1,5 +1,6 @@
1
1
  # canonical
2
2
 
3
+ Aleksander Fløtten <aleksander.flotten@sikt.no>
3
4
  Alexander Staff <alexamst@stud.ntnu.no>
4
5
  Andreas Melzer <akrimelzer@gmail.com>
5
6
  Dabble <ddabble@users.noreply.github.com>
@@ -11,12 +12,14 @@ Karoline Bonnerud <kbonnerud@gmail.com>
11
12
  Kat Hößel <kathoe@uninett.no>
12
13
  Morten Brekkevold <morten.brekkevold@sikt.no>
13
14
  Pelle Koster <elfjes@users.noreply.github.com>
15
+ Simen Abelsen <simen@abelweb.no>
14
16
  Simon Oliver Tveit <simon.tveit@sikt.no>
15
17
  Theodor Astrup Wiik <theo.aw@hotmail.com>
16
18
  dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
17
19
  jorund1 <jorund@washbear.eu>
18
20
 
19
21
  # rewrites
22
+ Aleksander Fløtten <aleksander.flotten@sikt.no> aleksfl <99869083+aleksfl@users.noreply.github.com>
20
23
  Alexander Staff <alexamst@stud.ntnu.no> <34887403+Tralphium@users.noreply.github.com>
21
24
  Dabble <ddabble@users.noreply.github.com> Anders <6058745+ddabble@users.noreply.github.com>
22
25
  Hanne Moa <hanne.moa@sikt.no> <hanne.moa@uninett.no>
@@ -8,6 +8,102 @@ This project uses [*towncrier*](https://towncrier.readthedocs.io/) and the chang
8
8
 
9
9
  <!-- towncrier release notes start -->
10
10
 
11
+ ## [2.3.0] - 2025-11-20
12
+
13
+ This release has numerous improvements to the frontend. The various
14
+ widgets on the incident list page now work better together, and where
15
+ there are more than one to choose from the choices are now sorted
16
+ alphabetically. No user preferences are left in the user menu. The
17
+ preference page has had a slight rework though more is planned.
18
+
19
+ The big new thing is the possibility to select more than one column
20
+ layout. You can now choose a preferred layout on the user preferences
21
+ page if any have been configured in addition to the standard one.
22
+ A nice looking preview of each configured layout is planned for the
23
+ next release.
24
+
25
+ Due to the possibility of choosing between multiple column layouts,
26
+ several new types of columns have been added. There's also a new
27
+ section in the reference documentation explaining and naming all the
28
+ built-in column types.
29
+
30
+ See NOTES.md for how to convert an existing column layout to the new format.
31
+
32
+ ### Added
33
+
34
+ - Sort list of filters in filter dropdown alphabetically
35
+ ([#1553](https://github.com/Uninett/Argus/issues/1553))
36
+ - Sort list of sources in filter dropdown alphabetically
37
+ ([#1554](https://github.com/Uninett/Argus/issues/1554))
38
+ - [#1576](https://github.com/Uninett/Argus/issues/1576)
39
+ - Added and documented more searchable columns for the incident list:
40
+ `search_description`, `select_levels`, `has_ticket_url`,
41
+ `search_ticket_url`, and a way to mass-produce single-field forms to
42
+ add even more searchable columns and eventually systematize the
43
+ incident filter forms in the topmost box.
44
+ - Make it possible to define more than one column layout, and make it
45
+ possible to switch between them via a user preference. Fixes #1581,
46
+ #1582.
47
+ - Added the column `narrow_start_time`.
48
+
49
+ ### Changed
50
+
51
+ - Remove user preferences from global header dropdown
52
+ ([#1567](https://github.com/Uninett/Argus/issues/1567))
53
+ - Use DaisyUI dropdowns in searchable columns
54
+ ([#1574](https://github.com/Uninett/Argus/issues/1574))
55
+ - Sort filter dropdowns for update / delete filter alphabetically
56
+ ([#1592](https://github.com/Uninett/Argus/issues/1592))
57
+ - Add consistent title to notification config pages
58
+ ([#1606](https://github.com/Uninett/Argus/issues/1606))
59
+ - Auto-align filterable column dropdown if it extends beyond the screen
60
+ ([#1607](https://github.com/Uninett/Argus/issues/1607))
61
+ - Fixed several problems with filtering the incident list in the
62
+ frontend: the various widgets were stepping on each others toes.
63
+ Made much easier by turning all GET-abble filters into Django forms.
64
+ - Improved documentation of how notificationprofiles with multiple
65
+ filters work, with changes to the user manual, new tests, and a help
66
+ text added to the field in question in the frontend.
67
+ - Preferences are all now properly backed by forms, inheriting from
68
+ `SimplePreferenceForm` which is a perfect fit for preferences where
69
+ you choose one of several options. Using `PreferenceField` directly
70
+ will still work, but the form used now receives the request on
71
+ `__init__`. It is therefore necessary to upgrade the old forms by
72
+ either mixing in the `ClassicPreferenceFormMixin`, which will
73
+ discard the passed-in `request`, or writing your own `__init__` that
74
+ will prevent passing in the `request` via `super().__init__(*args,
75
+ **kwargs)`.
76
+ - User preferences were refactored. This is to increase consistency,
77
+ cut down on copypasta, and eventually use Django forms on the user
78
+ preference page, but more importantly: Django settings are no longer
79
+ read on import. Turns out, preferences that depend on Django
80
+ settings *sometimes* read the settings too soon, before the
81
+ settings-file was complete, and therefore getting the wrong or no
82
+ setting.
83
+
84
+
85
+ ## [2.2.2] - 2025-11-03
86
+
87
+ ### Added
88
+
89
+ - Added the beginnings of a style guide at /styleguide/. The look of the form
90
+ inputs that were not manually laid out have in some cases also changed, for
91
+ greater consistency. ([#1558](https://github.com/Uninett/Argus/issues/1558))
92
+ - Added `zino-argus-glue` to documented list of known glue services
93
+
94
+ ### Changed
95
+
96
+ - Increased logging verbosity when finding destinations for notifications and
97
+ actually sending the notifications, to aid in debugging production systems.
98
+ Now also logs which destination id's are found and used.
99
+ ([#1563](https://github.com/Uninett/Argus/issues/1563))
100
+
101
+ ### Fixed
102
+
103
+ - The development docker compose had stopped working due to changes outside of
104
+ our control (pip, git, the very distro) and has been updated.
105
+
106
+
11
107
  ## [2.2.1] - 2025-09-18
12
108
 
13
109
  ### Fixed, frontend
@@ -34,3 +34,5 @@
34
34
  ## 2025
35
35
 
36
36
  * [James Ladd](https://github.com/jladd-geant) \<james.ladd@geant.org\>
37
+ * [Simen Abelsen](https://github.com/Simrayz) \<simen@abelweb.no\>
38
+ * [Aleksander Fløtten](https://github.com/aleksfl) \<aleksander.flotten@sikt.no\>
@@ -1,15 +1,19 @@
1
1
  # This Dockerfile is designed to run a development environment for Argus,
2
2
  # with the Argus source code tree mounted at /argus
3
3
  #
4
- FROM python:3.12
4
+ FROM python:3.13-trixie
5
5
  ENV DEBIAN_FRONTEND=noninteractive
6
6
 
7
7
  RUN apt-get update && apt-get install -y --no-install-recommends tini \
8
- build-essential libpq-dev libffi-dev libssl-dev
8
+ build-essential libpq-dev libffi-dev libssl-dev git
9
9
  RUN mkdir -p /argus
10
10
  COPY requirements.txt /argus
11
11
  COPY requirements/*.txt /argus/requirements/
12
12
 
13
+ ENV VIRTUAL_ENV=/opt/venv
14
+ RUN python3 -m venv $VIRTUAL_ENV
15
+ ENV PATH="$VIRTUAL_ENV/bin:$PATH"
16
+
13
17
  WORKDIR /argus
14
18
  RUN pip install gunicorn -r requirements.txt -r /argus/requirements/dev.txt
15
19
 
@@ -1,4 +1,4 @@
1
- .PHONY: clean testclean distclean coverageclean cacheclean nuke tailwind docclean upgrade-tailwind
1
+ .PHONY: clean testclean distclean coverageclean cacheclean nuke tailwind docclean upgrade-tailwind tailwind-watch
2
2
 
3
3
  TAILWINDDIR=src/argus/htmx/tailwindtheme
4
4
  STATICDIR=src/argus/htmx/static
@@ -32,7 +32,10 @@ testclean: coverageclean clean
32
32
  nuke: clean docclean distclean testclean cacheclean
33
33
 
34
34
  tailwind:
35
- tailwindcss -c $(TAILWINDDIR)/tailwind.config.js -i $(TAILWINDDIR)/styles.css -o $(STATICDIR)/styles.css
35
+ $(TAILWINDDIR)/tailwindcss -c $(TAILWINDDIR)/tailwind.config.js -i $(TAILWINDDIR)/styles.css -o $(STATICDIR)/styles.css
36
+
37
+ tailwind-watch:
38
+ $(TAILWINDDIR)/tailwindcss -c $(TAILWINDDIR)/tailwind.config.js -i $(TAILWINDDIR)/styles.css -o $(STATICDIR)/styles.css --watch
36
39
 
37
40
  upgrade-tailwind:
38
41
  PYTHONPATH=$(PYTHONPATH) python3 src/argus/htmx/tailwindtheme/get_tailwind.py
@@ -3,6 +3,70 @@
3
3
  This file documents changes to Argus that are relevant for operations,
4
4
  customizers and end-users.
5
5
 
6
+ ## [2.3.0] - 2025-11-20
7
+
8
+ This release has numerous improvements to the frontend. The various
9
+ widgets on the incident list page now work better together, and where
10
+ there are more than one to choose from the choices are now sorted
11
+ alphabetically. No user preferences are left in the user menu. The
12
+ preference page has had a slight rework though more is planned.
13
+
14
+ The big new thing is the possibility to select more than one column
15
+ layout. You can now choose a preferred layout on the user preferences
16
+ page if any have been configured in addition to the standard one.
17
+ A nice looking preview of each configured layout is planned for the
18
+ next release.
19
+
20
+ Due to the possibility of choosing between multiple column layouts,
21
+ several new types of columns have been added. There's also a new
22
+ section in the reference documentation explaining and naming all the
23
+ built-in column types.
24
+
25
+ As of this release, please convert the setting `INCIDENT_TABLE_COLUMNS` to the
26
+ new `INCIDENT_TABLE_COLUMN_LAYOUTS` setting. Usage of `INCIDENT_TABLE_COLUMNS`
27
+ is deprecated and support will eventually be removed.
28
+
29
+ If your current `INCIDENT_TABLE_COLUMNS` looks like this:
30
+
31
+ ```
32
+ INCIDENT_TABLE_COLUMNS = [
33
+ "row_select",
34
+ "combined_status",
35
+ "source",
36
+ "description",
37
+ ]
38
+ ```
39
+
40
+ then the equivalent new setting looks like:
41
+
42
+ ```
43
+ INCIDENT_TABLE_COLUMN_LAYOUTS = {
44
+ "default": [
45
+ "row_select",
46
+ "combined_status",
47
+ "source",
48
+ "description",
49
+ ]
50
+ }
51
+ ```
52
+
53
+ This will make it possible to select between two different layouts: "built-in"
54
+ and "default". If you wish to hide the built-in layout, use the name
55
+ "built-in" for one of the layouts in `INCIDENT_TABLE_COLUMN_LAYOUTS`.
56
+
57
+ If you do not convert the setting, the layout defined in the old setting will
58
+ be available as "default" together with the built-in layout as "built-in".
59
+
60
+ ## [2.2.2] - 2025-11-03
61
+
62
+ To aid in development there a live styleguide for the frontend on
63
+ `/styleguide`.
64
+
65
+ Logging verbosity has increased for sending notifications.
66
+
67
+ Otherwise: typos have been fixed, a new glue service has been added to the
68
+ documentation, the development docker-compose setup should be working again.
69
+
6
70
 
7
71
  ## [2.2.1] - 2025-09-18
8
72
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: argus-server
3
- Version: 2.2.1
3
+ Version: 2.3.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>
@@ -119,8 +119,9 @@ How to customize the look:
119
119
  Incident table column customization
120
120
  ===================================
121
121
 
122
- The :setting:`INCIDENT_TABLE_COLUMNS` setting controls which columns are shown
123
- in the incident table. This setting takes a list of ``str`` or
122
+ The :setting:`INCIDENT_TABLE_COLUMN_LAYOUTS` setting controls which columns are
123
+ shown in the incident table. This setting takes a dictionary where the key is
124
+ the name of a layout and the value is a list of ``str`` or
124
125
  ``argus.htmx.incidents.customization.IncidentTableColumn`` instances. when
125
126
  given a ``str``, this key must be available in the
126
127
  ``argus.htmx.incidents.customization.BUILTIN_COLUMNS`` dictionary. For
@@ -128,17 +129,21 @@ example::
128
129
 
129
130
  from argus.htmx.incidents.customization import BUILTIN_COLUMNS, IncidentTableColumn
130
131
 
131
- INCIDENT_TABLE_COLUMNS = [
132
- "id",
133
- "start_time",
134
- BUILTIN_COLUMNS["description"], # equivalent to just "description"
135
- IncidentTableColumn( # a new column definition
136
- name="name",
137
- label="Custom",
138
- cell_template="/path/to/template.html", # contents of cell
139
- ),
132
+ INCIDENT_TABLE_COLUMN_LAYOUTS = {
133
+ "default": [
134
+ "id",
135
+ "start_time",
136
+ BUILTIN_COLUMNS["description"], # equivalent to just "description"
137
+ IncidentTableColumn( # a new column definition
138
+ name="name",
139
+ label="Custom",
140
+ cell_template="/path/to/template.html", # contents of cell
141
+ ),
142
+ ]
143
+ }
140
144
 
141
- ]
145
+ The settings :setting:`INCIDENT_TABLE_COLUMNS` took a single list and is
146
+ deprecated. If it exists it is interpreted as a layout named "default".
142
147
 
143
148
 
144
149
  .. py:class:: IncidentTableColumn
@@ -172,11 +177,21 @@ example::
172
177
  a ``<td>``-tag. This makes it possible to add attributes to the
173
178
  ``<td>``-tag or skip including the ``cell_template`` altogether.
174
179
 
180
+ Deprecated: see ``detail_link``
181
+
175
182
  Replacing the default with
176
183
  ``htmx/incident/_incident_table_cell_wrapper_link_to_details.html`` will
177
184
  result in the ``cell_template`` being wrapped in a link (``<a>``) to the
178
185
  details page.
179
186
 
187
+ .. py:attribute::detail_link
188
+
189
+ :type: bool
190
+ :value: False
191
+
192
+ Setting ``detail_link`` to ``True`` will wrap the contents of the cell
193
+ with a link (``<a>``) to the details page.
194
+
180
195
  .. py:attribute:: column_classes
181
196
 
182
197
  :type: str
@@ -243,7 +258,7 @@ You could then create ``path/to/_extra_widget.html`` as following::
243
258
 
244
259
 
245
260
  Toast messages
246
- --------------
261
+ ==============
247
262
 
248
263
  ``argus_htmx`` uses the `Django Messages`_ framework to dynamically display notifications toast
249
264
  messages to the user. Some of these messages stay on screen until the user refreshes, while others
@@ -23,4 +23,4 @@ magic address GitHub provides for you, then you need to toggle "Keep my email
23
23
  addresses private" on the same page to "On". You can even prevent commits not
24
24
  using the magic address from being pushed to GitHub.
25
25
 
26
- See `Setting your commit email address at GitHub<https://docs.github.com/en/account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/setting-your-commit-email-address>`_ for more information.
26
+ See `Setting your commit email address at GitHub <https://docs.github.com/en/account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/setting-your-commit-email-address>`_ for more information.
@@ -83,7 +83,7 @@ an extensive list, but can provide entry points or inspiration:
83
83
  ``hx-swap-oob`` content, to a incident list htmx partial response
84
84
  * ``htmx/user/_user_menu.html``: add or remove items to the user menu (the menu that appears when
85
85
  clicking on the user's initials in the top right)
86
- * ``htmx/user/preferences.html``: add custom preferences to the preferences page
86
+ * ``htmx/user/preferences_list.html``: add custom preferences to the preferences page
87
87
  * ``registration/login.html``: show additional information to a user prior to logging in, such as
88
88
  a link to a privacy policy or other terms
89
89
 
@@ -0,0 +1,19 @@
1
+ =======================
2
+ Howto: Handle sonarqube
3
+ =======================
4
+
5
+ We use `sonarqube`_ to scan new code for potential issues and security hotspots.
6
+ It posts comments on pull requests when it finds new issues in that code using rules
7
+ defined by the developer team at Sikt.
8
+
9
+ But we sometimes also disagree with how it handles parts of certain rules. We will
10
+ document that here and which comment to use when marking such an issue as accepted or
11
+ false positive.
12
+
13
+ python:S1192 - String literals should not be duplicated
14
+ -------------------------------------------------------
15
+
16
+ If it makes it more readable, for example if configuration is happening within the
17
+ Python code, then we accept it with "This is better for readability".
18
+
19
+ .. _sonarqube: https://www.sonarsource.com/products/sonarcloud/
@@ -0,0 +1,23 @@
1
+ ============================
2
+ Style guide for web frontend
3
+ ============================
4
+
5
+ There's a live style guide on ``/styleguide/``. It contains a live form so that
6
+ you can experiment with form input to see what a valid and invalid form looks
7
+ like.
8
+
9
+ The live style guide is not complete, and not fully implemented into the site
10
+ yet. If you are looking for low hanging fruit:
11
+
12
+ * The headers (h1-h3) needs to be styled as per the style guide.
13
+ * The cards (all pages except the incident list and preferences page) should
14
+ look the same.
15
+ * There should be no preferences directly in the user menu drop down.
16
+ * There should be no use of the class "border-b" anywhere.
17
+
18
+ More work is involved in making sure all form fields use the style guide
19
+ designs for inputs/labels. Another larger task is issue #1557:
20
+ `Restyling the preferences page <https://github.com/Uninett/Argus/issues/1557>`_.
21
+
22
+ See also issue #1519:
23
+ `Add styleguide <https://github.com/Uninett/Argus/issues/1519>`_.
@@ -9,4 +9,5 @@ Development
9
9
  development/management-commands
10
10
  development/makefile-rules
11
11
  development/howtos
12
+ development/styleguide
12
13
  development/troubleshooting
@@ -33,6 +33,17 @@ Network Administration Visualized
33
33
  This is an extension of NAV, runs on the same server, and uses the NAV config
34
34
  files.
35
35
 
36
+ Zino
37
+ ~~~~
38
+
39
+ | Home: https://nordu.net/zino/
40
+ | Source: https://github.com/Uninett/zino-argus-glue
41
+ | PyPI: `zino-argus-glue <https://pypi.org/project/zino-argus-glue/>`_
42
+
43
+ This is a standalone process that connects to both the Zino and Argus APIs and
44
+ exchanges/synchronizes information between them.
45
+
46
+
36
47
  Mist Systems Administration (Juniper)
37
48
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
38
49
 
@@ -172,13 +172,137 @@ a time), and the user can select a different page size from ``[10, 20, 50,
172
172
  :setting:`ARGUS_INCIDENTS_DEFAULT_PAGE_SIZE` (an integer) and
173
173
  :setting:`ARGUS_INCIDENTS_PAGE_SIZES` setting respectively.
174
174
 
175
- Incident table column customization
176
- -----------------------------------
175
+ .. _table-column-reference:
177
176
 
178
- You can customize which columns are shown in the incidents listing table by
179
- overriding the :setting:`INCIDENT_TABLE_COLUMNS` setting. See
177
+ Table columns
178
+ -------------
179
+
180
+ Argus ships with more possible column types than what are configured by
181
+ default.
182
+
183
+ The columns to use are set with the :setting:`INCIDENT_TABLE_COLUMN_LAYOUTS`
184
+ setting.
185
+
186
+ This is the default for the setting as of this version of Argus:
187
+
188
+ .. code-block:: python3
189
+
190
+ INCIDENT_TABLE_COLUMN_LAYOUTS = {
191
+ "built-in": [
192
+ "color_status",
193
+ "row_select",
194
+ "start_time",
195
+ "combined_status",
196
+ "level",
197
+ "source",
198
+ "description",
199
+ "ticket",
200
+ ]
201
+ }
202
+
203
+ You can define your own columns from scratch, see
180
204
  :ref:`customize-htmx-frontend` for examples.
181
205
 
206
+ All built-in columns
207
+ ~~~~~~~~~~~~~~~~~~~~
208
+
209
+ ack
210
+ :From: ack
211
+ :Name: ack
212
+ :Description: Show whether the incident is acked or not.
213
+ :Redundant with: combined_status
214
+
215
+ color_status
216
+ :From: ack + status
217
+ :Name: color_status
218
+ :Description: A combination of ackedness and openness, shown only as a color.
219
+
220
+ combined_status
221
+ :From: ack + status
222
+ :Name: combined_status
223
+ :Description: Merges the "open" column and the "ack" column into one.
224
+
225
+ description
226
+ :From: description
227
+ :Name: description
228
+ :Description: The contents of the description-field of the incident.
229
+ :Redundant with: search_description
230
+
231
+ search_description
232
+ :From: description
233
+ :Name: search_description
234
+ :Description: Search for (free text) all tickets that matches and show their
235
+ incidents.
236
+ :Redundant with: description
237
+
238
+ id
239
+ :From: id
240
+ :Name: id
241
+ :Description: The internal id of the incident in argus.
242
+
243
+ level
244
+ :From: level
245
+ :Name: level
246
+ :Description: The severity level.
247
+ :Redundant with: select_levels
248
+
249
+ select_levels
250
+ :From: level
251
+ :Name: select_levels
252
+ :Description: The severity level. One or more can be selected. Might conflict
253
+ with the notification filter field ``maxlevel``. If maxlevel is
254
+ set to less than max, you will get no results if searching for
255
+ the max via this field.
256
+ :Redundant with: level
257
+
258
+ status
259
+ :From: open
260
+ :Name: status
261
+ :Description: Whether the incident is still ongoing or has been closed.
262
+ :Redundant with: combined_status
263
+
264
+ row_select
265
+ :From: depends on incident id
266
+ :Name: row_select
267
+ :Description: Checkbox to select the row for bulk changes.
268
+
269
+ source
270
+ :From: source
271
+ :Name: source
272
+ :Description: The source of the incident.
273
+
274
+ start_time
275
+ :From: start_time
276
+ :Name: start_time
277
+ :Description: When the incident started, fixed width.
278
+
279
+ narrow_start_time
280
+ :From: start_time
281
+ :Name: start_time
282
+ :Description: When the incident started, width depends on date format.
283
+
284
+ ticket
285
+ :From: ticket_url
286
+ :Name: ticket
287
+ :Description: A link to a ticket/issue in an external system with more information.
288
+ :Redundant with: has_ticket_url, search_ticket_url
289
+
290
+ has_ticket_url
291
+ :From: ticket_url
292
+ :Name: has_ticket_url
293
+ :Description: A link to a ticket/issue in an external system with more information.
294
+ Can toggle showing only incidents that has or lacks a ticket url.
295
+ :Redundant with: ticket, search_ticket_url
296
+
297
+ search_ticket_url
298
+ :From: ticket_url
299
+ :Name: search_ticket_url
300
+ :Description: A link to a ticket/issue in an external system with more information.
301
+ Can search through all the tickets for the term, and only show
302
+ the matching incidents.
303
+ :Redundant with: ticket, has_ticket_url
304
+
305
+
182
306
  Themes
183
307
  ------
184
308
 
@@ -315,8 +315,35 @@ Ticket system settings
315
315
  ``TICKET_PLUGIN``, ``TICKET_ENDPOINT``, ``TICKET_AUTHENTICATION_SECRET``,
316
316
  ``TICKET_INFORMATION`` are all described in :ref:`ticket-systems-settings`.
317
317
 
318
+ Frontend settings
319
+ -----------------
320
+
321
+ .. setting:: INCIDENT_TABLE_COLUMN_LAYOUTS
322
+
323
+ * :setting:`INCIDENT_TABLE_COLUMN_LAYOUTS` allows adding one or more choosable
324
+ incident list column layouts in addition to the built-in layout. Format::
325
+
326
+ INCIDENT_TABLE_COLUMN_LAYOUTS = {
327
+ "default": [
328
+ "row_select",
329
+ "combined_status",
330
+ "source",
331
+ "description",
332
+ ]
333
+ }
334
+
335
+ See :ref:`table-column-reference` for the built-in layout and a list of all
336
+ available built-in column types.
337
+
338
+ .. setting:: INCIDENT_TABLE_COLUMNS
339
+
340
+ * :setting:`INCIDENT_TABLE_COLUMNS`
341
+
342
+ The old, deprecated variant of :setting:`INCIDENT_TABLE_COLUMN_LAYOUTS`, it
343
+ only supported a single column layout.
344
+
318
345
  Special environment settings
319
- ----------------------------
346
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
320
347
 
321
348
  .. setting:: BANNER_MESSAGE
322
349
 
@@ -344,4 +371,3 @@ Debugging settings
344
371
 
345
372
  * :setting:`TEMPLATE_DEBUG` (optional) provides a convenient way to turn debugging on and off
346
373
  for templates. If undefined it will default to the value of :setting:`DEBUG`.
347
-
@@ -626,19 +626,43 @@ receive by creating, editing and deleting *notification profiles*.
626
626
  About components of notification profiles
627
627
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
628
628
 
629
- 1. **Timeslot** allows you to customize **when** you want to receive the
630
- alarm notifications. You can choose one timeslot per notification
631
- profile. Timeslots are reusable across multiple notification
632
- profiles.
633
- 2. **Filter** allows you to customize **what** alarms (incidents) you
634
- want to receive the notifications about. You can choose multiple
635
- filters per notification profile. Filters are reusable across
636
- multiple notification profiles.
637
- 3. **Destination** allows you to customize **where** you want to receive
638
- the alarm notifications. You can choose multiple destinations per
639
- notification profile. Destinations are reusable across multiple
640
- notification profiles. Destinations may be of `different media
641
- types <#about-the-available-notification-media>`_.
629
+ Timeslot
630
+ ^^^^^^^^
631
+
632
+ **Timeslot** allows you to customize **when** you want to receive
633
+ the alarm notifications. You can choose one timeslot per
634
+ notification profile. Timeslots are reusable across multiple
635
+ notification profiles.
636
+
637
+ Filter
638
+ ^^^^^^
639
+
640
+ **Filter** allows you to customize **what** alarms (incidents) you
641
+ want to receive the notifications about. Filters are reusable
642
+ across multiple notification profiles.
643
+
644
+ You can choose multiple filters per notification profile. They are
645
+ *combined to increase precision*. You cannot use *one* profile for
646
+ *sufficiently different types of incidents*.
647
+
648
+ For instance, if an incident may only ever have one tag that
649
+ starts with ``hostname=``, then having a profile with multiple
650
+ filters, each asking for *different* hostnames, will never be able
651
+ to match anything.
652
+
653
+ If you need to match multiple hostname tags in a profile, make
654
+ a filter that only matches hostnames and include that filter in
655
+ the profile.
656
+
657
+ Destination
658
+ ^^^^^^^^^^^
659
+
660
+ **Destination** allows you to customize **where** you want to
661
+ receive the alarm notifications. You can choose multiple
662
+ destinations per notification profile. Destinations are reusable
663
+ across multiple notification profiles. Destinations may be of
664
+ `different media types
665
+ <#about-the-available-notification-media>`_.
642
666
 
643
667
  .. _about-the-available-notification-media:
644
668
  About the available notification media
@@ -80,7 +80,12 @@ artifacts = ["src/argus/version.py"]
80
80
  packages = ["src/argus"]
81
81
 
82
82
  [tool.hatch.build.targets.sdist]
83
- exclude = ["/.github"]
83
+ exclude = [
84
+ "/.github",
85
+ "/*.json",
86
+ "/*.py",
87
+ "/*.sh",
88
+ ]
84
89
 
85
90
  [tool.versioningit.write]
86
91
  file = "src/argus/version.py"