import logging from service.tasks.emailing.email_alliance import send_alliance_email from service.tasks.management.alliance import generate_alliance_segments, get_alliance from service.tasks.precondition.utils import update_caw_meta from service.utils import appsync_communication as appsync from service.utils.aws_connectors import run_query from service.utils.data_model_utils import refresh_materialized_queries from .basic import Trigger logger = logging.getLogger(__name__) class PostDeletionRefreshMaterializedQueriesTrigger(Trigger): def set_condition(self, context, schema, **kw): return f"{self.__class__.__name__}_{schema}" def execute(self, context, schema, **kw): try: refresh_materialized_queries(schema) except Exception as e: logger.exception("Probably deleted the whole thing?", exc_info=e) class PostDeletionGenerateAllianceSegmentsTrigger(Trigger): def set_condition(self, context, schema, **kw): return f"{self.__class__.__name__}_{schema}" def execute(self, context, schema, user_id, **kw): appsync.send_alliance(schema, {"id": schema, "status": "updating"}) generate_alliance_segments(schema, user_id) appsync.send_alliance(schema, get_alliance(schema)) class PostDeletionNotifyAllianceDeletedTrigger(Trigger): def set_condition(self, context, alliance_schema, **kw): return f"{self.__class__.__name__}_{alliance_schema}" def execute(self, context, alliance_schema, **kw): appsync.send_alliance( alliance_schema, {"id": alliance_schema, "status": "deleted"} ) class SendRemoveFromAllianceEmailTrigger(Trigger): def set_condition(self, context, member_id, **kw): """You can collect all the messages in context and send them off in one go""" # self.c_messages = f'{self.__class__.__name__}_{member_id}_messages' # context.setdefault(self.c_messages, []).append({}) return f"{self.__class__.__name__}_{member_id}_remove_member" def execute(self, context, user_id, member_id, alliance_name, **kw): email = {} for line in run_query( "SELECT user_id, email FROM commons.user_company " "WHERE user_id IN (%(user_id)s, %(member_id)s)", {"user_id": user_id, "member_id": member_id}, ): email[line[0]] = line[1] if len(email) == 2: send_alliance_email( "remove_member", email[user_id], email[member_id], alliance_name ) class UpdateCAWMetaTrigger(Trigger): def set_condition(self, context, schema, **kw): return f"{self.__class__.__name__}_{schema}" def execute(self, context, schema, **kw): update_caw_meta(schema) class SetAllianceUpdatedMetaTrigger(Trigger): def set_condition(self, context, alliance_schema, **kw): return f"{self.__class__.__name__}_{alliance_schema}" def execute(self, context, alliance_schema, **kw): update_caw_meta(alliance_schema)