argus-server 2.2.0__tar.gz → 2.2.2__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 (521) hide show
  1. {argus_server-2.2.0 → argus_server-2.2.2}/CHANGELOG.md +38 -0
  2. {argus_server-2.2.0 → argus_server-2.2.2}/Dockerfile +6 -2
  3. {argus_server-2.2.0 → argus_server-2.2.2}/Makefile +5 -2
  4. {argus_server-2.2.0 → argus_server-2.2.2}/NOTES.md +15 -0
  5. {argus_server-2.2.0 → argus_server-2.2.2}/PKG-INFO +30 -22
  6. {argus_server-2.2.0 → argus_server-2.2.2}/README.md +29 -21
  7. {argus_server-2.2.0 → argus_server-2.2.2}/docker/Dockerfile +6 -2
  8. {argus_server-2.2.0 → argus_server-2.2.2}/docker/README.md +16 -3
  9. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/howtos-for-github.rst +1 -1
  10. argus_server-2.2.2/docs/development/styleguide.rst +23 -0
  11. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development.rst +1 -0
  12. {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/glue-services/index.rst +11 -0
  13. {argus_server-2.2.0 → argus_server-2.2.2}/pyproject.toml +6 -1
  14. {argus_server-2.2.0 → argus_server-2.2.2}/requirements-django52.txt +3 -3
  15. {argus_server-2.2.0 → argus_server-2.2.2}/requirements.txt +3 -3
  16. argus_server-2.2.2/src/argus/htmx/forms.py +73 -0
  17. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/incident/filter.py +11 -7
  18. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/incident/forms.py +1 -1
  19. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/static/styles.css +50 -14
  20. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/config.py +1 -0
  21. argus_server-2.2.2/src/argus/htmx/templates/django/forms/errors/dict/ul.html +5 -0
  22. argus_server-2.2.2/src/argus/htmx/templates/django/forms/errors/list/ul.html +6 -0
  23. argus_server-2.2.2/src/argus/htmx/templates/django/forms/field.html +20 -0
  24. argus_server-2.2.2/src/argus/htmx/templates/django/forms/label.html +13 -0
  25. argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/checkbox.html +6 -0
  26. argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/checkbox_option.html +12 -0
  27. argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/classless_attrs.html +9 -0
  28. argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/date.html +6 -0
  29. argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/datetime.html +6 -0
  30. argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/input.html +6 -0
  31. argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/radio_option.html +12 -0
  32. argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/range.html +5 -0
  33. argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/select.html +12 -0
  34. argus_server-2.2.2/src/argus/htmx/templates/django/forms/widgets/time.html +8 -0
  35. argus_server-2.2.2/src/argus/htmx/templates/htmx/styleguide.html +188 -0
  36. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/timeslot/timerecurrence_div.html +1 -1
  37. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_incidents_table_layout_dropdown.html +3 -3
  38. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/registration/login.html +1 -9
  39. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/timeslot/views.py +0 -1
  40. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/urls.py +2 -1
  41. argus_server-2.2.2/src/argus/htmx/views.py +39 -0
  42. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/media/__init__.py +24 -4
  43. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/media/base.py +40 -4
  44. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/media/email.py +18 -22
  45. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/media/sms_as_email.py +11 -15
  46. argus_server-2.2.2/src/argus/version.py +1 -0
  47. {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/test_media.py +21 -5
  48. argus_server-2.2.0/docker-entrypoint.sh +0 -7
  49. argus_server-2.2.0/manage.py +0 -24
  50. argus_server-2.2.0/src/argus/htmx/templates/django/forms/div.html +0 -28
  51. argus_server-2.2.0/src/argus/htmx/views.py +0 -9
  52. argus_server-2.2.0/src/argus/version.py +0 -1
  53. {argus_server-2.2.0 → argus_server-2.2.2}/.git-blame-ignore-revs +0 -0
  54. {argus_server-2.2.0 → argus_server-2.2.2}/.gitattributes +0 -0
  55. {argus_server-2.2.0 → argus_server-2.2.2}/.gitignore +0 -0
  56. {argus_server-2.2.0 → argus_server-2.2.2}/.mailmap +0 -0
  57. {argus_server-2.2.0 → argus_server-2.2.2}/.pre-commit-config.yaml +0 -0
  58. {argus_server-2.2.0 → argus_server-2.2.2}/.readthedocs.yaml +0 -0
  59. {argus_server-2.2.0 → argus_server-2.2.2}/.sonarcloud.properties +0 -0
  60. {argus_server-2.2.0 → argus_server-2.2.2}/CONTRIBUTING.rst +0 -0
  61. {argus_server-2.2.0 → argus_server-2.2.2}/CONTRIBUTORS.md +0 -0
  62. {argus_server-2.2.0 → argus_server-2.2.2}/LICENSE +0 -0
  63. {argus_server-2.2.0 → argus_server-2.2.2}/MAINTAINING.rst +0 -0
  64. {argus_server-2.2.0 → argus_server-2.2.2}/UPGRADING.md +0 -0
  65. {argus_server-2.2.0 → argus_server-2.2.2}/changelog.d/.gitkeep +0 -0
  66. {argus_server-2.2.0 → argus_server-2.2.2}/cmd.sh-template +0 -0
  67. {argus_server-2.2.0 → argus_server-2.2.2}/codecov.yml +0 -0
  68. {argus_server-2.2.0 → argus_server-2.2.2}/constraints.txt +0 -0
  69. {argus_server-2.2.0 → argus_server-2.2.2}/docker/docker-entrypoint.sh +0 -0
  70. {argus_server-2.2.0 → argus_server-2.2.2}/docker/dockersettings.py +0 -0
  71. {argus_server-2.2.0 → argus_server-2.2.2}/docker-compose.yml +0 -0
  72. {argus_server-2.2.0 → argus_server-2.2.2}/docs/Makefile +0 -0
  73. {argus_server-2.2.0 → argus_server-2.2.2}/docs/_exts/djangodocs.py +0 -0
  74. {argus_server-2.2.0 → argus_server-2.2.2}/docs/_static/.gitkeep +0 -0
  75. {argus_server-2.2.0 → argus_server-2.2.2}/docs/_templates/.gitkeep +0 -0
  76. {argus_server-2.2.0 → argus_server-2.2.2}/docs/about-argus.rst +0 -0
  77. {argus_server-2.2.0 → argus_server-2.2.2}/docs/conf.py +0 -0
  78. {argus_server-2.2.0 → argus_server-2.2.2}/docs/customization/htmx-frontend.rst +0 -0
  79. {argus_server-2.2.0 → argus_server-2.2.2}/docs/customization.rst +0 -0
  80. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/add-more-preferences.rst +0 -0
  81. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/change-settings.rst +0 -0
  82. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/changelog-entry.rst +0 -0
  83. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/commit-messages.rst +0 -0
  84. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/customizing-filtering.rst +0 -0
  85. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/federated-logins.rst +0 -0
  86. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/howtos-for-git.rst +0 -0
  87. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/htmx-frontend/column_for_specific_ack_group.rst +0 -0
  88. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/htmx-frontend/column_for_specific_tag.rst +0 -0
  89. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/htmx-frontend/custom-incident-actions.rst +0 -0
  90. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/htmx-frontend/customize-filtering.rst +0 -0
  91. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/htmx-frontend/dependencies.rst +0 -0
  92. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/htmx-frontend/font_awesome.rst +0 -0
  93. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/htmx-frontend/override_templates.rst +0 -0
  94. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/htmx-frontend.rst +0 -0
  95. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/notification-system-testing.rst +0 -0
  96. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/recover-from-migration-trouble.rst +0 -0
  97. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/regenerate-the-ER-diagram.rst +0 -0
  98. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/release-checklist.rst +0 -0
  99. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/toggle-django-debug-toolbar.rst +0 -0
  100. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/update-contributors.rst +0 -0
  101. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos/vendor-a-repo.rst +0 -0
  102. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/howtos.rst +0 -0
  103. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/makefile-rules.rst +0 -0
  104. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/management-commands.rst +0 -0
  105. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/notes.rst +0 -0
  106. {argus_server-2.2.0 → argus_server-2.2.2}/docs/development/troubleshooting.rst +0 -0
  107. {argus_server-2.2.0 → argus_server-2.2.2}/docs/django_settings.py +0 -0
  108. {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/default_timeslot.png +0 -0
  109. {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/destinations_view.png +0 -0
  110. {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/example_timeslot.png +0 -0
  111. {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/filter_selector.png +0 -0
  112. {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/incident_details_view.png +0 -0
  113. {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/incidents_filter.png +0 -0
  114. {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/incidents_page.png +0 -0
  115. {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/new_notification_profile.png +0 -0
  116. {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/notification_profiles.png +0 -0
  117. {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/synced_destination_delete_error.png +0 -0
  118. {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/timeslots_view.png +0 -0
  119. {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/unsaved_recurrence.png +0 -0
  120. {argus_server-2.2.0 → argus_server-2.2.2}/docs/img/user_menu.png +0 -0
  121. {argus_server-2.2.0 → argus_server-2.2.2}/docs/index.rst +0 -0
  122. {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/_note.rst +0 -0
  123. {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/glue-services/writing-glueservices.rst +0 -0
  124. {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/index.rst +0 -0
  125. {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/notifications/email-plugin.rst +0 -0
  126. {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/notifications/index.rst +0 -0
  127. {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/notifications/sms-plugin.rst +0 -0
  128. {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/notifications/writing-notification-plugins.rst +0 -0
  129. {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/ticket-systems/index.rst +0 -0
  130. {argus_server-2.2.0 → argus_server-2.2.2}/docs/integrations/ticket-systems/writing-ticket-system-plugins.rst +0 -0
  131. {argus_server-2.2.0 → argus_server-2.2.2}/docs/make.bat +0 -0
  132. {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference/admin.rst +0 -0
  133. {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference/api/v2.rst +0 -0
  134. {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference/api.rst +0 -0
  135. {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference/authentication.rst +0 -0
  136. {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference/glossary.rst +0 -0
  137. {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference/htmx-frontend.rst +0 -0
  138. {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference/img/ER_model.png +0 -0
  139. {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference/models.rst +0 -0
  140. {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference/site-specific-settings.rst +0 -0
  141. {argus_server-2.2.0 → argus_server-2.2.2}/docs/reference.rst +0 -0
  142. {argus_server-2.2.0 → argus_server-2.2.2}/docs/user-manual.rst +0 -0
  143. {argus_server-2.2.0 → argus_server-2.2.2}/requirements/dev.txt +0 -0
  144. {argus_server-2.2.0 → argus_server-2.2.2}/requirements/django52.txt +0 -0
  145. {argus_server-2.2.0 → argus_server-2.2.2}/requirements/please-pip-sync.txt +0 -0
  146. {argus_server-2.2.0 → argus_server-2.2.2}/requirements/test.txt +0 -0
  147. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/__init__.py +0 -0
  148. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/__init__.py +0 -0
  149. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/admin.py +0 -0
  150. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/apps.py +0 -0
  151. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/authentication.py +0 -0
  152. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/context_processors.py +0 -0
  153. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/drftoken/__init__.py +0 -0
  154. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/drftoken/serializers.py +0 -0
  155. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/drftoken/urls.py +0 -0
  156. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/drftoken/views.py +0 -0
  157. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/factories.py +0 -0
  158. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/knox/__init__.py +0 -0
  159. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/knox/serializers.py +0 -0
  160. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/knox/urls.py +0 -0
  161. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/knox/views.py +0 -0
  162. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/management/__init__.py +0 -0
  163. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/management/commands/__init__.py +0 -0
  164. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/management/commands/changeuser.py +0 -0
  165. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/management/commands/createuser.py +0 -0
  166. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/management/commands/grantsuperuser.py +0 -0
  167. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/management/commands/revokesuperuser.py +0 -0
  168. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/management/commands/setpassword.py +0 -0
  169. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/migrations/0001_initial.py +0 -0
  170. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/migrations/0002_alter_user_first_name.py +0 -0
  171. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/migrations/0002_squashed_auth_20250512_add_preferences_model.py +0 -0
  172. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/migrations/0003_delete_phonenumber.py +0 -0
  173. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/migrations/0004_add_preferences_model.py +0 -0
  174. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/migrations/__init__.py +0 -0
  175. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/models.py +0 -0
  176. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/serializers.py +0 -0
  177. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/urls.py +0 -0
  178. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/utils.py +0 -0
  179. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/auth/views.py +0 -0
  180. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/base/__init__.py +0 -0
  181. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/base/apps.py +0 -0
  182. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/base/static/favicon.svg +0 -0
  183. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/base/templates/base.html +0 -0
  184. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/base/templates/index.html +0 -0
  185. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/compat.py +0 -0
  186. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/__init__.py +0 -0
  187. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/apps.py +0 -0
  188. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/__init__.py +0 -0
  189. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/__init__.py +0 -0
  190. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/bulk_incidents.py +0 -0
  191. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/check_token_expiry.py +0 -0
  192. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/close_incident.py +0 -0
  193. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/create_fake_incident.py +0 -0
  194. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/create_source.py +0 -0
  195. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/gen_secret_key.py +0 -0
  196. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/initial_setup.py +0 -0
  197. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/list_filters.py +0 -0
  198. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/stresstest.py +0 -0
  199. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/management/commands/toggle_profile_activation.py +0 -0
  200. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/dev/utils.py +0 -0
  201. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/drf/__init__.py +0 -0
  202. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/drf/permissions.py +0 -0
  203. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/__init__.py +0 -0
  204. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/apps.py +0 -0
  205. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/checks.py +0 -0
  206. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/default.py +0 -0
  207. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/factories.py +0 -0
  208. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/filters.py +0 -0
  209. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/filterwrapper.py +0 -0
  210. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/primitive_serializers.py +0 -0
  211. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/queryset_filters.py +0 -0
  212. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/serializers.py +0 -0
  213. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/swappable/__init__.py +0 -0
  214. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/swappable/serializers.py +0 -0
  215. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/filter/validators.py +0 -0
  216. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/__init__.py +0 -0
  217. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/appconfig.py +0 -0
  218. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/apps.py +0 -0
  219. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/auth/__init__.py +0 -0
  220. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/auth/views.py +0 -0
  221. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/checks.py +0 -0
  222. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/constants.py +0 -0
  223. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/context_processors.py +0 -0
  224. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/dateformat/__init__.py +0 -0
  225. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/dateformat/constants.py +0 -0
  226. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/defaults.py +0 -0
  227. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/destination/__init__.py +0 -0
  228. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/destination/forms.py +0 -0
  229. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/destination/urls.py +0 -0
  230. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/destination/views.py +0 -0
  231. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/htmx_urls.py +0 -0
  232. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/incident/__init__.py +0 -0
  233. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/incident/constants.py +0 -0
  234. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/incident/customization.py +0 -0
  235. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/incident/urls.py +0 -0
  236. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/incident/utils.py +0 -0
  237. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/incident/views.py +0 -0
  238. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/management/__init__.py +0 -0
  239. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/management/commands/__init__.py +0 -0
  240. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/management/commands/tailwind_config.py +0 -0
  241. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/middleware.py +0 -0
  242. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/migrations/0001_initial.py +0 -0
  243. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/migrations/__init__.py +0 -0
  244. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/modals.py +0 -0
  245. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/models.py +0 -0
  246. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/notificationprofile/__init__.py +0 -0
  247. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/notificationprofile/urls.py +0 -0
  248. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/notificationprofile/views.py +0 -0
  249. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/request.py +0 -0
  250. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/root_urls.py +0 -0
  251. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/settings.py +0 -0
  252. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/static/htmx-2.0.2.min.js +0 -0
  253. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/static/hyperscript-0.9.13.min.js +0 -0
  254. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/static/logo_white.svg +0 -0
  255. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/README.md +0 -0
  256. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/__init__.py +0 -0
  257. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/get_tailwind.py +0 -0
  258. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/snippets/10-tailwind.css +0 -0
  259. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/snippets/15-alert-message.css +0 -0
  260. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/snippets/20-loading-box.css +0 -0
  261. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/styles.css +0 -0
  262. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/tailwind.config.js +0 -0
  263. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/tailwindtheme/utils.py +0 -0
  264. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/django/forms/widgets/attrs.html +0 -0
  265. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/_base_confirm_dialog.html +0 -0
  266. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/_base_form_modal.html +0 -0
  267. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/_base_form_modal_button.html +0 -0
  268. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/_base_form_modal_experimental.html +0 -0
  269. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/base.html +0 -0
  270. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/destination/_collapse_with_forms.html +0 -0
  271. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/destination/_content.html +0 -0
  272. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/destination/_create_form.html +0 -0
  273. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/destination/_delete_form.html +0 -0
  274. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/destination/_edit_form.html +0 -0
  275. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/destination/_form_list.html +0 -0
  276. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/destination/destination_list.html +0 -0
  277. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/forms/badge_dropdown_select_multiple.html +0 -0
  278. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/forms/checkbox_select_multiple.html +0 -0
  279. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/forms/dropdown_select_multiple.html +0 -0
  280. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/forms/input_field.html +0 -0
  281. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_base.html +0 -0
  282. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_base_incident_update_modal.html +0 -0
  283. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_delete_filter_confirm_dialog.html +0 -0
  284. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_existing_filters.html +0 -0
  285. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_filter_controls.html +0 -0
  286. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_filter_create_modal.html +0 -0
  287. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_filter_delete_dropdown.html +0 -0
  288. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_filter_select.html +0 -0
  289. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_filter_update_dropdown.html +0 -0
  290. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_acknowledge_modal.html +0 -0
  291. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_close_modal.html +0 -0
  292. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_filterbox.html +0 -0
  293. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_list_menubar.html +0 -0
  294. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_list_refresh_info.html +0 -0
  295. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_list_update_menu.html +0 -0
  296. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_reopen_modal.html +0 -0
  297. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_table.html +0 -0
  298. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_table_cell_wrapper_default.html +0 -0
  299. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_table_cell_wrapper_link_to_details.html +0 -0
  300. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_table_paginator.html +0 -0
  301. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_table_paginator_pageitem.html +0 -0
  302. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_table_row.html +0 -0
  303. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_table_rows.html +0 -0
  304. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_ticket_autocreate_modal.html +0 -0
  305. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_ticket_edit_modal.html +0 -0
  306. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_incident_ticket_manual_create_modal.html +0 -0
  307. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/_update_filter_confirm_dialog.html +0 -0
  308. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_ack.html +0 -0
  309. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_actions.html +0 -0
  310. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_checkbox.html +0 -0
  311. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_color_status.html +0 -0
  312. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_combined_status.html +0 -0
  313. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_description.html +0 -0
  314. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_filterable_column_header.html +0 -0
  315. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_level.html +0 -0
  316. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_list_select_all_checkbox_header.html +0 -0
  317. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_pk.html +0 -0
  318. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_source.html +0 -0
  319. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_start_time.html +0 -0
  320. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_start_time_header.html +0 -0
  321. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_status.html +0 -0
  322. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_tag.html +0 -0
  323. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/cells/_incident_ticket.html +0 -0
  324. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/filter_list.html +0 -0
  325. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/incident_detail.html +0 -0
  326. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/incident_list.html +0 -0
  327. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/responses/_incident_list_refresh.html +0 -0
  328. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/incident/responses/empty_list_item.html +0 -0
  329. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/notificationprofile/_notificationprofile_form.html +0 -0
  330. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/notificationprofile/_notificationprofile_form_div.html +0 -0
  331. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/notificationprofile/base.html +0 -0
  332. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/notificationprofile/notificationprofile_confirm_delete.html +0 -0
  333. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/notificationprofile/notificationprofile_form.html +0 -0
  334. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/notificationprofile/notificationprofile_list.html +0 -0
  335. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/timeslot/_delete_timeslot_confirm_dialog.html +0 -0
  336. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/timeslot/_timeslot_detail.html +0 -0
  337. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/timeslot/_timeslot_form.html +0 -0
  338. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/timeslot/base.html +0 -0
  339. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/timeslot/checkbox_option.html +0 -0
  340. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/timeslot/timeslot_confirm_delete.html +0 -0
  341. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/timeslot/timeslot_form.html +0 -0
  342. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/timeslot/timeslot_list.html +0 -0
  343. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_current_theme.html +0 -0
  344. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_dateformat_dropdown.html +0 -0
  345. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_page_size_dropdown.html +0 -0
  346. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_theme_dropdown.html +0 -0
  347. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_update_interval_dropdown.html +0 -0
  348. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_user_menu.html +0 -0
  349. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_user_menu_logout.html +0 -0
  350. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_user_menu_notification_config.html +0 -0
  351. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/_user_menu_user_preferences.html +0 -0
  352. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx/user/preferences.html +0 -0
  353. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/htmx_base.html +0 -0
  354. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/messages/_notification_message.html +0 -0
  355. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/messages/_notification_messages.html +0 -0
  356. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/messages/_notification_messages_htmx_append.html +0 -0
  357. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/tailwind/styles.css +0 -0
  358. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/tailwind/tailwind.config.js +0 -0
  359. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templates/tailwind_whitelist.html +0 -0
  360. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templatetags/__init__.py +0 -0
  361. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/templatetags/argus_htmx.py +0 -0
  362. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/themes/__init__.py +0 -0
  363. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/themes/constants.py +0 -0
  364. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/themes/utils.py +0 -0
  365. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/timeslot/__init__.py +0 -0
  366. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/timeslot/urls.py +0 -0
  367. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/user/__init__.py +0 -0
  368. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/user/preferences/__init__.py +0 -0
  369. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/user/preferences/models.py +0 -0
  370. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/user/urls.py +0 -0
  371. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/user/views.py +0 -0
  372. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/utils.py +0 -0
  373. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/htmx/widgets.py +0 -0
  374. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/__init__.py +0 -0
  375. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/admin.py +0 -0
  376. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/apps.py +0 -0
  377. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/constants.py +0 -0
  378. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/factories.py +0 -0
  379. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/fields.py +0 -0
  380. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/forms.py +0 -0
  381. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0001_initial.py +0 -0
  382. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0001_squashed_incident_20250514.py +0 -0
  383. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0002_empty_source_incident_id.py +0 -0
  384. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0003_incident_level.py +0 -0
  385. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0004_add_ChangeEvent_proxy.py +0 -0
  386. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0005_alter_event_type.py +0 -0
  387. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0006_incident_search_text.py +0 -0
  388. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0007_alter_event_type.py +0 -0
  389. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0008_incident_metadata.py +0 -0
  390. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/0009_use_bigautofield_on_quickly_growing_tables.py +0 -0
  391. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/migrations/__init__.py +0 -0
  392. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/models.py +0 -0
  393. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/serializers.py +0 -0
  394. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/signals.py +0 -0
  395. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/templates/incident/admin/fake_incident_add_form.html +0 -0
  396. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/templates/incident/admin/incident_change_list.html +0 -0
  397. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/templates/incident/admin/widgets/split_datetime_infinity.html +0 -0
  398. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/templates/incident/ticket/default_ticket_body.html +0 -0
  399. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/ticket/__init__.py +0 -0
  400. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/ticket/base.py +0 -0
  401. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/ticket/dummy.py +0 -0
  402. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/ticket/utils.py +0 -0
  403. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/urls.py +0 -0
  404. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/validators.py +0 -0
  405. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/views.py +0 -0
  406. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/incident/widgets.py +0 -0
  407. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/__init__.py +0 -0
  408. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/admin.py +0 -0
  409. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/apps.py +0 -0
  410. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/checks.py +0 -0
  411. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/factories.py +0 -0
  412. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/migrations/0001_squashed_0015_remove_days_alter_days_array.py +0 -0
  413. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/migrations/0001_squashed_notificationprofile_20250512.py +0 -0
  414. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/migrations/0016_noop.py +0 -0
  415. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/migrations/0017_change_event_type_to_event_types.py +0 -0
  416. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/migrations/0018_remove_closed_and_unacked_from_filterblob.py +0 -0
  417. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/migrations/__init__.py +0 -0
  418. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/models.py +0 -0
  419. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/serializers.py +0 -0
  420. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/signals.py +0 -0
  421. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/templates/notificationprofile/email.html +0 -0
  422. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/templates/notificationprofile/email.txt +0 -0
  423. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/templates/schemawrapper.html +0 -0
  424. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/urls.py +0 -0
  425. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/notificationprofile/views.py +0 -0
  426. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/__init__.py +0 -0
  427. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/api_v2_urls.py +0 -0
  428. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/logging.py +0 -0
  429. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/serializers.py +0 -0
  430. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/settings/__init__.py +0 -0
  431. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/settings/_serializers.py +0 -0
  432. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/settings/backend.py +0 -0
  433. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/settings/base.py +0 -0
  434. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/settings/dev.py +0 -0
  435. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/settings/dockerdev.py +0 -0
  436. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/settings/prod.py +0 -0
  437. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/settings/test_CI.py +0 -0
  438. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/urls.py +0 -0
  439. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/utils.py +0 -0
  440. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/views.py +0 -0
  441. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/site/wsgi.py +0 -0
  442. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/util/__init__.py +0 -0
  443. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/util/admin_utils.py +0 -0
  444. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/util/datetime_utils.py +0 -0
  445. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/util/testing.py +0 -0
  446. {argus_server-2.2.0 → argus_server-2.2.2}/src/argus/util/utils.py +0 -0
  447. {argus_server-2.2.0 → argus_server-2.2.2}/tests/__init__.py +0 -0
  448. {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/__init__.py +0 -0
  449. {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/management_commands/__init__.py +0 -0
  450. {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/management_commands/test_changeuser.py +0 -0
  451. {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/management_commands/test_createuser.py +0 -0
  452. {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/models.py +0 -0
  453. {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/test_auth.py +0 -0
  454. {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/test_knox_views.py +0 -0
  455. {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/test_models.py +0 -0
  456. {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/test_utils.py +0 -0
  457. {argus_server-2.2.0 → argus_server-2.2.2}/tests/auth/test_views.py +0 -0
  458. {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/__init__.py +0 -0
  459. {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_bulk_incidents.py +0 -0
  460. {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_check_token_expiry.py +0 -0
  461. {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_close_incident.py +0 -0
  462. {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_create_fake_incident.py +0 -0
  463. {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_create_source.py +0 -0
  464. {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_gen_secret_key.py +0 -0
  465. {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_initial_setup.py +0 -0
  466. {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_list_filters.py +0 -0
  467. {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_toggle_profile_activation.py +0 -0
  468. {argus_server-2.2.0 → argus_server-2.2.2}/tests/dev/test_utils.py +0 -0
  469. {argus_server-2.2.0 → argus_server-2.2.2}/tests/filter/__init__.py +0 -0
  470. {argus_server-2.2.0 → argus_server-2.2.2}/tests/filter/dummyplugin.py +0 -0
  471. {argus_server-2.2.0 → argus_server-2.2.2}/tests/filter/test_filterplugin.py +0 -0
  472. {argus_server-2.2.0 → argus_server-2.2.2}/tests/filter/test_filterwrapper.py +0 -0
  473. {argus_server-2.2.0 → argus_server-2.2.2}/tests/filter/test_queryset_filters.py +0 -0
  474. {argus_server-2.2.0 → argus_server-2.2.2}/tests/helpers.py +0 -0
  475. {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/__init__.py +0 -0
  476. {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/incident/__init__.py +0 -0
  477. {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/incident/test_customization.py +0 -0
  478. {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/incident/test_filter.py +0 -0
  479. {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/incident/test_utils.py +0 -0
  480. {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/notificationprofile/__init__.py +0 -0
  481. {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/notificationprofile/test_forms.py +0 -0
  482. {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/test_incident.py +0 -0
  483. {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/test_middleware.py +0 -0
  484. {argus_server-2.2.0 → argus_server-2.2.2}/tests/htmx/test_utils.py +0 -0
  485. {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/__init__.py +0 -0
  486. {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/fixtures/__init__.py +0 -0
  487. {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_change_event.py +0 -0
  488. {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_create_fake_incident.py +0 -0
  489. {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_event.py +0 -0
  490. {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_filters.py +0 -0
  491. {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_incident.py +0 -0
  492. {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_incident_fields.py +0 -0
  493. {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_queryset.py +0 -0
  494. {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_serializers.py +0 -0
  495. {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_source_system.py +0 -0
  496. {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_source_system_type.py +0 -0
  497. {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/test_views.py +0 -0
  498. {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/ticket_plugins/__init__.py +0 -0
  499. {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/ticket_plugins/test_base.py +0 -0
  500. {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/ticket_plugins/test_dummy.py +0 -0
  501. {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/ticket_plugins/test_utils.py +0 -0
  502. {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/unit/__init__.py +0 -0
  503. {argus_server-2.2.0 → argus_server-2.2.2}/tests/incident/unit/test_incident_details_url.py +0 -0
  504. {argus_server-2.2.0 → argus_server-2.2.2}/tests/migration_example.py +0 -0
  505. {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/__init__.py +0 -0
  506. {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/destinations/__init__.py +0 -0
  507. {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/destinations/test_email.py +0 -0
  508. {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/destinations/test_sms.py +0 -0
  509. {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/migrations/__init__.py +0 -0
  510. {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/test_github236.py +0 -0
  511. {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/test_models.py +0 -0
  512. {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/test_serializers.py +0 -0
  513. {argus_server-2.2.0 → argus_server-2.2.2}/tests/notificationprofile/test_views.py +0 -0
  514. {argus_server-2.2.0 → argus_server-2.2.2}/tests/site/__init__.py +0 -0
  515. {argus_server-2.2.0 → argus_server-2.2.2}/tests/site/test_misc.py +0 -0
  516. {argus_server-2.2.0 → argus_server-2.2.2}/tests/site/test_settings_helpers.py +0 -0
  517. {argus_server-2.2.0 → argus_server-2.2.2}/tests/site/test_settings_validators.py +0 -0
  518. {argus_server-2.2.0 → argus_server-2.2.2}/tests/site/test_views.py +0 -0
  519. {argus_server-2.2.0 → argus_server-2.2.2}/tests/util/__init__.py +0 -0
  520. {argus_server-2.2.0 → argus_server-2.2.2}/tests/util/test_utils.py +0 -0
  521. {argus_server-2.2.0 → argus_server-2.2.2}/tox.ini +0 -0
@@ -8,6 +8,44 @@ This project uses [*towncrier*](https://towncrier.readthedocs.io/) and the chang
8
8
 
9
9
  <!-- towncrier release notes start -->
10
10
 
11
+ ## [2.2.2] - 2025-11-03
12
+
13
+ ### Added
14
+
15
+ - Added the beginnings of a style guide at /styleguide/. The look of the form
16
+ inputs that were not manually laid out have in some cases also changed, for
17
+ greater consistency. ([#1558](https://github.com/Uninett/Argus/issues/1558))
18
+ - Added `zino-argus-glue` to documented list of known glue services
19
+
20
+ ### Changed
21
+
22
+ - Increased logging verbosity when finding destinations for notifications and
23
+ actually sending the notifications, to aid in debugging production systems.
24
+ Now also logs which destination id's are found and used.
25
+ ([#1563](https://github.com/Uninett/Argus/issues/1563))
26
+
27
+ ### Fixed
28
+
29
+ - The development docker compose had stopped working due to changes outside of
30
+ our control (pip, git, the very distro) and has been updated.
31
+
32
+
33
+ ## [2.2.1] - 2025-09-18
34
+
35
+ ### Fixed, frontend
36
+
37
+ * The incident list layout preference selector is no longer buggy
38
+
39
+ ### Fixed
40
+
41
+ * Some problems with the dockerfile for production was fixed (see /docker), and
42
+ the README and the comments in the Dockerfile have been improved
43
+
44
+ ### Changed
45
+
46
+ * Updated the installation instructions in the README, should have ben part of
47
+ 2.2.0
48
+
11
49
  ## [2.2.0] - 2025-08-26
12
50
 
13
51
  The most important bit of this release is the new (old) way to install and set
@@ -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,21 @@
3
3
  This file documents changes to Argus that are relevant for operations,
4
4
  customizers and end-users.
5
5
 
6
+ ## [2.2.2] - 2025-11-03
7
+
8
+ To aid in development there a live styleguide for the frontend on
9
+ `/styleguide`.
10
+
11
+ Logging verbosity has increased for sending notifications.
12
+
13
+ Otherwise: typos have been fixed, a new glue service has been added to the
14
+ documentation, the development docker-compose setup should be working again.
15
+
16
+
17
+ ## [2.2.1] - 2025-09-18
18
+
19
+ A bug in the user preference added in 2.1.0 was fixed, otherwise this is just
20
+ a polish this, document that, upgrade some dependencies release.
6
21
 
7
22
  ## [2.2.0] - 2025-08-26
8
23
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: argus-server
3
- Version: 2.2.0
3
+ Version: 2.2.2
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>
@@ -105,40 +105,35 @@ There are several ways to install Argus.
105
105
  * Docker and Docker Compose to run Argus in Docker. This will also run
106
106
  a PostgreSQL server for you.
107
107
 
108
- #### Optional: Frontend
109
-
110
- You need to have the frontend-specific dependencies installed.
111
-
112
- ```
113
- pip install argus-server[htmx]
114
- ```
115
-
116
- will do it.
117
-
118
108
  #### Optional: Federated login for frontend
119
109
 
120
110
  See [Federated Login @ Read The Docs](https://argus-server.rtfd.io/en/latest/development/howtos/federated-logins.html) or [local copy of Federated Login docs](docs/development/howtos/federated-logins.rst).
121
111
 
122
- ### Install Argus using pip
112
+ ### Install Argus using pip from PyPI
123
113
 
124
- You can also install Argus with `pip` via PyPI. The package name is `argus-server`:
114
+ You can install Argus with `pip` via PyPI. The package name is `argus-server`:
125
115
  ```console
126
116
  $ pip install argus-server
127
117
  ```
128
118
 
129
- If you are using the PyPI package in production, please note: The file
130
- `requirements.txt` contains the pinned versions of dependencies that the
131
- release was tested on. The file `constraints.txt` is for controlling versions
132
- of sub-dependencies so as to not poison the pyproject.toml.
119
+ If you are using the PyPI wheel package in production, please note: It does
120
+ not use pinned dependencies. (There is no single official standard for pinned
121
+ dependencies in Python as of yet.)
133
122
 
134
- To update the dependency lock-files, use `tox`:
123
+ ### Install Argus from source
135
124
 
125
+ Download the source code first.
136
126
  ```console
137
- $ pip install "tox>=4"
138
- $ tox run -e upgrade-deps -- -U
127
+ $ git clone https://github.com/Uninett/Argus.git
128
+ $ cd Argus
139
129
  ```
140
130
 
141
- To upgrade a single dependency, replace the `-U` flag with `-P PACKAGENAME`.
131
+ PyPI has sdists of the source if you do not want to use git.
132
+
133
+ The file `requirements.txt` contains the pinned versions of dependencies that
134
+ the release was tested on. The file `constraints.txt` is for controlling
135
+ versions of sub-dependencies so as to not poison the pyproject.toml. The wheel
136
+ package does not contain either of these two files.
142
137
 
143
138
  To install from the lock-file use pip:
144
139
 
@@ -146,6 +141,8 @@ To install from the lock-file use pip:
146
141
  $ pip install -c constraints.txt --upgrade -r requirements.txt
147
142
  ```
148
143
 
144
+ ### First run
145
+
149
146
  Now change and adapt [Argus' settings](#settings-in-argus) according to your needs.
150
147
 
151
148
  Run the initial Argus setup, and make note of the admin password that is generated:
@@ -167,6 +164,17 @@ Then run the Argus API server:
167
164
  $ python manage.py runserver
168
165
  ```
169
166
 
167
+ #### Update pinned dependencies
168
+
169
+ To update the dependency lock-files, use `tox`:
170
+
171
+ ```console
172
+ $ pip install "tox>=4"
173
+ $ tox run -e upgrade-deps -- -U
174
+ ```
175
+
176
+ To upgrade a single dependency, replace the `-U` flag with `-P PACKAGENAME`.
177
+
170
178
  ### Setup Argus using Docker Compose
171
179
 
172
180
  Download the source code first.
@@ -222,7 +230,7 @@ $ git clone https://github.com/Uninett/Argus.git
222
230
  $ cd Argus
223
231
  ```
224
232
 
225
- We recommend using virtualenv or virtaulenvwrapper to create
233
+ We recommend using virtualenv or virtualenvwrapper to create
226
234
  a place to stash Argus' dependencies.
227
235
 
228
236
  Create and activate a Python virtual environment.
@@ -46,40 +46,35 @@ There are several ways to install Argus.
46
46
  * Docker and Docker Compose to run Argus in Docker. This will also run
47
47
  a PostgreSQL server for you.
48
48
 
49
- #### Optional: Frontend
50
-
51
- You need to have the frontend-specific dependencies installed.
52
-
53
- ```
54
- pip install argus-server[htmx]
55
- ```
56
-
57
- will do it.
58
-
59
49
  #### Optional: Federated login for frontend
60
50
 
61
51
  See [Federated Login @ Read The Docs](https://argus-server.rtfd.io/en/latest/development/howtos/federated-logins.html) or [local copy of Federated Login docs](docs/development/howtos/federated-logins.rst).
62
52
 
63
- ### Install Argus using pip
53
+ ### Install Argus using pip from PyPI
64
54
 
65
- You can also install Argus with `pip` via PyPI. The package name is `argus-server`:
55
+ You can install Argus with `pip` via PyPI. The package name is `argus-server`:
66
56
  ```console
67
57
  $ pip install argus-server
68
58
  ```
69
59
 
70
- If you are using the PyPI package in production, please note: The file
71
- `requirements.txt` contains the pinned versions of dependencies that the
72
- release was tested on. The file `constraints.txt` is for controlling versions
73
- of sub-dependencies so as to not poison the pyproject.toml.
60
+ If you are using the PyPI wheel package in production, please note: It does
61
+ not use pinned dependencies. (There is no single official standard for pinned
62
+ dependencies in Python as of yet.)
74
63
 
75
- To update the dependency lock-files, use `tox`:
64
+ ### Install Argus from source
76
65
 
66
+ Download the source code first.
77
67
  ```console
78
- $ pip install "tox>=4"
79
- $ tox run -e upgrade-deps -- -U
68
+ $ git clone https://github.com/Uninett/Argus.git
69
+ $ cd Argus
80
70
  ```
81
71
 
82
- To upgrade a single dependency, replace the `-U` flag with `-P PACKAGENAME`.
72
+ PyPI has sdists of the source if you do not want to use git.
73
+
74
+ The file `requirements.txt` contains the pinned versions of dependencies that
75
+ the release was tested on. The file `constraints.txt` is for controlling
76
+ versions of sub-dependencies so as to not poison the pyproject.toml. The wheel
77
+ package does not contain either of these two files.
83
78
 
84
79
  To install from the lock-file use pip:
85
80
 
@@ -87,6 +82,8 @@ To install from the lock-file use pip:
87
82
  $ pip install -c constraints.txt --upgrade -r requirements.txt
88
83
  ```
89
84
 
85
+ ### First run
86
+
90
87
  Now change and adapt [Argus' settings](#settings-in-argus) according to your needs.
91
88
 
92
89
  Run the initial Argus setup, and make note of the admin password that is generated:
@@ -108,6 +105,17 @@ Then run the Argus API server:
108
105
  $ python manage.py runserver
109
106
  ```
110
107
 
108
+ #### Update pinned dependencies
109
+
110
+ To update the dependency lock-files, use `tox`:
111
+
112
+ ```console
113
+ $ pip install "tox>=4"
114
+ $ tox run -e upgrade-deps -- -U
115
+ ```
116
+
117
+ To upgrade a single dependency, replace the `-U` flag with `-P PACKAGENAME`.
118
+
111
119
  ### Setup Argus using Docker Compose
112
120
 
113
121
  Download the source code first.
@@ -163,7 +171,7 @@ $ git clone https://github.com/Uninett/Argus.git
163
171
  $ cd Argus
164
172
  ```
165
173
 
166
- We recommend using virtualenv or virtaulenvwrapper to create
174
+ We recommend using virtualenv or virtualenvwrapper to create
167
175
  a place to stash Argus' dependencies.
168
176
 
169
177
  Create and activate a Python virtual environment.
@@ -2,16 +2,20 @@
2
2
  # Needs the repository root directory as its context:
3
3
  #
4
4
  # If you're in the same dorectory as this Dockerfile try:
5
- # docker build ..
5
+ # docker build -f Dockerfile ..
6
6
  #
7
7
  # If you're in the repository root try:
8
8
  # docker build -f docker/Dockerfile .
9
9
 
10
- FROM python:3.12
10
+ FROM python:3.13-trixie
11
11
  ENV DEBIAN_FRONTEND=noninteractive
12
12
 
13
13
  RUN apt-get update && apt-get install -y --no-install-recommends tini build-essential
14
14
 
15
+ ENV VIRTUAL_ENV=/opt/venv
16
+ RUN python3 -m venv $VIRTUAL_ENV
17
+ ENV PATH="$VIRTUAL_ENV/bin:$PATH"
18
+
15
19
  # Install some dev requirements that aren't part of the minimal dependencies:
16
20
  RUN pip install psycopg2-binary django-extensions python-dotenv gunicorn
17
21
 
@@ -21,10 +21,23 @@ docker build -t argus -f docker/Dockerfile .
21
21
  ## Configuration of the running container
22
22
 
23
23
  This image runs with default production settings, with a few tweaks from
24
- [dockersettings.py](dockersettings.py). This means that the most useful
25
- settings can be overriden through the use of environment variables exported to
26
- the container. Consult the documentation section on [site-specific
24
+ [dockersettings.py](dockersettings.py). The most useful settings can be
25
+ overriden through the use of environment variables exported to the container,
26
+ but some MUST be set.
27
+
28
+ The required environment variables in question are:
29
+
30
+ * `ARGUS_FRONTEND_URL` (url)
31
+ * `DATABASE_URL` (example: postgresql://argus:PASSWORD@HOST.NAME:5432/argus)
32
+ * `DEFAULT_FROM_EMAIL` (email address)
33
+ * `EMAIL_HOST` (hostname or ip address)
34
+ * `SECRET_KEY` (long random string, around 50 characters is good)
35
+
36
+ The `SECRET_KEY` and `DATABASE_URL` should be protected from prying eyes.
37
+
38
+ Consult the documentation section on [site-specific
27
39
  settings](http://argus-server.rtfd.io/en/latest/site-specific-settings.html).
40
+ for further details.
28
41
 
29
42
  ## Limitations
30
43
 
@@ -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.
@@ -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
 
@@ -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"
@@ -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 --extra=htmx --output-file=requirements-django52.txt constraints.txt pyproject.toml requirements/django52.txt
5
+ # pip-compile --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.2
40
+ django==5.2.7
41
41
  # via
42
42
  # -r requirements/django52.txt
43
43
  # argus-server (pyproject.toml)
@@ -139,7 +139,7 @@ rpds-py==0.25.1
139
139
  # referencing
140
140
  sniffio==1.3.1
141
141
  # via anyio
142
- social-auth-app-django==5.4.3
142
+ social-auth-app-django==5.6.0
143
143
  # via argus-server (pyproject.toml)
144
144
  social-auth-core==4.6.1
145
145
  # via
@@ -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 --extra=htmx --output-file=requirements.txt constraints.txt pyproject.toml requirements/django52.txt
5
+ # pip-compile --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.2
40
+ django==5.2.7
41
41
  # via
42
42
  # -r requirements/django52.txt
43
43
  # argus-server (pyproject.toml)
@@ -139,7 +139,7 @@ rpds-py==0.25.1
139
139
  # referencing
140
140
  sniffio==1.3.1
141
141
  # via anyio
142
- social-auth-app-django==5.4.3
142
+ social-auth-app-django==5.6.0
143
143
  # via argus-server (pyproject.toml)
144
144
  social-auth-core==4.6.1
145
145
  # via
@@ -0,0 +1,73 @@
1
+ from django import forms
2
+ from django.core.exceptions import ValidationError
3
+
4
+
5
+ __all__ = ["StyleGuideForm"]
6
+
7
+
8
+ class _ArgusBaseForm(forms.Form):
9
+ def __init__(self, *args, **kwargs):
10
+ kwargs.setdefault("label_suffix", "")
11
+ super().__init__(*args, **kwargs)
12
+
13
+
14
+ # Turn off colons EVERYWHERE
15
+ forms.Form = _ArgusBaseForm
16
+
17
+
18
+ class StyleGuideForm(forms.Form):
19
+ ERROR_INPUT = "MXZ"
20
+ _choices = ("S", "Medium", "Loooooooong", "Multi word long choice")
21
+ CHOICES = tuple(enumerate(_choices, 1))
22
+
23
+ # field variations:
24
+ required = forms.CharField(required=True)
25
+ help_text = forms.CharField(
26
+ required=False, help_text="This is the help text for a specific field, should always be shown"
27
+ )
28
+ error = forms.CharField(required=True)
29
+
30
+ # field types:
31
+ input_ = forms.CharField(label="Input", required=False)
32
+ password = forms.Field(required=False, widget=forms.PasswordInput)
33
+ number = forms.IntegerField(required=False)
34
+ date = forms.DateField(required=False)
35
+ datetime = forms.DateTimeField(required=False)
36
+ time = forms.TimeField(required=False)
37
+ email = forms.EmailField(required=False)
38
+ url = forms.URLField(required=False)
39
+ checkbox = forms.BooleanField(required=False)
40
+ select = forms.ChoiceField(required=False, choices=CHOICES)
41
+ checkbox_select = forms.ChoiceField(
42
+ required=False,
43
+ choices=CHOICES,
44
+ widget=forms.CheckboxSelectMultiple,
45
+ )
46
+ radio_select = forms.ChoiceField(
47
+ required=False,
48
+ choices=CHOICES,
49
+ widget=forms.RadioSelect,
50
+ )
51
+
52
+ # special field types:
53
+ # level as range
54
+ # typeahead
55
+ # ..
56
+
57
+ def clean_error(self):
58
+ input = self.cleaned_data.get("error", "")
59
+ if input != self.ERROR_INPUT:
60
+ raise ValidationError(
61
+ 'This field only accepts "%(correct)s" as a value',
62
+ params={"correct": self.ERROR_INPUT},
63
+ code="invalid",
64
+ )
65
+ return input
66
+
67
+ def clean(self):
68
+ cleaned_data = super().clean()
69
+ if not (cleaned_data.get("error", None) and cleaned_data.get("required", None)):
70
+ raise ValidationError(
71
+ 'Both of the fields "required" and "error" needs to be filled and valid',
72
+ code="invalid",
73
+ )
@@ -13,18 +13,22 @@ filter_backend = get_filter_backend()
13
13
  QuerySetFilter = filter_backend.QuerySetFilter
14
14
 
15
15
 
16
+ class RangeInput(forms.NumberInput):
17
+ template_name = "django/forms/widgets/range.html"
18
+
19
+
16
20
  class IncidentFilterForm(forms.Form):
17
21
  open = forms.IntegerField(
18
- widget=forms.NumberInput(
19
- attrs={"type": "range", "step": "1", "min": min(OpenStatus).value, "max": max(OpenStatus).value}
22
+ widget=RangeInput(
23
+ attrs={"class": "range-primary", "step": "1", "min": min(OpenStatus).value, "max": max(OpenStatus).value}
20
24
  ),
21
25
  label="Open State",
22
26
  initial=OpenStatus.BOTH.value,
23
27
  required=False,
24
28
  )
25
29
  acked = forms.IntegerField(
26
- widget=forms.NumberInput(
27
- attrs={"type": "range", "step": "1", "min": min(AckedStatus).value, "max": max(AckedStatus).value}
30
+ widget=RangeInput(
31
+ attrs={"class": "range-primary", "step": "1", "min": min(AckedStatus).value, "max": max(AckedStatus).value}
28
32
  ),
29
33
  label="Acked",
30
34
  initial=AckedStatus.BOTH.value,
@@ -42,7 +46,7 @@ class IncidentFilterForm(forms.Form):
42
46
  widget=forms.TextInput(
43
47
  attrs={
44
48
  "placeholder": "key=value, ...",
45
- "class": "input input-primary input-bordered input-sm overflow-y-auto min-h-8 h-auto max-h-16 max-w-xs leading-tight",
49
+ "class": "input-primary input-sm overflow-y-auto min-h-8 h-auto max-h-16 max-w-xs leading-tight",
46
50
  }
47
51
  ),
48
52
  required=False,
@@ -50,8 +54,8 @@ class IncidentFilterForm(forms.Form):
50
54
  help_text='Press "Enter" after each completed tag',
51
55
  )
52
56
  maxlevel = forms.IntegerField(
53
- widget=forms.NumberInput(
54
- attrs={"type": "range", "step": "1", "min": min(Level).value, "max": max(Level).value}
57
+ widget=RangeInput(
58
+ attrs={"class": "range-primary", "step": "1", "min": min(Level).value, "max": max(Level).value}
55
59
  ),
56
60
  label="Level <=",
57
61
  initial=max(Level).value,
@@ -38,7 +38,7 @@ class TimeframeForm(forms.Form):
38
38
  initial=TIMEFRAME_DEFAULT,
39
39
  widget=forms.Select(
40
40
  attrs={
41
- "class": "select select-xs bg-transparent text-base border-none -ml-2",
41
+ "class": "border-none select-xs bg-transparent text-base -ml-2",
42
42
  "autocomplete": "off",
43
43
  "hx-get": ".",
44
44
  "hx-trigger": "change",