class HandleClientTearDown(ImmediateTask): """ This class handles the message to teardown the client's session that arrives from an agent. """ def __init__(self, session: AuctionSession): super(HandleClientTearDown, self).__init__() self.session = session self.template_container = IpapTemplateContainerSingleton() self.server_main_data = ServerMainData() self.bidding_manager = BiddingObjectManager( self.server_main_data.domain) self.auction_processor = AuctionProcessor(self.server_main_data.domain) self.server_message_processor = ServerMessageProcessor() def remove_bidding_object_from_processes(self, bidding_object: BiddingObject): """ # remove a bidding object from all auction_processes :param bidding_object: bidding object to disassociate :return: """ keys = bidding_object.get_participating_auction_processes().copy() for key in keys: self.auction_processor.delete_bidding_object_from_auction_process( key, bidding_object) async def _run_specific(self, **kwargs): try: bidding_object_keys = copy.deepcopy( self.bidding_manager.get_bidding_objects_by_session( self.session.get_key())) for bidding_object_key in bidding_object_keys: bidding_object = self.bidding_manager.get_bidding_object( bidding_object_key) self.remove_bidding_object_from_processes(bidding_object) await bidding_object.stop_tasks() self.bidding_manager.delete_bidding_object(bidding_object_key) except ValueError: # This means that the session does not have bidding objects associated pass
class HandleRemoveBiddingObjectByAuction(ImmediateTask): """ This class remove all bidding objects that was created for an auction. """ def __init__(self, auction: Auction): super(HandleRemoveBiddingObjectByAuction, self).__init__() self.client_data = ClientMainData() self.bidding_object_manager = BiddingObjectManager(self.client_data.domain) self.auction = auction async def _run_specific(self): """ delete all binding objects related with the auction :return: """ bidding_object_keys = deepcopy( self.bidding_object_manager.get_bidding_objects_by_parent(self.auction.get_key())) for bidding_object_key in bidding_object_keys: self.logger.info("removing bidding object: {0}".format(bidding_object_key)) bidding_object = self.bidding_object_manager.get_bidding_object(bidding_object_key) await bidding_object.stop_tasks() self.bidding_object_manager.delete_bidding_object(bidding_object_key)