handlers.assign_modelling_cluster_by_acl

class AssignModellingClusterByACLHandler(handlers.eventhandler.EventHandler):

Whenever somebody creates an Application, remove all write access ACLs that do not match a Group Cluster, and assign the correct Modelling Cluster based on the ACL.
Customer-specific automation, requires a special data model. Should not be used for testing.

name = 'Set Initial Values, ACL and Modelling Cluster'
description = 'Whenever somebody creates an Application, remove all write access ACLs that do not match a Group Cluster, and assign the correct Modelling Cluster based on the ACL.'
conditions = {'event_types': ['FactSheetCreatedEvent'], 'fs_types': ['Application']}
config_template = {'auto_subscribe': {'type': 'RESPONSIBLE', 'role': 'Steward'}, 'editorial_status_field': 'editorialStatus', 'editorial_status_initial': 'Draft', 'editorial_status_prefix_field': 'editorialStatusPostfix', 'deletion_days_field': 'editorialDraftExpiryDate', 'it_ot_field': 'technologySector', 'it_ot_initial': 'informationTechnology', 'it_ot_ot': 'operationalTechnology', 'ot_community_cluster_id': 'abcd-1234-5678-abcded', 'ot_community_acl': 'otCommunity', 'assessed_ea_field': 'assessedEAPrinciples', 'assessed_ea_initial': 'no', 'deletion_days': 30, 'relation': 'relApplicationToModellingCluster'}
def data_requirements(self):

Declare the exact fact-sheet data this handler needs, so the webhook event loop (process_event in workspace/views_module.py) can load a single lean FastFactSheet per event instead of the full fact sheet.

Return a dict: { "fields": [], "relations": [], "subscriptions": bool, # True if handle() reads fs["subscriptions"] "tags": bool, # True if handle() reads tags / has_tag() "documents": bool, "acls": bool, "completion": bool, # True if handle() reads fs["completion"] "base_fields": [], # optional; omit/None = full # default base field set. A list restricts the # base scalars to just those (id and type are # always loaded). Advanced opt-in for max speed. } Fields referenced by this handler's trigger are folded in automatically by the event loop (into "fields"), so only declare what handle() itself needs on top of them.

Return None (the default) to signal "requirements cannot be declared statically" - e.g. handlers that exec/eval config-supplied code. The event loop then loads the full fact sheet for that event, so correctness is always preserved. This is a standalone hook (deliberately not tied to the initial_sync_* hooks, which are slated to migrate onto it later).

def handle(self, event, fs, **kwargs):

Called automatically whenever a FactSheetUpdated event comes in via webhook.