wbcompliance 1.59.11__tar.gz → 1.59.13__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 (144) hide show
  1. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/PKG-INFO +1 -1
  2. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/models/risk_management/backend.py +10 -2
  3. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/models/risk_management/checks.py +19 -5
  4. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/models/risk_management/mixins.py +23 -4
  5. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/.gitignore +0 -0
  6. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/pyproject.toml +0 -0
  7. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/__init__.py +0 -0
  8. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/admin/__init__.py +0 -0
  9. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/admin/compliance_form.py +0 -0
  10. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/admin/compliance_task.py +0 -0
  11. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/admin/compliance_type.py +0 -0
  12. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/admin/risk_management/__init__.py +0 -0
  13. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/admin/risk_management/checks.py +0 -0
  14. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/admin/risk_management/incidents.py +0 -0
  15. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/admin/risk_management/rules.py +0 -0
  16. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/admin/utils.py +0 -0
  17. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/apps.py +0 -0
  18. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/factories/__init__.py +0 -0
  19. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/factories/compliance.py +0 -0
  20. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/factories/risk_management/__init__.py +0 -0
  21. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/factories/risk_management/backends.py +0 -0
  22. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/factories/risk_management/checks.py +0 -0
  23. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/factories/risk_management/incidents.py +0 -0
  24. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/factories/risk_management/rules.py +0 -0
  25. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/filters/__init__.py +0 -0
  26. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/filters/compliances.py +0 -0
  27. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/filters/risk_management/__init__.py +0 -0
  28. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/filters/risk_management/checks.py +0 -0
  29. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/filters/risk_management/incidents.py +0 -0
  30. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/filters/risk_management/rules.py +0 -0
  31. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/filters/risk_management/tables.py +0 -0
  32. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/filters/risk_management/utils.py +0 -0
  33. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/fixtures/compliance.yaml +0 -0
  34. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/locale/de/LC_MESSAGES/django.mo +0 -0
  35. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/locale/de/LC_MESSAGES/django.po +0 -0
  36. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/locale/en/LC_MESSAGES/django.mo +0 -0
  37. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/locale/en/LC_MESSAGES/django.po +0 -0
  38. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/locale/fr/LC_MESSAGES/django.mo +0 -0
  39. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/locale/fr/LC_MESSAGES/django.po +0 -0
  40. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/management/__init__.py +0 -0
  41. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/migrations/0001_initial_squashed_squashed_0010_alter_checkedobjectincidentrelationship_resolved_by_and_more.py +0 -0
  42. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/migrations/0011_alter_riskrule_parameters.py +0 -0
  43. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/migrations/0012_alter_compliancetype_options.py +0 -0
  44. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/migrations/0013_alter_riskrule_unique_together.py +0 -0
  45. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/migrations/0014_alter_reviewcompliancetask_year.py +0 -0
  46. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/migrations/0015_auto_20240103_0957.py +0 -0
  47. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/migrations/0016_checkedobjectincidentrelationship_report_details_and_more.py +0 -0
  48. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/migrations/0017_alter_rulebackend_incident_report_template.py +0 -0
  49. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/migrations/0018_alter_rulecheckedobjectrelationship_unique_together.py +0 -0
  50. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/migrations/0019_rulegroup_riskrule_activation_date_and_more.py +0 -0
  51. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/migrations/0020_rename_trigger_content_type_riskcheck_checked_object_content_type_and_more.py +0 -0
  52. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/migrations/0021_riskcheck_passive_check.py +0 -0
  53. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/migrations/0022_riskincident_precheck.py +0 -0
  54. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/migrations/0023_alter_checkedobjectincidentrelationship_unique_together_and_more.py +0 -0
  55. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/migrations/__init__.py +0 -0
  56. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/models/__init__.py +0 -0
  57. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/models/compliance_form.py +0 -0
  58. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/models/compliance_task.py +0 -0
  59. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/models/compliance_type.py +0 -0
  60. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/models/enums.py +0 -0
  61. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/models/risk_management/__init__.py +0 -0
  62. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/models/risk_management/dispatch.py +0 -0
  63. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/models/risk_management/incidents.py +0 -0
  64. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/models/risk_management/rules.py +0 -0
  65. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/permissions.py +0 -0
  66. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/serializers/__init__.py +0 -0
  67. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/serializers/compliance_form.py +0 -0
  68. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/serializers/compliance_task.py +0 -0
  69. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/serializers/compliance_type.py +0 -0
  70. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/serializers/risk_management/__init__.py +0 -0
  71. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/serializers/risk_management/checks.py +0 -0
  72. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/serializers/risk_management/incidents.py +0 -0
  73. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/serializers/risk_management/rules.py +0 -0
  74. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/tasks.py +0 -0
  75. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/templates/compliance/compliance_form.html +0 -0
  76. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/templates/compliance/review_compliance_task_report.html +0 -0
  77. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/templates/risk_management/incident_notification.html +0 -0
  78. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/templates/risk_management/incident_report.html +0 -0
  79. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/tests/__init__.py +0 -0
  80. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/tests/conftest.py +0 -0
  81. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/tests/disable_signals.py +0 -0
  82. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/tests/mixins.py +0 -0
  83. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/tests/risk_management/__init__.py +0 -0
  84. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/tests/risk_management/models/__init__.py +0 -0
  85. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/tests/risk_management/models/test_backends.py +0 -0
  86. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/tests/risk_management/models/test_checks.py +0 -0
  87. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/tests/risk_management/models/test_incidents.py +0 -0
  88. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/tests/risk_management/models/test_rules.py +0 -0
  89. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/tests/signals.py +0 -0
  90. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/tests/test_filters.py +0 -0
  91. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/tests/test_models.py +0 -0
  92. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/tests/test_serializers.py +0 -0
  93. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/tests/test_views.py +0 -0
  94. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/tests/tests.py +0 -0
  95. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/urls.py +0 -0
  96. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/__init__.py +0 -0
  97. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/buttons/__init__.py +0 -0
  98. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/buttons/compliance_form.py +0 -0
  99. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/buttons/compliance_task.py +0 -0
  100. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/buttons/risk_managment/__init__.py +0 -0
  101. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/buttons/risk_managment/checks.py +0 -0
  102. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/buttons/risk_managment/incidents.py +0 -0
  103. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/buttons/risk_managment/rules.py +0 -0
  104. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/compliance_form.py +0 -0
  105. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/compliance_task.py +0 -0
  106. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/compliance_type.py +0 -0
  107. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/display/__init__.py +0 -0
  108. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/display/compliance_form.py +0 -0
  109. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/display/compliance_task.py +0 -0
  110. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/display/compliance_type.py +0 -0
  111. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/display/risk_managment/__init__.py +0 -0
  112. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/display/risk_managment/checks.py +0 -0
  113. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/display/risk_managment/incidents.py +0 -0
  114. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/display/risk_managment/rules.py +0 -0
  115. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/display/risk_managment/tables.py +0 -0
  116. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/endpoints/__init__.py +0 -0
  117. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/endpoints/compliance_form.py +0 -0
  118. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/endpoints/compliance_task.py +0 -0
  119. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/endpoints/compliance_type.py +0 -0
  120. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/endpoints/risk_managment/__init__.py +0 -0
  121. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/endpoints/risk_managment/checks.py +0 -0
  122. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/endpoints/risk_managment/incidents.py +0 -0
  123. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/endpoints/risk_managment/rules.py +0 -0
  124. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/endpoints/risk_managment/tables.py +0 -0
  125. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/menu/__init__.py +0 -0
  126. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/menu/compliance_form.py +0 -0
  127. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/menu/compliance_task.py +0 -0
  128. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/menu/compliance_type.py +0 -0
  129. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/menu/risk_management.py +0 -0
  130. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/risk_management/__init__.py +0 -0
  131. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/risk_management/checks.py +0 -0
  132. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/risk_management/incidents.py +0 -0
  133. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/risk_management/mixins.py +0 -0
  134. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/risk_management/rules.py +0 -0
  135. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/risk_management/tables.py +0 -0
  136. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/titles/__init__.py +0 -0
  137. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/titles/compliance_form.py +0 -0
  138. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/titles/compliance_task.py +0 -0
  139. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/titles/compliance_type.py +0 -0
  140. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/titles/risk_managment/__init__.py +0 -0
  141. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/titles/risk_managment/checks.py +0 -0
  142. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/titles/risk_managment/incidents.py +0 -0
  143. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/titles/risk_managment/rules.py +0 -0
  144. {wbcompliance-1.59.11 → wbcompliance-1.59.13}/wbcompliance/viewsets/titles/risk_managment/tables.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wbcompliance
3
- Version: 1.59.11
3
+ Version: 1.59.13
4
4
  Summary: A workbench module for managing compliance.
5
5
  Author-email: Christopher Wittlinger <c.wittlinger@stainly.com>
6
6
  Requires-Dist: wbcore
@@ -117,18 +117,26 @@ class AbstractRuleBackend:
117
117
  """
118
118
  raise NotImplementedError()
119
119
 
120
- def check_rule(self, *dto_args, **kwargs) -> Generator[IncidentResult, None, None]:
120
+ def check_rule(
121
+ self, *dto_args, ignore_breached_objects: Iterable[models.Model] | None = None, **kwargs
122
+ ) -> Generator[IncidentResult, None, None]:
121
123
  """
122
124
  Build and Check the rule against the instantiated backend given its attributes
123
125
 
124
126
  Returns:
125
127
  yield the breach object, its string representation, the incident report and the severity as IncidentResult
126
128
  """
129
+ if not ignore_breached_objects:
130
+ ignore_breached_objects = []
127
131
  if not dto_args:
128
132
  # We build the data transfer object if it is not provided.
129
133
  dto_args = self._build_dto_args()
130
134
  if any(dto_args):
131
- yield from self._process_dto(*dto_args, **kwargs)
135
+ incident = list(self._process_dto(*dto_args, **kwargs))
136
+ yield from filter(
137
+ lambda incident: incident.breached_object not in ignore_breached_objects,
138
+ incident,
139
+ )
132
140
 
133
141
  def is_passive_evaluation_valid(self) -> bool:
134
142
  """
@@ -159,7 +159,7 @@ class RiskCheck(ComplexToStringMixin, WBModel):
159
159
  )
160
160
 
161
161
  def evaluate(
162
- self, *explicit_dto, override_incident: bool = False, ignore_informational_threshold: bool = False
162
+ self, *explicit_dto, override_incident: bool = False, ignore_informational_threshold: bool = False, **kwargs
163
163
  ) -> list[models.Model]:
164
164
  """
165
165
  Evaluate the check and returns tuple of incidents information
@@ -177,7 +177,7 @@ class RiskCheck(ComplexToStringMixin, WBModel):
177
177
  self.status = self.CheckStatus.SUCCESS
178
178
  incidents = []
179
179
  report_template = Template(self.rule.rule_backend.incident_report_template)
180
- for incident_result in rule_backend.check_rule(*explicit_dto):
180
+ for incident_result in rule_backend.check_rule(*explicit_dto, **kwargs):
181
181
  if (
182
182
  ignore_informational_threshold
183
183
  and incident_result.severity.is_ignorable
@@ -296,11 +296,25 @@ class RiskCheck(ComplexToStringMixin, WBModel):
296
296
  return "id"
297
297
 
298
298
 
299
- @shared_task(queue=Queue.BACKGROUND.value)
299
+ @shared_task(queue=Queue.HIGH_PRIORITY.value)
300
300
  def evaluate_as_task(
301
- check_id: int, *dto, override_incident: bool = False, ignore_informational_threshold: bool = False
301
+ check_id: int,
302
+ *dto,
303
+ override_incident: bool = False,
304
+ ignore_informational_threshold: bool = False,
305
+ ignore_breached_object_content_types: list[tuple[int, int]] | None = None,
302
306
  ):
307
+ if ignore_breached_object_content_types:
308
+ ignore_breached_objects = [
309
+ ContentType.objects.get(id=r[1]).get_object_for_this_type(id=r[0])
310
+ for r in ignore_breached_object_content_types
311
+ ]
312
+ else:
313
+ ignore_breached_objects = []
303
314
  check = RiskCheck.all_objects.get(id=check_id)
304
315
  check.evaluate(
305
- *dto, override_incident=override_incident, ignore_informational_threshold=ignore_informational_threshold
316
+ *dto,
317
+ override_incident=override_incident,
318
+ ignore_informational_threshold=ignore_informational_threshold,
319
+ ignore_breached_objects=ignore_breached_objects,
306
320
  )
@@ -1,5 +1,5 @@
1
1
  from datetime import date
2
- from typing import Any
2
+ from typing import Any, Iterable
3
3
 
4
4
  from django.contrib.contenttypes.models import ContentType
5
5
  from django.db import models, transaction
@@ -84,7 +84,17 @@ class RiskCheckMixin(models.Model):
84
84
  return status
85
85
  return RiskCheck.CheckStatus.SUCCESS
86
86
 
87
- def evaluate_active_rules(self, evaluation_date: date, *dto, asynchronously: bool = True):
87
+ def evaluate_active_rules(
88
+ self,
89
+ evaluation_date: date,
90
+ *dto,
91
+ asynchronously: bool = True,
92
+ ignore_breached_objects: Iterable[models.Model] | None = None,
93
+ ):
94
+ # serialize the ignore breached object list into a (id, content_type.id) list of tuple
95
+ ignore_breached_object_content_types = [
96
+ (o.id, ContentType.objects.get_for_model(o).id) for o in ignore_breached_objects
97
+ ]
88
98
  for rule in RiskRule.objects.get_active_rules_for_object(self.checked_object):
89
99
  check = RiskCheck.all_objects.update_or_create(
90
100
  rule=rule,
@@ -98,11 +108,20 @@ class RiskCheckMixin(models.Model):
98
108
  if asynchronously:
99
109
  transaction.on_commit(
100
110
  lambda check_id=check.id: evaluate_as_task.delay(
101
- check_id, *dto, override_incident=True, ignore_informational_threshold=True
111
+ check_id,
112
+ *dto,
113
+ override_incident=True,
114
+ ignore_informational_threshold=True,
115
+ ignore_breached_object_content_types=ignore_breached_object_content_types,
102
116
  )
103
117
  )
104
118
  else:
105
- check.evaluate(*dto, override_incident=True, ignore_informational_threshold=True)
119
+ check.evaluate(
120
+ *dto,
121
+ override_incident=True,
122
+ ignore_informational_threshold=True,
123
+ ignore_breached_objects=ignore_breached_objects,
124
+ )
106
125
 
107
126
  class Meta:
108
127
  abstract = True