patchman 4.0.2__tar.gz → 4.0.4__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 (334) hide show
  1. {patchman-4.0.2 → patchman-4.0.4}/PKG-INFO +1 -1
  2. patchman-4.0.4/VERSION.txt +1 -0
  3. {patchman-4.0.2 → patchman-4.0.4}/hosts/views.py +16 -1
  4. {patchman-4.0.2 → patchman-4.0.4}/patchman/settings.py +1 -0
  5. {patchman-4.0.2 → patchman-4.0.4}/patchman/static/css/base.css +1 -0
  6. {patchman-4.0.2 → patchman-4.0.4}/patchman.egg-info/PKG-INFO +1 -1
  7. {patchman-4.0.2 → patchman-4.0.4}/reports/utils.py +1 -1
  8. {patchman-4.0.2 → patchman-4.0.4}/util/context_processors.py +55 -0
  9. {patchman-4.0.2 → patchman-4.0.4}/util/templates/navbar.html +1 -0
  10. patchman-4.0.2/VERSION.txt +0 -1
  11. {patchman-4.0.2 → patchman-4.0.4}/AUTHORS +0 -0
  12. {patchman-4.0.2 → patchman-4.0.4}/COPYING +0 -0
  13. {patchman-4.0.2 → patchman-4.0.4}/INSTALL.md +0 -0
  14. {patchman-4.0.2 → patchman-4.0.4}/MANIFEST.in +0 -0
  15. {patchman-4.0.2 → patchman-4.0.4}/README.md +0 -0
  16. {patchman-4.0.2 → patchman-4.0.4}/arch/__init__.py +0 -0
  17. {patchman-4.0.2 → patchman-4.0.4}/arch/admin.py +0 -0
  18. {patchman-4.0.2 → patchman-4.0.4}/arch/apps.py +0 -0
  19. {patchman-4.0.2 → patchman-4.0.4}/arch/migrations/0001_initial.py +0 -0
  20. {patchman-4.0.2 → patchman-4.0.4}/arch/migrations/__init__.py +0 -0
  21. {patchman-4.0.2 → patchman-4.0.4}/arch/models.py +0 -0
  22. {patchman-4.0.2 → patchman-4.0.4}/arch/serializers.py +0 -0
  23. {patchman-4.0.2 → patchman-4.0.4}/arch/tests/__init__.py +0 -0
  24. {patchman-4.0.2 → patchman-4.0.4}/arch/tests/test_api.py +0 -0
  25. {patchman-4.0.2 → patchman-4.0.4}/arch/tests/test_models.py +0 -0
  26. {patchman-4.0.2 → patchman-4.0.4}/arch/utils.py +0 -0
  27. {patchman-4.0.2 → patchman-4.0.4}/arch/views.py +0 -0
  28. {patchman-4.0.2 → patchman-4.0.4}/domains/__init__.py +0 -0
  29. {patchman-4.0.2 → patchman-4.0.4}/domains/admin.py +0 -0
  30. {patchman-4.0.2 → patchman-4.0.4}/domains/apps.py +0 -0
  31. {patchman-4.0.2 → patchman-4.0.4}/domains/migrations/0001_initial.py +0 -0
  32. {patchman-4.0.2 → patchman-4.0.4}/domains/migrations/__init__.py +0 -0
  33. {patchman-4.0.2 → patchman-4.0.4}/domains/models.py +0 -0
  34. {patchman-4.0.2 → patchman-4.0.4}/domains/serializers.py +0 -0
  35. {patchman-4.0.2 → patchman-4.0.4}/domains/tests/__init__.py +0 -0
  36. {patchman-4.0.2 → patchman-4.0.4}/domains/tests/test_api.py +0 -0
  37. {patchman-4.0.2 → patchman-4.0.4}/domains/tests/test_models.py +0 -0
  38. {patchman-4.0.2 → patchman-4.0.4}/domains/views.py +0 -0
  39. {patchman-4.0.2 → patchman-4.0.4}/errata/__init__.py +0 -0
  40. {patchman-4.0.2 → patchman-4.0.4}/errata/admin.py +0 -0
  41. {patchman-4.0.2 → patchman-4.0.4}/errata/apps.py +0 -0
  42. {patchman-4.0.2 → patchman-4.0.4}/errata/managers.py +0 -0
  43. {patchman-4.0.2 → patchman-4.0.4}/errata/migrations/0001_initial.py +0 -0
  44. {patchman-4.0.2 → patchman-4.0.4}/errata/migrations/0002_alter_erratumreference_unique_together.py +0 -0
  45. {patchman-4.0.2 → patchman-4.0.4}/errata/migrations/0003_delete_erratumreference_alter_erratum_references.py +0 -0
  46. {patchman-4.0.2 → patchman-4.0.4}/errata/migrations/0004_rename_packages_erratum_fixed_packages.py +0 -0
  47. {patchman-4.0.2 → patchman-4.0.4}/errata/migrations/0005_erratum_affected_packages_and_more.py +0 -0
  48. {patchman-4.0.2 → patchman-4.0.4}/errata/migrations/0006_alter_erratum_options.py +0 -0
  49. {patchman-4.0.2 → patchman-4.0.4}/errata/migrations/0007_alter_erratum_fixed_packages.py +0 -0
  50. {patchman-4.0.2 → patchman-4.0.4}/errata/migrations/__init__.py +0 -0
  51. {patchman-4.0.2 → patchman-4.0.4}/errata/models.py +0 -0
  52. {patchman-4.0.2 → patchman-4.0.4}/errata/serializers.py +0 -0
  53. {patchman-4.0.2 → patchman-4.0.4}/errata/sources/__init__.py +0 -0
  54. {patchman-4.0.2 → patchman-4.0.4}/errata/sources/distros/__init__.py +0 -0
  55. {patchman-4.0.2 → patchman-4.0.4}/errata/sources/distros/alma.py +0 -0
  56. {patchman-4.0.2 → patchman-4.0.4}/errata/sources/distros/arch.py +0 -0
  57. {patchman-4.0.2 → patchman-4.0.4}/errata/sources/distros/centos.py +0 -0
  58. {patchman-4.0.2 → patchman-4.0.4}/errata/sources/distros/debian.py +0 -0
  59. {patchman-4.0.2 → patchman-4.0.4}/errata/sources/distros/rocky.py +0 -0
  60. {patchman-4.0.2 → patchman-4.0.4}/errata/sources/distros/ubuntu.py +0 -0
  61. {patchman-4.0.2 → patchman-4.0.4}/errata/sources/repos/__init__.py +0 -0
  62. {patchman-4.0.2 → patchman-4.0.4}/errata/sources/repos/yum.py +0 -0
  63. {patchman-4.0.2 → patchman-4.0.4}/errata/tables.py +0 -0
  64. {patchman-4.0.2 → patchman-4.0.4}/errata/tasks.py +0 -0
  65. {patchman-4.0.2 → patchman-4.0.4}/errata/templates/errata/erratum_detail.html +0 -0
  66. {patchman-4.0.2 → patchman-4.0.4}/errata/templates/errata/erratum_list.html +0 -0
  67. {patchman-4.0.2 → patchman-4.0.4}/errata/tests/__init__.py +0 -0
  68. {patchman-4.0.2 → patchman-4.0.4}/errata/tests/test_api.py +0 -0
  69. {patchman-4.0.2 → patchman-4.0.4}/errata/tests/test_integration.py +0 -0
  70. {patchman-4.0.2 → patchman-4.0.4}/errata/tests/test_models.py +0 -0
  71. {patchman-4.0.2 → patchman-4.0.4}/errata/urls.py +0 -0
  72. {patchman-4.0.2 → patchman-4.0.4}/errata/utils.py +0 -0
  73. {patchman-4.0.2 → patchman-4.0.4}/errata/views.py +0 -0
  74. {patchman-4.0.2 → patchman-4.0.4}/etc/patchman/apache.conf.example +0 -0
  75. {patchman-4.0.2 → patchman-4.0.4}/etc/patchman/celery.conf +0 -0
  76. {patchman-4.0.2 → patchman-4.0.4}/etc/patchman/local_settings.py +0 -0
  77. {patchman-4.0.2 → patchman-4.0.4}/etc/systemd/system/patchman-celery-beat.service +0 -0
  78. {patchman-4.0.2 → patchman-4.0.4}/etc/systemd/system/patchman-celery-worker.service +0 -0
  79. {patchman-4.0.2 → patchman-4.0.4}/hosts/__init__.py +0 -0
  80. {patchman-4.0.2 → patchman-4.0.4}/hosts/admin.py +0 -0
  81. {patchman-4.0.2 → patchman-4.0.4}/hosts/apps.py +0 -0
  82. {patchman-4.0.2 → patchman-4.0.4}/hosts/forms.py +0 -0
  83. {patchman-4.0.2 → patchman-4.0.4}/hosts/managers.py +0 -0
  84. {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/0001_initial.py +0 -0
  85. {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/0002_initial.py +0 -0
  86. {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/0003_host_modules.py +0 -0
  87. {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/0004_remove_host_tags_host_tags.py +0 -0
  88. {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/0005_rename_os_host_osvariant.py +0 -0
  89. {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/0006_migrate_to_tz_aware.py +0 -0
  90. {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/0007_alter_host_tags.py +0 -0
  91. {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/0008_alter_host_options.py +0 -0
  92. {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/0009_host_errata.py +0 -0
  93. {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/__init__.py +0 -0
  94. {patchman-4.0.2 → patchman-4.0.4}/hosts/models.py +0 -0
  95. {patchman-4.0.2 → patchman-4.0.4}/hosts/serializers.py +0 -0
  96. {patchman-4.0.2 → patchman-4.0.4}/hosts/tables.py +0 -0
  97. {patchman-4.0.2 → patchman-4.0.4}/hosts/tasks.py +0 -0
  98. {patchman-4.0.2 → patchman-4.0.4}/hosts/templates/hosts/host_delete.html +0 -0
  99. {patchman-4.0.2 → patchman-4.0.4}/hosts/templates/hosts/host_detail.html +0 -0
  100. {patchman-4.0.2 → patchman-4.0.4}/hosts/templates/hosts/host_edit.html +0 -0
  101. {patchman-4.0.2 → patchman-4.0.4}/hosts/templates/hosts/host_list.html +0 -0
  102. {patchman-4.0.2 → patchman-4.0.4}/hosts/templatetags/__init__.py +0 -0
  103. {patchman-4.0.2 → patchman-4.0.4}/hosts/templatetags/report_alert.py +0 -0
  104. {patchman-4.0.2 → patchman-4.0.4}/hosts/tests/__init__.py +0 -0
  105. {patchman-4.0.2 → patchman-4.0.4}/hosts/tests/test_api.py +0 -0
  106. {patchman-4.0.2 → patchman-4.0.4}/hosts/tests/test_find_updates.py +0 -0
  107. {patchman-4.0.2 → patchman-4.0.4}/hosts/tests/test_managers.py +0 -0
  108. {patchman-4.0.2 → patchman-4.0.4}/hosts/tests/test_models.py +0 -0
  109. {patchman-4.0.2 → patchman-4.0.4}/hosts/urls.py +0 -0
  110. {patchman-4.0.2 → patchman-4.0.4}/hosts/utils.py +0 -0
  111. {patchman-4.0.2 → patchman-4.0.4}/modules/__init__.py +0 -0
  112. {patchman-4.0.2 → patchman-4.0.4}/modules/admin.py +0 -0
  113. {patchman-4.0.2 → patchman-4.0.4}/modules/apps.py +0 -0
  114. {patchman-4.0.2 → patchman-4.0.4}/modules/managers.py +0 -0
  115. {patchman-4.0.2 → patchman-4.0.4}/modules/migrations/0001_initial.py +0 -0
  116. {patchman-4.0.2 → patchman-4.0.4}/modules/migrations/0002_auto_20240204_2214.py +0 -0
  117. {patchman-4.0.2 → patchman-4.0.4}/modules/migrations/0003_alter_module_options.py +0 -0
  118. {patchman-4.0.2 → patchman-4.0.4}/modules/migrations/0004_alter_module_options.py +0 -0
  119. {patchman-4.0.2 → patchman-4.0.4}/modules/migrations/0005_alter_module_unique_together.py +0 -0
  120. {patchman-4.0.2 → patchman-4.0.4}/modules/migrations/__init__.py +0 -0
  121. {patchman-4.0.2 → patchman-4.0.4}/modules/models.py +0 -0
  122. {patchman-4.0.2 → patchman-4.0.4}/modules/serializers.py +0 -0
  123. {patchman-4.0.2 → patchman-4.0.4}/modules/tables.py +0 -0
  124. {patchman-4.0.2 → patchman-4.0.4}/modules/templates/modules/module_detail.html +0 -0
  125. {patchman-4.0.2 → patchman-4.0.4}/modules/templates/modules/module_list.html +0 -0
  126. {patchman-4.0.2 → patchman-4.0.4}/modules/urls.py +0 -0
  127. {patchman-4.0.2 → patchman-4.0.4}/modules/utils.py +0 -0
  128. {patchman-4.0.2 → patchman-4.0.4}/modules/views.py +0 -0
  129. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/__init__.py +0 -0
  130. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/admin.py +0 -0
  131. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/apps.py +0 -0
  132. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/fixtures/os.json +0 -0
  133. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/fixtures/osgroup.json +0 -0
  134. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/forms.py +0 -0
  135. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/managers.py +0 -0
  136. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/0001_initial.py +0 -0
  137. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/0002_initial.py +0 -0
  138. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/0003_os_arch.py +0 -0
  139. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/0003_osgroup_codename.py +0 -0
  140. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/0004_alter_osgroup_unique_together.py +0 -0
  141. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/0005_rename_osgroup_osrelease_rename_os_osvariant_and_more.py +0 -0
  142. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/0006_osrelease_cpe_name_osvariant_codename.py +0 -0
  143. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/0007_alter_osrelease_unique_together.py +0 -0
  144. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/0008_alter_osrelease_options_alter_osvariant_options.py +0 -0
  145. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/__init__.py +0 -0
  146. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/models.py +0 -0
  147. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/serializers.py +0 -0
  148. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/tables.py +0 -0
  149. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/os_landing.html +0 -0
  150. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osrelease_delete.html +0 -0
  151. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osrelease_detail.html +0 -0
  152. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osrelease_list.html +0 -0
  153. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osvariant_delete.html +0 -0
  154. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osvariant_delete_multiple.html +0 -0
  155. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osvariant_detail.html +0 -0
  156. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osvariant_list.html +0 -0
  157. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/tests/__init__.py +0 -0
  158. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/tests/test_api.py +0 -0
  159. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/tests/test_models.py +0 -0
  160. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/urls.py +0 -0
  161. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/utils.py +0 -0
  162. {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/views.py +0 -0
  163. {patchman-4.0.2 → patchman-4.0.4}/packages/__init__.py +0 -0
  164. {patchman-4.0.2 → patchman-4.0.4}/packages/admin.py +0 -0
  165. {patchman-4.0.2 → patchman-4.0.4}/packages/apps.py +0 -0
  166. {patchman-4.0.2 → patchman-4.0.4}/packages/managers.py +0 -0
  167. {patchman-4.0.2 → patchman-4.0.4}/packages/migrations/0001_initial.py +0 -0
  168. {patchman-4.0.2 → patchman-4.0.4}/packages/migrations/0002_auto_20250207_1319.py +0 -0
  169. {patchman-4.0.2 → patchman-4.0.4}/packages/migrations/0002_delete_erratum_delete_erratumreference.py +0 -0
  170. {patchman-4.0.2 → patchman-4.0.4}/packages/migrations/0003_auto_20250207_1746.py +0 -0
  171. {patchman-4.0.2 → patchman-4.0.4}/packages/migrations/0004_alter_package_options_alter_packagecategory_options_and_more.py +0 -0
  172. {patchman-4.0.2 → patchman-4.0.4}/packages/migrations/0005_alter_package_packagetype.py +0 -0
  173. {patchman-4.0.2 → patchman-4.0.4}/packages/migrations/__init__.py +0 -0
  174. {patchman-4.0.2 → patchman-4.0.4}/packages/models.py +0 -0
  175. {patchman-4.0.2 → patchman-4.0.4}/packages/serializers.py +0 -0
  176. {patchman-4.0.2 → patchman-4.0.4}/packages/tables.py +0 -0
  177. {patchman-4.0.2 → patchman-4.0.4}/packages/templates/packages/package_detail.html +0 -0
  178. {patchman-4.0.2 → patchman-4.0.4}/packages/templates/packages/package_list.html +0 -0
  179. {patchman-4.0.2 → patchman-4.0.4}/packages/templates/packages/package_name_detail.html +0 -0
  180. {patchman-4.0.2 → patchman-4.0.4}/packages/templates/packages/package_name_list.html +0 -0
  181. {patchman-4.0.2 → patchman-4.0.4}/packages/tests/__init__.py +0 -0
  182. {patchman-4.0.2 → patchman-4.0.4}/packages/tests/test_api.py +0 -0
  183. {patchman-4.0.2 → patchman-4.0.4}/packages/tests/test_models.py +0 -0
  184. {patchman-4.0.2 → patchman-4.0.4}/packages/tests/test_version_compare.py +0 -0
  185. {patchman-4.0.2 → patchman-4.0.4}/packages/urls.py +0 -0
  186. {patchman-4.0.2 → patchman-4.0.4}/packages/utils.py +0 -0
  187. {patchman-4.0.2 → patchman-4.0.4}/packages/views.py +0 -0
  188. {patchman-4.0.2 → patchman-4.0.4}/patchman/__init__.py +0 -0
  189. {patchman-4.0.2 → patchman-4.0.4}/patchman/celery.py +0 -0
  190. {patchman-4.0.2 → patchman-4.0.4}/patchman/receivers.py +0 -0
  191. {patchman-4.0.2 → patchman-4.0.4}/patchman/signals.py +0 -0
  192. {patchman-4.0.2 → patchman-4.0.4}/patchman/sqlite3/base.py +0 -0
  193. {patchman-4.0.2 → patchman-4.0.4}/patchman/static/js/expandable-text.js +0 -0
  194. {patchman-4.0.2 → patchman-4.0.4}/patchman/static/js/sidebar.js +0 -0
  195. {patchman-4.0.2 → patchman-4.0.4}/patchman/urls.py +0 -0
  196. {patchman-4.0.2 → patchman-4.0.4}/patchman/wsgi.py +0 -0
  197. {patchman-4.0.2 → patchman-4.0.4}/patchman.egg-info/SOURCES.txt +0 -0
  198. {patchman-4.0.2 → patchman-4.0.4}/patchman.egg-info/dependency_links.txt +0 -0
  199. {patchman-4.0.2 → patchman-4.0.4}/patchman.egg-info/requires.txt +0 -0
  200. {patchman-4.0.2 → patchman-4.0.4}/patchman.egg-info/top_level.txt +0 -0
  201. {patchman-4.0.2 → patchman-4.0.4}/reports/__init__.py +0 -0
  202. {patchman-4.0.2 → patchman-4.0.4}/reports/admin.py +0 -0
  203. {patchman-4.0.2 → patchman-4.0.4}/reports/apps.py +0 -0
  204. {patchman-4.0.2 → patchman-4.0.4}/reports/migrations/0001_initial.py +0 -0
  205. {patchman-4.0.2 → patchman-4.0.4}/reports/migrations/0002_report_modules.py +0 -0
  206. {patchman-4.0.2 → patchman-4.0.4}/reports/migrations/0003_remove_report_accessed.py +0 -0
  207. {patchman-4.0.2 → patchman-4.0.4}/reports/migrations/0004_migrate_to_tz_aware.py +0 -0
  208. {patchman-4.0.2 → patchman-4.0.4}/reports/migrations/0005_alter_report_options.py +0 -0
  209. {patchman-4.0.2 → patchman-4.0.4}/reports/migrations/__init__.py +0 -0
  210. {patchman-4.0.2 → patchman-4.0.4}/reports/models.py +0 -0
  211. {patchman-4.0.2 → patchman-4.0.4}/reports/serializers.py +0 -0
  212. {patchman-4.0.2 → patchman-4.0.4}/reports/tables.py +0 -0
  213. {patchman-4.0.2 → patchman-4.0.4}/reports/tasks.py +0 -0
  214. {patchman-4.0.2 → patchman-4.0.4}/reports/templates/reports/report.txt +0 -0
  215. {patchman-4.0.2 → patchman-4.0.4}/reports/templates/reports/report_delete.html +0 -0
  216. {patchman-4.0.2 → patchman-4.0.4}/reports/templates/reports/report_detail.html +0 -0
  217. {patchman-4.0.2 → patchman-4.0.4}/reports/templates/reports/report_list.html +0 -0
  218. {patchman-4.0.2 → patchman-4.0.4}/reports/tests/__init__.py +0 -0
  219. {patchman-4.0.2 → patchman-4.0.4}/reports/tests/test_api.py +0 -0
  220. {patchman-4.0.2 → patchman-4.0.4}/reports/tests/test_edge_cases.py +0 -0
  221. {patchman-4.0.2 → patchman-4.0.4}/reports/tests/test_integration.py +0 -0
  222. {patchman-4.0.2 → patchman-4.0.4}/reports/tests/test_models.py +0 -0
  223. {patchman-4.0.2 → patchman-4.0.4}/reports/tests/test_parsing.py +0 -0
  224. {patchman-4.0.2 → patchman-4.0.4}/reports/tests/test_serializers.py +0 -0
  225. {patchman-4.0.2 → patchman-4.0.4}/reports/tests/test_tasks.py +0 -0
  226. {patchman-4.0.2 → patchman-4.0.4}/reports/tests/test_utils.py +0 -0
  227. {patchman-4.0.2 → patchman-4.0.4}/reports/urls.py +0 -0
  228. {patchman-4.0.2 → patchman-4.0.4}/reports/views.py +0 -0
  229. {patchman-4.0.2 → patchman-4.0.4}/repos/__init__.py +0 -0
  230. {patchman-4.0.2 → patchman-4.0.4}/repos/admin.py +0 -0
  231. {patchman-4.0.2 → patchman-4.0.4}/repos/apps.py +0 -0
  232. {patchman-4.0.2 → patchman-4.0.4}/repos/forms.py +0 -0
  233. {patchman-4.0.2 → patchman-4.0.4}/repos/managers.py +0 -0
  234. {patchman-4.0.2 → patchman-4.0.4}/repos/migrations/0001_initial.py +0 -0
  235. {patchman-4.0.2 → patchman-4.0.4}/repos/migrations/0002_alter_repository_repotype.py +0 -0
  236. {patchman-4.0.2 → patchman-4.0.4}/repos/migrations/0003_migrate_to_tz_aware.py +0 -0
  237. {patchman-4.0.2 → patchman-4.0.4}/repos/migrations/0004_rename_file_checksum_mirror_package_checksum.py +0 -0
  238. {patchman-4.0.2 → patchman-4.0.4}/repos/migrations/0005_rename_package_checksum_mirror_packages_checksum.py +0 -0
  239. {patchman-4.0.2 → patchman-4.0.4}/repos/migrations/0006_mirror_errata_checksum_mirror_modules_checksum.py +0 -0
  240. {patchman-4.0.2 → patchman-4.0.4}/repos/migrations/__init__.py +0 -0
  241. {patchman-4.0.2 → patchman-4.0.4}/repos/models.py +0 -0
  242. {patchman-4.0.2 → patchman-4.0.4}/repos/repo_types/__init__.py +0 -0
  243. {patchman-4.0.2 → patchman-4.0.4}/repos/repo_types/arch.py +0 -0
  244. {patchman-4.0.2 → patchman-4.0.4}/repos/repo_types/deb.py +0 -0
  245. {patchman-4.0.2 → patchman-4.0.4}/repos/repo_types/gentoo.py +0 -0
  246. {patchman-4.0.2 → patchman-4.0.4}/repos/repo_types/rpm.py +0 -0
  247. {patchman-4.0.2 → patchman-4.0.4}/repos/repo_types/yast.py +0 -0
  248. {patchman-4.0.2 → patchman-4.0.4}/repos/repo_types/yum.py +0 -0
  249. {patchman-4.0.2 → patchman-4.0.4}/repos/serializers.py +0 -0
  250. {patchman-4.0.2 → patchman-4.0.4}/repos/tables.py +0 -0
  251. {patchman-4.0.2 → patchman-4.0.4}/repos/tasks.py +0 -0
  252. {patchman-4.0.2 → patchman-4.0.4}/repos/templates/repos/mirror_delete.html +0 -0
  253. {patchman-4.0.2 → patchman-4.0.4}/repos/templates/repos/mirror_detail.html +0 -0
  254. {patchman-4.0.2 → patchman-4.0.4}/repos/templates/repos/mirror_edit.html +0 -0
  255. {patchman-4.0.2 → patchman-4.0.4}/repos/templates/repos/mirror_list.html +0 -0
  256. {patchman-4.0.2 → patchman-4.0.4}/repos/templates/repos/mirror_with_repo_list.html +0 -0
  257. {patchman-4.0.2 → patchman-4.0.4}/repos/templates/repos/repo_delete.html +0 -0
  258. {patchman-4.0.2 → patchman-4.0.4}/repos/templates/repos/repo_detail.html +0 -0
  259. {patchman-4.0.2 → patchman-4.0.4}/repos/templates/repos/repo_edit.html +0 -0
  260. {patchman-4.0.2 → patchman-4.0.4}/repos/templates/repos/repo_list.html +0 -0
  261. {patchman-4.0.2 → patchman-4.0.4}/repos/templatetags/__init__.py +0 -0
  262. {patchman-4.0.2 → patchman-4.0.4}/repos/tests/__init__.py +0 -0
  263. {patchman-4.0.2 → patchman-4.0.4}/repos/tests/test_api.py +0 -0
  264. {patchman-4.0.2 → patchman-4.0.4}/repos/tests/test_managers.py +0 -0
  265. {patchman-4.0.2 → patchman-4.0.4}/repos/tests/test_mirror_sync.py +0 -0
  266. {patchman-4.0.2 → patchman-4.0.4}/repos/tests/test_models.py +0 -0
  267. {patchman-4.0.2 → patchman-4.0.4}/repos/urls.py +0 -0
  268. {patchman-4.0.2 → patchman-4.0.4}/repos/utils.py +0 -0
  269. {patchman-4.0.2 → patchman-4.0.4}/repos/views.py +0 -0
  270. {patchman-4.0.2 → patchman-4.0.4}/requirements.txt +0 -0
  271. {patchman-4.0.2 → patchman-4.0.4}/sbin/patchman +0 -0
  272. {patchman-4.0.2 → patchman-4.0.4}/sbin/patchman-manage +0 -0
  273. {patchman-4.0.2 → patchman-4.0.4}/sbin/patchman-set-secret-key +0 -0
  274. {patchman-4.0.2 → patchman-4.0.4}/scripts/clear-django-logs.py +0 -0
  275. {patchman-4.0.2 → patchman-4.0.4}/scripts/create_graph.sh +0 -0
  276. {patchman-4.0.2 → patchman-4.0.4}/scripts/rpm-install.sh +0 -0
  277. {patchman-4.0.2 → patchman-4.0.4}/scripts/rpm-post-install.sh +0 -0
  278. {patchman-4.0.2 → patchman-4.0.4}/security/__init__.py +0 -0
  279. {patchman-4.0.2 → patchman-4.0.4}/security/admin.py +0 -0
  280. {patchman-4.0.2 → patchman-4.0.4}/security/apps.py +0 -0
  281. {patchman-4.0.2 → patchman-4.0.4}/security/managers.py +0 -0
  282. {patchman-4.0.2 → patchman-4.0.4}/security/migrations/0001_initial.py +0 -0
  283. {patchman-4.0.2 → patchman-4.0.4}/security/migrations/0002_alter_cve_options.py +0 -0
  284. {patchman-4.0.2 → patchman-4.0.4}/security/migrations/0003_alter_cve_description_alter_cwe_description.py +0 -0
  285. {patchman-4.0.2 → patchman-4.0.4}/security/migrations/0004_alter_cve_options.py +0 -0
  286. {patchman-4.0.2 → patchman-4.0.4}/security/migrations/0005_reference_cve_references.py +0 -0
  287. {patchman-4.0.2 → patchman-4.0.4}/security/migrations/0006_alter_cve_options_alter_cvss_unique_together.py +0 -0
  288. {patchman-4.0.2 → patchman-4.0.4}/security/migrations/0007_remove_cve_title.py +0 -0
  289. {patchman-4.0.2 → patchman-4.0.4}/security/migrations/__init__.py +0 -0
  290. {patchman-4.0.2 → patchman-4.0.4}/security/models.py +0 -0
  291. {patchman-4.0.2 → patchman-4.0.4}/security/serializers.py +0 -0
  292. {patchman-4.0.2 → patchman-4.0.4}/security/tables.py +0 -0
  293. {patchman-4.0.2 → patchman-4.0.4}/security/tasks.py +0 -0
  294. {patchman-4.0.2 → patchman-4.0.4}/security/templates/security/cve_detail.html +0 -0
  295. {patchman-4.0.2 → patchman-4.0.4}/security/templates/security/cve_list.html +0 -0
  296. {patchman-4.0.2 → patchman-4.0.4}/security/templates/security/cwe_detail.html +0 -0
  297. {patchman-4.0.2 → patchman-4.0.4}/security/templates/security/cwe_list.html +0 -0
  298. {patchman-4.0.2 → patchman-4.0.4}/security/templates/security/reference_list.html +0 -0
  299. {patchman-4.0.2 → patchman-4.0.4}/security/templates/security/security_landing.html +0 -0
  300. {patchman-4.0.2 → patchman-4.0.4}/security/tests/__init__.py +0 -0
  301. {patchman-4.0.2 → patchman-4.0.4}/security/tests/test_api.py +0 -0
  302. {patchman-4.0.2 → patchman-4.0.4}/security/tests/test_models.py +0 -0
  303. {patchman-4.0.2 → patchman-4.0.4}/security/urls.py +0 -0
  304. {patchman-4.0.2 → patchman-4.0.4}/security/utils.py +0 -0
  305. {patchman-4.0.2 → patchman-4.0.4}/security/views.py +0 -0
  306. {patchman-4.0.2 → patchman-4.0.4}/setup.cfg +0 -0
  307. {patchman-4.0.2 → patchman-4.0.4}/setup.py +0 -0
  308. {patchman-4.0.2 → patchman-4.0.4}/util/__init__.py +0 -0
  309. {patchman-4.0.2 → patchman-4.0.4}/util/apps.py +0 -0
  310. {patchman-4.0.2 → patchman-4.0.4}/util/filterspecs.py +0 -0
  311. {patchman-4.0.2 → patchman-4.0.4}/util/logging.py +0 -0
  312. {patchman-4.0.2 → patchman-4.0.4}/util/management/__init__.py +0 -0
  313. {patchman-4.0.2 → patchman-4.0.4}/util/management/commands/__init__.py +0 -0
  314. {patchman-4.0.2 → patchman-4.0.4}/util/management/commands/create_api_key.py +0 -0
  315. {patchman-4.0.2 → patchman-4.0.4}/util/management/commands/list_api_keys.py +0 -0
  316. {patchman-4.0.2 → patchman-4.0.4}/util/management/commands/revoke_api_key.py +0 -0
  317. {patchman-4.0.2 → patchman-4.0.4}/util/tables.py +0 -0
  318. {patchman-4.0.2 → patchman-4.0.4}/util/tasks.py +0 -0
  319. {patchman-4.0.2 → patchman-4.0.4}/util/templates/404.html +0 -0
  320. {patchman-4.0.2 → patchman-4.0.4}/util/templates/500.html +0 -0
  321. {patchman-4.0.2 → patchman-4.0.4}/util/templates/base.html +0 -0
  322. {patchman-4.0.2 → patchman-4.0.4}/util/templates/bulk_actions.html +0 -0
  323. {patchman-4.0.2 → patchman-4.0.4}/util/templates/dashboard.html +0 -0
  324. {patchman-4.0.2 → patchman-4.0.4}/util/templates/objectlist.html +0 -0
  325. {patchman-4.0.2 → patchman-4.0.4}/util/templates/registration/login.html +0 -0
  326. {patchman-4.0.2 → patchman-4.0.4}/util/templates/searchbar.html +0 -0
  327. {patchman-4.0.2 → patchman-4.0.4}/util/templates/table.html +0 -0
  328. {patchman-4.0.2 → patchman-4.0.4}/util/templatetags/__init__.py +0 -0
  329. {patchman-4.0.2 → patchman-4.0.4}/util/templatetags/common.py +0 -0
  330. {patchman-4.0.2 → patchman-4.0.4}/util/tests/__init__.py +0 -0
  331. {patchman-4.0.2 → patchman-4.0.4}/util/tests/test_commands.py +0 -0
  332. {patchman-4.0.2 → patchman-4.0.4}/util/tests/test_utils.py +0 -0
  333. {patchman-4.0.2 → patchman-4.0.4}/util/urls.py +0 -0
  334. {patchman-4.0.2 → patchman-4.0.4}/util/views.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: patchman
3
- Version: 4.0.2
3
+ Version: 4.0.4
4
4
  Summary: Django based patch status monitoring tool for linux systems
5
5
  Home-page: http://patchman.openbytes.ie/
6
6
  Author: Marcus Furlong
@@ -0,0 +1 @@
1
+ 4.0.4
@@ -20,6 +20,7 @@ from django.contrib.auth.decorators import login_required
20
20
  from django.db.models import Count, Q
21
21
  from django.shortcuts import get_object_or_404, redirect, render
22
22
  from django.urls import reverse
23
+ from django_filters import rest_framework as filters
23
24
  from django_tables2 import RequestConfig
24
25
  from rest_framework import viewsets
25
26
  from taggit.models import Tag
@@ -279,13 +280,27 @@ def host_bulk_action(request):
279
280
  return redirect('hosts:host_list')
280
281
 
281
282
 
283
+ class HostFilter(filters.FilterSet):
284
+ package_id = filters.NumberFilter(field_name='packages', lookup_expr='exact')
285
+ package_name = filters.CharFilter(field_name='packages__name__name', lookup_expr='exact')
286
+ package_version = filters.CharFilter(field_name='packages__version', lookup_expr='exact')
287
+ package_release = filters.CharFilter(field_name='packages__release', lookup_expr='exact')
288
+ package_epoch = filters.CharFilter(field_name='packages__epoch', lookup_expr='exact')
289
+ package_arch = filters.CharFilter(field_name='packages__arch__name', lookup_expr='exact')
290
+ tag = filters.CharFilter(field_name='tags__name', lookup_expr='exact')
291
+
292
+ class Meta:
293
+ model = Host
294
+ fields = ['hostname']
295
+
296
+
282
297
  class HostViewSet(viewsets.ModelViewSet):
283
298
  """
284
299
  API endpoint that allows hosts to be viewed or edited.
285
300
  """
286
301
  queryset = Host.objects.all()
287
302
  serializer_class = HostSerializer
288
- filterset_fields = ['hostname']
303
+ filterset_class = HostFilter
289
304
 
290
305
 
291
306
  class HostRepoViewSet(viewsets.ModelViewSet):
@@ -49,6 +49,7 @@ TEMPLATES = [
49
49
  'django.template.context_processors.tz',
50
50
  'django.contrib.messages.context_processors.messages',
51
51
  'util.context_processors.issues_count',
52
+ 'util.context_processors.patchman_version',
52
53
  ],
53
54
  'debug': DEBUG,
54
55
  },
@@ -31,6 +31,7 @@ td.truncate-cell a { display: block; overflow: hidden; text-overflow: ellipsis;
31
31
  .sidebar-header { padding: 15px; border-bottom: 1px solid #333; }
32
32
  .sidebar-brand { color: #9d9d9d; font-size: 18px; font-weight: bold; text-decoration: none; white-space: nowrap; }
33
33
  .sidebar-brand:hover { color: #fff; text-decoration: none; }
34
+ .sidebar-version { color: #9d9d9d; font-size: 11px; margin-top: 5px; white-space: nowrap; }
34
35
  .sidebar-toggle { background: none; border: none; color: #666; cursor: pointer; padding: 0 10px 0 0; font-size: 14px; }
35
36
  .sidebar-toggle:hover { color: #333; }
36
37
  .sidebar-toggle .glyphicon { transition: transform 0.2s; }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: patchman
3
- Version: 4.0.2
3
+ Version: 4.0.4
4
4
  Summary: Django based patch status monitoring tool for linux systems
5
5
  Home-page: http://patchman.openbytes.ie/
6
6
  Author: Marcus Furlong
@@ -153,7 +153,7 @@ def parse_updates(updates_string, security):
153
153
  specifying whether it is a security update or not
154
154
  """
155
155
  updates = {}
156
- ulist = updates_string..split()
156
+ ulist = updates_string.split()
157
157
  while ulist:
158
158
  name = f'{ulist[0]} {ulist[1]} {ulist[2]}\n'
159
159
  del ulist[:3]
@@ -26,6 +26,61 @@ from repos.models import Repository
26
26
  from util import get_setting_of_type
27
27
 
28
28
 
29
+ def _get_git_ref():
30
+ """Get current git ref if in a git repo."""
31
+ git_dir = Path(__file__).parent.parent / '.git'
32
+ if not git_dir.exists():
33
+ return None
34
+ try:
35
+ result = subprocess.run(
36
+ ['git', 'rev-parse', '--short', 'HEAD'],
37
+ capture_output=True,
38
+ text=True,
39
+ timeout=5,
40
+ cwd=git_dir.parent,
41
+ )
42
+ if result.returncode == 0:
43
+ return result.stdout.strip()
44
+ except (subprocess.TimeoutExpired, FileNotFoundError):
45
+ pass
46
+ return None
47
+
48
+
49
+ def _get_version():
50
+ """Get version from package metadata or VERSION.txt."""
51
+ # Try importlib.metadata first (for installed packages)
52
+ try:
53
+ from importlib.metadata import version
54
+ return version('patchman')
55
+ except Exception:
56
+ pass
57
+
58
+ # Fall back to VERSION.txt (for development)
59
+ version_file = Path(__file__).parent.parent / 'VERSION.txt'
60
+ try:
61
+ return version_file.read_text().strip()
62
+ except FileNotFoundError:
63
+ return 'unknown'
64
+
65
+
66
+ # Cache version info at module load time (once per process)
67
+ _PATCHMAN_VERSION = _get_version()
68
+ _PATCHMAN_GIT_REF = _get_git_ref()
69
+ if _PATCHMAN_GIT_REF:
70
+ _PATCHMAN_VERSION_DISPLAY = f'v{_PATCHMAN_VERSION} ({_PATCHMAN_GIT_REF})'
71
+ else:
72
+ _PATCHMAN_VERSION_DISPLAY = f'v{_PATCHMAN_VERSION}'
73
+
74
+
75
+ def patchman_version(request):
76
+ """Context processor to provide version info for navbar."""
77
+ return {
78
+ 'patchman_version': _PATCHMAN_VERSION,
79
+ 'patchman_git_ref': _PATCHMAN_GIT_REF,
80
+ 'patchman_version_display': _PATCHMAN_VERSION_DISPLAY,
81
+ }
82
+
83
+
29
84
  def issues_count(request):
30
85
  """Context processor to provide issues count for navbar."""
31
86
  if not request.user.is_authenticated:
@@ -1,6 +1,7 @@
1
1
  <nav class="sidebar-nav">
2
2
  <div class="sidebar-header">
3
3
  <a class="sidebar-brand" href="https://github.com/furlongm/patchman">Patchman</a>
4
+ <div class="sidebar-version">{{ patchman_version_display }}</div>
4
5
  </div>
5
6
  <ul class="sidebar-menu">
6
7
  <li class="{% if '/hosts' in request.path %}active{% endif %}"><a href="{% url 'hosts:host_list' %}">Hosts</a></li>
@@ -1 +0,0 @@
1
- 4.0.2
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes