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.
- {patchman-4.0.2 → patchman-4.0.4}/PKG-INFO +1 -1
- patchman-4.0.4/VERSION.txt +1 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/views.py +16 -1
- {patchman-4.0.2 → patchman-4.0.4}/patchman/settings.py +1 -0
- {patchman-4.0.2 → patchman-4.0.4}/patchman/static/css/base.css +1 -0
- {patchman-4.0.2 → patchman-4.0.4}/patchman.egg-info/PKG-INFO +1 -1
- {patchman-4.0.2 → patchman-4.0.4}/reports/utils.py +1 -1
- {patchman-4.0.2 → patchman-4.0.4}/util/context_processors.py +55 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/templates/navbar.html +1 -0
- patchman-4.0.2/VERSION.txt +0 -1
- {patchman-4.0.2 → patchman-4.0.4}/AUTHORS +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/COPYING +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/INSTALL.md +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/MANIFEST.in +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/README.md +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/arch/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/arch/admin.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/arch/apps.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/arch/migrations/0001_initial.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/arch/migrations/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/arch/models.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/arch/serializers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/arch/tests/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/arch/tests/test_api.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/arch/tests/test_models.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/arch/utils.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/arch/views.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/domains/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/domains/admin.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/domains/apps.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/domains/migrations/0001_initial.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/domains/migrations/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/domains/models.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/domains/serializers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/domains/tests/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/domains/tests/test_api.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/domains/tests/test_models.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/domains/views.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/admin.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/apps.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/managers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/migrations/0001_initial.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/migrations/0002_alter_erratumreference_unique_together.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/migrations/0003_delete_erratumreference_alter_erratum_references.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/migrations/0004_rename_packages_erratum_fixed_packages.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/migrations/0005_erratum_affected_packages_and_more.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/migrations/0006_alter_erratum_options.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/migrations/0007_alter_erratum_fixed_packages.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/migrations/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/models.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/serializers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/sources/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/sources/distros/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/sources/distros/alma.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/sources/distros/arch.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/sources/distros/centos.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/sources/distros/debian.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/sources/distros/rocky.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/sources/distros/ubuntu.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/sources/repos/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/sources/repos/yum.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/tables.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/tasks.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/templates/errata/erratum_detail.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/templates/errata/erratum_list.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/tests/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/tests/test_api.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/tests/test_integration.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/tests/test_models.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/urls.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/utils.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/errata/views.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/etc/patchman/apache.conf.example +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/etc/patchman/celery.conf +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/etc/patchman/local_settings.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/etc/systemd/system/patchman-celery-beat.service +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/etc/systemd/system/patchman-celery-worker.service +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/admin.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/apps.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/forms.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/managers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/0001_initial.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/0002_initial.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/0003_host_modules.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/0004_remove_host_tags_host_tags.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/0005_rename_os_host_osvariant.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/0006_migrate_to_tz_aware.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/0007_alter_host_tags.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/0008_alter_host_options.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/0009_host_errata.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/migrations/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/models.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/serializers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/tables.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/tasks.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/templates/hosts/host_delete.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/templates/hosts/host_detail.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/templates/hosts/host_edit.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/templates/hosts/host_list.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/templatetags/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/templatetags/report_alert.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/tests/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/tests/test_api.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/tests/test_find_updates.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/tests/test_managers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/tests/test_models.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/urls.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/hosts/utils.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/modules/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/modules/admin.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/modules/apps.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/modules/managers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/modules/migrations/0001_initial.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/modules/migrations/0002_auto_20240204_2214.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/modules/migrations/0003_alter_module_options.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/modules/migrations/0004_alter_module_options.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/modules/migrations/0005_alter_module_unique_together.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/modules/migrations/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/modules/models.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/modules/serializers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/modules/tables.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/modules/templates/modules/module_detail.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/modules/templates/modules/module_list.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/modules/urls.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/modules/utils.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/modules/views.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/admin.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/apps.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/fixtures/os.json +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/fixtures/osgroup.json +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/forms.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/managers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/0001_initial.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/0002_initial.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/0003_os_arch.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/0003_osgroup_codename.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/0004_alter_osgroup_unique_together.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/0005_rename_osgroup_osrelease_rename_os_osvariant_and_more.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/0006_osrelease_cpe_name_osvariant_codename.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/0007_alter_osrelease_unique_together.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/0008_alter_osrelease_options_alter_osvariant_options.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/models.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/serializers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/tables.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/os_landing.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osrelease_delete.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osrelease_detail.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osrelease_list.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osvariant_delete.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osvariant_delete_multiple.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osvariant_detail.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osvariant_list.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/tests/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/tests/test_api.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/tests/test_models.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/urls.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/utils.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/operatingsystems/views.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/admin.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/apps.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/managers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/migrations/0001_initial.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/migrations/0002_auto_20250207_1319.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/migrations/0002_delete_erratum_delete_erratumreference.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/migrations/0003_auto_20250207_1746.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/migrations/0004_alter_package_options_alter_packagecategory_options_and_more.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/migrations/0005_alter_package_packagetype.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/migrations/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/models.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/serializers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/tables.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/templates/packages/package_detail.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/templates/packages/package_list.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/templates/packages/package_name_detail.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/templates/packages/package_name_list.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/tests/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/tests/test_api.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/tests/test_models.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/tests/test_version_compare.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/urls.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/utils.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/packages/views.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/patchman/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/patchman/celery.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/patchman/receivers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/patchman/signals.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/patchman/sqlite3/base.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/patchman/static/js/expandable-text.js +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/patchman/static/js/sidebar.js +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/patchman/urls.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/patchman/wsgi.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/patchman.egg-info/SOURCES.txt +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/patchman.egg-info/dependency_links.txt +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/patchman.egg-info/requires.txt +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/patchman.egg-info/top_level.txt +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/admin.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/apps.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/migrations/0001_initial.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/migrations/0002_report_modules.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/migrations/0003_remove_report_accessed.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/migrations/0004_migrate_to_tz_aware.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/migrations/0005_alter_report_options.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/migrations/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/models.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/serializers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/tables.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/tasks.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/templates/reports/report.txt +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/templates/reports/report_delete.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/templates/reports/report_detail.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/templates/reports/report_list.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/tests/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/tests/test_api.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/tests/test_edge_cases.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/tests/test_integration.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/tests/test_models.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/tests/test_parsing.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/tests/test_serializers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/tests/test_tasks.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/tests/test_utils.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/urls.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/reports/views.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/admin.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/apps.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/forms.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/managers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/migrations/0001_initial.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/migrations/0002_alter_repository_repotype.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/migrations/0003_migrate_to_tz_aware.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/migrations/0004_rename_file_checksum_mirror_package_checksum.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/migrations/0005_rename_package_checksum_mirror_packages_checksum.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/migrations/0006_mirror_errata_checksum_mirror_modules_checksum.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/migrations/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/models.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/repo_types/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/repo_types/arch.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/repo_types/deb.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/repo_types/gentoo.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/repo_types/rpm.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/repo_types/yast.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/repo_types/yum.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/serializers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/tables.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/tasks.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/templates/repos/mirror_delete.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/templates/repos/mirror_detail.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/templates/repos/mirror_edit.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/templates/repos/mirror_list.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/templates/repos/mirror_with_repo_list.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/templates/repos/repo_delete.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/templates/repos/repo_detail.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/templates/repos/repo_edit.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/templates/repos/repo_list.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/templatetags/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/tests/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/tests/test_api.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/tests/test_managers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/tests/test_mirror_sync.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/tests/test_models.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/urls.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/utils.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/repos/views.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/requirements.txt +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/sbin/patchman +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/sbin/patchman-manage +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/sbin/patchman-set-secret-key +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/scripts/clear-django-logs.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/scripts/create_graph.sh +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/scripts/rpm-install.sh +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/scripts/rpm-post-install.sh +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/admin.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/apps.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/managers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/migrations/0001_initial.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/migrations/0002_alter_cve_options.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/migrations/0003_alter_cve_description_alter_cwe_description.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/migrations/0004_alter_cve_options.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/migrations/0005_reference_cve_references.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/migrations/0006_alter_cve_options_alter_cvss_unique_together.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/migrations/0007_remove_cve_title.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/migrations/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/models.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/serializers.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/tables.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/tasks.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/templates/security/cve_detail.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/templates/security/cve_list.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/templates/security/cwe_detail.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/templates/security/cwe_list.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/templates/security/reference_list.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/templates/security/security_landing.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/tests/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/tests/test_api.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/tests/test_models.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/urls.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/utils.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/security/views.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/setup.cfg +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/setup.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/apps.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/filterspecs.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/logging.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/management/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/management/commands/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/management/commands/create_api_key.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/management/commands/list_api_keys.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/management/commands/revoke_api_key.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/tables.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/tasks.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/templates/404.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/templates/500.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/templates/base.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/templates/bulk_actions.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/templates/dashboard.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/templates/objectlist.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/templates/registration/login.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/templates/searchbar.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/templates/table.html +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/templatetags/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/templatetags/common.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/tests/__init__.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/tests/test_commands.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/tests/test_utils.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/urls.py +0 -0
- {patchman-4.0.2 → patchman-4.0.4}/util/views.py +0 -0
|
@@ -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
|
-
|
|
303
|
+
filterset_class = HostFilter
|
|
289
304
|
|
|
290
305
|
|
|
291
306
|
class HostRepoViewSet(viewsets.ModelViewSet):
|
|
@@ -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; }
|
|
@@ -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
|
|
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>
|
patchman-4.0.2/VERSION.txt
DELETED
|
@@ -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
|
{patchman-4.0.2 → patchman-4.0.4}/errata/migrations/0002_alter_erratumreference_unique_together.py
RENAMED
|
File without changes
|
|
File without changes
|
{patchman-4.0.2 → patchman-4.0.4}/errata/migrations/0004_rename_packages_erratum_fixed_packages.py
RENAMED
|
File without changes
|
{patchman-4.0.2 → patchman-4.0.4}/errata/migrations/0005_erratum_affected_packages_and_more.py
RENAMED
|
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
|
|
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
|
{patchman-4.0.2 → patchman-4.0.4}/operatingsystems/migrations/0004_alter_osgroup_unique_together.py
RENAMED
|
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
|
{patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/os_landing.html
RENAMED
|
File without changes
|
{patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osrelease_delete.html
RENAMED
|
File without changes
|
{patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osrelease_detail.html
RENAMED
|
File without changes
|
{patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osrelease_list.html
RENAMED
|
File without changes
|
{patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osvariant_delete.html
RENAMED
|
File without changes
|
|
File without changes
|
{patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osvariant_detail.html
RENAMED
|
File without changes
|
{patchman-4.0.2 → patchman-4.0.4}/operatingsystems/templates/operatingsystems/osvariant_list.html
RENAMED
|
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
|
{patchman-4.0.2 → patchman-4.0.4}/packages/migrations/0002_delete_erratum_delete_erratumreference.py
RENAMED
|
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
|