import logging from service.utils.aws_connectors import run_query from service.utils.data_model_utils import add_event_log from .basic import Consequence from .deletion_triggers import ( SendRemoveFromAllianceEmailTrigger, SetAllianceUpdatedMetaTrigger, ) logger = logging.getLogger(__name__) class AllianceMemberRemovedConsequence(Consequence): description = "These Alliance members will be removed" def execute( self, context, alliance_schema, member_id, management_schema, user_id, **kw ): """Implement to make the consequence happen""" print(f"{self.__class__.__name__}: {self.description} - {member_id}") try: # remove alliance access from member management tables. member_default_schema = "" for line in run_query( "SELECT default_schema FROM commons.user_company " "WHERE user_id = %(member_id)s", {"member_id": member_id}, ): member_default_schema = line[0] run_query( f"DELETE FROM {member_default_schema}.alliance " f"WHERE id = %(alliance_schema)s;", { "alliance_schema": alliance_schema, }, fetch=False, ) # remove member rights run_query( f"DELETE FROM {management_schema}.user_roles " f"WHERE id = %(caw_schema)s AND company_alliance_workspace = %(schema_type)s " f"AND user_id = %(user_id)s;", { "caw_schema": alliance_schema, "schema_type": "alliance", "user_id": member_id, }, fetch=False, ) add_event_log( alliance_schema, None, member_id, "alliance_leave", "Left alliance" if user_id == member_id else "Was removed from alliance by alliance owner", ) break else: logger.error( "DID NOT FIND member default schema! Cant finish deletion!" ) except Exception as e: logger.exception(f"Alliance member remove error: {e}") triggers = [SetAllianceUpdatedMetaTrigger(context, **self.params)] if member_id != user_id: for line in run_query( f"SELECT val from {alliance_schema}.meta_data WHERE key = 'name'" ): alliance_name = line[0] break else: alliance_name = "unknown" triggers.append( SendRemoveFromAllianceEmailTrigger( context, alliance_name=alliance_name, **self.params ) ) return triggers