def delete_book_request(id_):
    '''
    delete a book request by id
    '''
    try:
        book_req = BookRequests.get(id_)
        if book_req is None:
            raise error.BookReqFoundError('Book request not found')
        BookRequests.delete(id_)
    except sqlalchemy.exc.SQLAlchemyError as ex:
        log.error(f'Error while deleting book request {ex}')
        raise error.StorageError('Error while deleting book request')

    log.info(f'book request with id {id_} deleted')
def create_book_request(email, title):
    '''
    validate and add a book request to db
    '''
    _check_email_address_format(email)
    title = get_book_title(title)
    timestamp = _get_timestamp_now()
    new_book_request = BookRequests(email=email, timestamp=timestamp, book_title=title)

    try:
        db.session.add(new_book_request)
        db.session.commit()
    except sqlalchemy.exc.SQLAlchemyError as ex:
        db.session.rollback()
        log.error(f'Could not add book request: {ex}')
        raise error.StorageError('Could not add book request!')

    ret_value = new_book_request.to_dict()
    ret_value['title'] = title.title
    log.info(f'new book request {ret_value} successfully added')
    return ret_value
    def test_create_book_request_invalid_email3(self):
        book_title = "Book Title"
        email = "*****@*****.**"
        response = self.client.open('/api/v1/request',
                                    method='POST',
                                    content_type='application/json',
                                    headers={'accept': 'application/json'},
                                    query_string=[('email', email),
                                                  ('title', book_title)])

        self.assertStatus(response, 400)

        all_books_requests = BookRequests.get_all()
        self.assertEqual(len(all_books_requests), 0)
    def test_add_book_request(self):
        book_title = "Book Title 1"
        email = "*****@*****.**"
        response = self.client.open('/api/v1/request',
                                    method='POST',
                                    content_type='application/json',
                                    headers={'accept': 'application/json'},
                                    query_string=[('email', email),
                                                  ('title', book_title)])

        self.assertStatus(response, 200)
        data = response.json

        self.assertEqual(len(data), 4)
        self.assertIn('id', data)
        self.assertIn('timestamp', data)
        self.assertEqual(data['title'], book_title)
        self.assertEqual(data['email'], email)

        all_books_requests = BookRequests.get_all()
        self.assertEqual(len(all_books_requests), 1)