Source code for archivist.compliance_policy_requests

"""Archivist Compliance Policy Requests

   Dataclasses that represent the different types of compliance policies

"""

from dataclasses import asdict, dataclass

from .compliance_policy_type import CompliancePolicyType
from .or_dict import and_list

# NB: the order of the fields is important. Fields with default values must
#    appear after fields without. This is why the compliance_type is last
#    in every case.


[docs] @dataclass(frozen=True) class CompliancePolicyBase: """ Compliance policy base definition """ description: str display_name: str asset_filter: "list[list]"
[docs] def dict(self): """Emit dictionary representation""" d = asdict(self) d["asset_filter"] = and_list(d["asset_filter"]) return d
[docs] @dataclass(frozen=True) class CompliancePolicySince(CompliancePolicyBase): """ Compliance policy that indicates if an event has 'expired' """ event_display_type: str time_period_seconds: int compliance_type: str = CompliancePolicyType.COMPLIANCE_SINCE.name
[docs] @dataclass(frozen=True) class CompliancePolicyCurrentOutstanding(CompliancePolicyBase): """ Compliance policy that indicates if an event has been 'closed' """ event_display_type: str closing_event_display_type: str compliance_type: str = CompliancePolicyType.COMPLIANCE_CURRENT_OUTSTANDING.name
[docs] @dataclass(frozen=True) class CompliancePolicyPeriodOutstanding(CompliancePolicyBase): """ Compliance policy that indicates if an event has been 'closed' within a specified time """ event_display_type: str closing_event_display_type: str time_period_seconds: int compliance_type: str = CompliancePolicyType.COMPLIANCE_PERIOD_OUTSTANDING.name
[docs] @dataclass(frozen=True) class CompliancePolicyDynamicTolerance(CompliancePolicyBase): """ Compliance policy that indicates if the average time between opening and closing events in a specified period of time does not exceed a specified number of standard deviations from the mean. """ event_display_type: str closing_event_display_type: str dynamic_window: int dynamic_variability: float compliance_type: str = CompliancePolicyType.COMPLIANCE_DYNAMIC_TOLERANCE.name
[docs] @dataclass(frozen=True) class CompliancePolicyRichness(CompliancePolicyBase): """ Compliance policy that indicates if an asset has an attribute that complies with a set of assertions. """ richness_assertions: "list[list]" compliance_type: str = CompliancePolicyType.COMPLIANCE_RICHNESS.name
[docs] def dict(self): """Emit dictionary representation""" d = asdict(self) d["asset_filter"] = and_list(d["asset_filter"]) d["richness_assertions"] = and_list(d["richness_assertions"]) return d