def handle(self): input = self.request.input input.delivery_mode = int(input.delivery_mode) input.priority = int(input.priority) input.expiration = int(input.expiration) if input.expiration else None if not (input.priority >= 0 and input.priority <= 9): msg = 'Priority should be between 0 and 9, not [{0}]'.format( repr(input.priority)) raise ValueError(msg) with closing(self.odb.session()) as session: # Let's see if we already have a definition of that name before committing # any stuff into the database. existing_one = session.query(OutgoingAMQP.id).\ filter(ConnDefAMQP.cluster_id==input.cluster_id).\ filter(OutgoingAMQP.def_id==ConnDefAMQP.id).\ filter(OutgoingAMQP.name==input.name).\ first() if existing_one: raise Exception( 'An outgoing AMQP connection `{}` already exists on this cluster' .format(input.name)) try: item = OutgoingAMQP() item.name = input.name item.is_active = input.is_active item.def_id = input.def_id item.delivery_mode = input.delivery_mode item.priority = input.priority item.content_type = input.content_type item.content_encoding = input.content_encoding item.expiration = input.expiration item.pool_size = input.pool_size item.user_id = input.user_id item.app_id = input.app_id session.add(item) session.commit() input.action = OUTGOING.AMQP_CREATE.value input.def_name = item.def_.name self.broker_client.publish(input) self.response.payload.id = item.id self.response.payload.name = item.name except Exception, e: self.logger.error( 'Could not create an outgoing AMQP connection, e:`%s`', format_exc(e)) session.rollback() raise