Source code for signoffs.core.status.approvals
"""
Objects that know how to assess the status of an Approval
"""
from signoffs.core import utils
[docs]class ApprovalInstanceStatus:
"""Access status info about an Approval instance"""
def __init__(self, approval_instance, **kwargs):
"""A status instance for given approval instance"""
self.approval = approval_instance
# Note: there is an intermediate state in which a pre-condition to approval is not yet met,
# so the approval is not yet "awaiting". Controlled at approval-process level, not available on approval.
[docs] def get_status(self):
"""Return a short status indicator, e.g., for use as a CSS class, dictionary key, etc."""
return "complete" if self.approval.is_approved() else "awaiting"
[docs] def get_label(self):
"""Return a string with a pithy label indicating the status of the approval."""
return (
"Approval Complete" if self.approval.is_approved() else "Awaiting Approval"
)
[docs] def get_css_class(self):
"""Return a CSS class used, e.g., to style the approval label in templates"""
return "success" if self.approval.is_approved() else "warning"
[docs]class ApprovalStatus(utils.service(ApprovalInstanceStatus)):
"""
A descriptor that "injects" a ApprovalInstanceStatus instance into a Approval instance.
To inject custom rendering services:
- provide a custom service_class: `status=ApprovalStatus(service_class=MyInstanceStatus)`
- OR specialize class attributes:
`MyApprovalStatus = utils.service(ApprovalInstanceStatus, signet_template='my.tmpl.html')`
- OR both... `MyApprovalStatus = utils.service(MyInstanceStatus)`
"""