def batch_execute_statement( request: BatchExecuteStatementRequests ) -> BatchExecuteStatementResponse: resource: Optional[Resource] = None try: resource = get_resource(request.resourceArn, request.secretArn, request.transactionId) update_results: List[UpdateResult] = [] if not request.parameterSets: response: BatchExecuteStatementResponse = BatchExecuteStatementResponse( updateResults=update_results) else: for parameter_set in request.parameterSets: parameters: Dict[str, Any] = { parameter.name: parameter.valid_value for parameter in parameter_set.__root__ } result: ExecuteStatementResponse = resource.execute( request.sql, parameters, request.database) if result.generatedFields: update_results.append( UpdateResult(generatedFields=result.generatedFields)) response = BatchExecuteStatementResponse( updateResults=update_results) if not resource.transaction_id: resource.commit() return response finally: if resource and not resource.transaction_id: resource.close()
def test_get_resource(secrets, mocker) -> None: resource_arn: str = 'dummy_resource_arn' connection_maker = SQLite.create_connection_maker('localhost', 3306, 'test', 'pw', {}) RESOURCE_METAS[resource_arn] = ResourceMeta(SQLite, connection_maker, 'localhost', 3306, 'test', 'pw') mock_get_connection = mocker.patch( 'local_data_api.resources.resource.get_connection') new_connection = mocker.Mock() mock_get_connection.return_value = new_connection resource = get_resource(resource_arn, 'dummy', 'transaction') assert resource.connection, new_connection with pytest.raises(BadRequestException): get_resource(resource_arn, 'dummy', 'transaction', database='test')
def test_get_resource_exception(clear, secrets, mocker) -> None: resource_arn: str = 'dummy_resource_arn' connection_maker = SQLite.create_connection_maker() RESOURCE_METAS[resource_arn] = ResourceMeta(SQLite, connection_maker, 'localhost', 3306, 'test', 'pw') with pytest.raises(BadRequestException): get_resource('invalid', 'dummy') with pytest.raises(InternalServerErrorException): CONNECTION_POOL['dummy'] = connection_maker() get_resource('invalid', 'dummy', 'dummy') del CONNECTION_POOL['dummy'] with pytest.raises(BadRequestException): secrets.side_effect = BadRequestException('error') get_resource(resource_arn, 'dummy') with pytest.raises(InternalServerErrorException): secrets.side_effect = BadRequestException('error') CONNECTION_POOL['dummy'] = connection_maker() get_resource(resource_arn, 'dummy', 'dummy') secrets.side_effect = None secret = mocker.Mock() secret.user_name = 'invalid' secret.password = '******' secrets.return_value = secret with pytest.raises(BadRequestException): get_resource(resource_arn, 'dummy') secret = mocker.Mock() secret.user_name = 'test' secret.password = '******' secrets.return_value = secret with pytest.raises(BadRequestException): get_resource(resource_arn, 'dummy')