def __init__(self): super(ISBNSearcherGUI, self).__init__() self.setWindowTitle("ISBN Searcher") # set window title self.setWindowIcon(QtGui.QIcon(MAIN_WINDOW_ICON)) # Create a BooksManager instance self.books_manager = BooksManager() # Create the main layout self.create_main_layout()
def simple_local_test(self): manager = BooksManager() book = Book(data) manager._remote_request_data = Mock(return_value=[[data]]) manager.update_books('fake keyword') self.assertEqual(book.title, manager.books_titles[0]) self.assertEqual(book.publisher, manager.books[0].publisher) self.assertEqual(book.subjects, manager.books[0].subjects) self.assertEqual(book.author, manager.books[0].author) self.assertEqual(book.isbn10, manager.books[0].isbn10) self.assertEqual(book.isbn13, manager.books[0].isbn13) self.assertEqual(book.edition, manager.books[0].edition) self.assertEqual(book.language, manager.books[0].language)
class ISBNSearcherGUI(QtGui.QMainWindow): """ This class create a ISBN searcher window """ def __init__(self): super(ISBNSearcherGUI, self).__init__() self.setWindowTitle("ISBN Searcher") # set window title self.setWindowIcon(QtGui.QIcon(MAIN_WINDOW_ICON)) # Create a BooksManager instance self.books_manager = BooksManager() # Create the main layout self.create_main_layout() def create_main_layout(self): """ Create the main layout """ # Create widgets self.books_searcher_widget = BooksSearcherWidget("ISBNdb searcher") self.books_list_widget = BooksListWidget("Founded results...") self.books_table_widget = BooksTableWidget("Item selected book details") # Create a menu bar self.create_menu_bar() # Create layout to hold the widgets self.main_layout = QtGui.QVBoxLayout() self.main_layout.addWidget(self.books_searcher_widget) self.main_layout.addWidget(self.books_list_widget) self.main_layout.addWidget(self.books_table_widget) # Create a widget to display our final layout self.isbn_searcher_widget = QtGui.QWidget() self.isbn_searcher_widget.setLayout(self.main_layout) # Change global settings to display the window self.resize(850, 500) self.focus() # focus to center of the active window self.statusBar().showMessage('Ready', 1500) # create a status bar self.setCentralWidget(self.isbn_searcher_widget) # connections self.books_searcher_widget.book_searcher_line_edit.returnPressed.connect(self.update_books_list) self.books_searcher_widget.book_search_button.clicked.connect(self.update_books_list) self.books_list_widget.books_list.clicked.connect(self.update_table_list) def create_menu_bar(self): show_help_action = QtGui.QAction('&Help', self) show_help_action.setShortcut('Ctrl+H') show_help_action.setStatusTip('Help information') show_help_action.triggered.connect(self.show_help_info) menubar = self.menuBar() fileMenu = menubar.addMenu('&Help') fileMenu.addAction(show_help_action) def show_help_info(self): help_info = """<html> <p>This is a brief explanation to use the ISBNdb searcher.</p> <p>You can make searches about these collections: <b>book (title or isbn), author, subject or publisher</b></p> <p></p> <ol> <li>Simple and general search around all the possible collections:</li> <p><b>science fiction</b></p> <p style="color:red">WARNING!</br> This search generates a lot of ones so you could spend all your free daily ISBNdb API requests</p> <li>A specific search:</li> <p><b>book: 0545010225</b></p> <li>A query search:</li> <p><b>subject: brain disease && query: True</b></p> <li>A query search with a customized index (only books and query must be True):</li> <p><b>book: Harry Potter && query: True && index: author_name</b></p> <p>Note: valid index values:</p> <ul> <li>author_id -> ISBNdb's internal author_id </li> <li>author_name</li> <li>publisher_id -> ISBNdb's internal publisher_id</li> <li>publisher_name</li> <li>book_summary</li> <li>book_notes</li> <li>dewey -> dewey decimal number</li> <li>lcc -> library of congress number</li> <li>combined -> searches across title, author name and publisher name</li> <li>full -> searches across all indexes</li> </ul> </ol> </html> """ QtGui.QMessageBox.information(self, "Help Info", help_info) def update_books_list(self): keyword = self.books_searcher_widget.get_text() if keyword is None or keyword == '': QtGui.QMessageBox.information(self, "Search box", "Enter any word to search") else: self.statusBar().showMessage('Searching on ISBNdb database...') try: self.books_manager.update_books(keyword) except Exception as exc: QtGui.QMessageBox.warning(self, "Warning box", "An exception occurred: %s" % exc) self.statusBar().showMessage('Finished', 1500) self.books_list_widget.update_list(self.books_manager.books_titles) @QtCore.pyqtSlot(QtCore.QModelIndex) def update_table_list(self, index): """ method to update the table book list """ book = self.books_manager.books[index.row()] # get book object self.books_table_widget.update_table(book) def focus(self): """ Focus the window to the center of the screen http://stackoverflow.com/questions/20243637/pyqt4-center-window-on-active-screen """ frame_geometry = self.frameGeometry() screen = QtGui.QApplication.desktop().screenNumber(QtGui.QApplication.desktop().cursor().pos()) center_point = QtGui.QApplication.desktop().screenGeometry(screen).center() frame_geometry.moveCenter(center_point) self.move(frame_geometry.topLeft())
class ISBNSearcherGUI(QtGui.QMainWindow): """ This class create a ISBN searcher window """ def __init__(self): super(ISBNSearcherGUI, self).__init__() self.setWindowTitle("ISBN Searcher") # set window title self.setWindowIcon(QtGui.QIcon(MAIN_WINDOW_ICON)) # Create a BooksManager instance self.books_manager = BooksManager() # Create the main layout self.create_main_layout() def create_main_layout(self): """ Create the main layout """ # Create widgets self.books_searcher_widget = BooksSearcherWidget("ISBNdb searcher") self.books_list_widget = BooksListWidget("Founded results...") self.books_table_widget = BooksTableWidget( "Item selected book details") # Create a menu bar self.create_menu_bar() # Create layout to hold the widgets self.main_layout = QtGui.QVBoxLayout() self.main_layout.addWidget(self.books_searcher_widget) self.main_layout.addWidget(self.books_list_widget) self.main_layout.addWidget(self.books_table_widget) # Create a widget to display our final layout self.isbn_searcher_widget = QtGui.QWidget() self.isbn_searcher_widget.setLayout(self.main_layout) # Change global settings to display the window self.resize(850, 500) self.focus() # focus to center of the active window self.statusBar().showMessage('Ready', 1500) # create a status bar self.setCentralWidget(self.isbn_searcher_widget) # connections self.books_searcher_widget.book_searcher_line_edit.returnPressed.connect( self.update_books_list) self.books_searcher_widget.book_search_button.clicked.connect( self.update_books_list) self.books_list_widget.books_list.clicked.connect( self.update_table_list) def create_menu_bar(self): show_help_action = QtGui.QAction('&Help', self) show_help_action.setShortcut('Ctrl+H') show_help_action.setStatusTip('Help information') show_help_action.triggered.connect(self.show_help_info) menubar = self.menuBar() fileMenu = menubar.addMenu('&Help') fileMenu.addAction(show_help_action) def show_help_info(self): help_info = """<html> <p>This is a brief explanation to use the ISBNdb searcher.</p> <p>You can make searches about these collections: <b>book (title or isbn), author, subject or publisher</b></p> <p></p> <ol> <li>Simple and general search around all the possible collections:</li> <p><b>science fiction</b></p> <p style="color:red">WARNING!</br> This search generates a lot of ones so you could spend all your free daily ISBNdb API requests</p> <li>A specific search:</li> <p><b>book: 0545010225</b></p> <li>A query search:</li> <p><b>subject: brain disease && query: True</b></p> <li>A query search with a customized index (only books and query must be True):</li> <p><b>book: Harry Potter && query: True && index: author_name</b></p> <p>Note: valid index values:</p> <ul> <li>author_id -> ISBNdb's internal author_id </li> <li>author_name</li> <li>publisher_id -> ISBNdb's internal publisher_id</li> <li>publisher_name</li> <li>book_summary</li> <li>book_notes</li> <li>dewey -> dewey decimal number</li> <li>lcc -> library of congress number</li> <li>combined -> searches across title, author name and publisher name</li> <li>full -> searches across all indexes</li> </ul> </ol> </html> """ QtGui.QMessageBox.information(self, "Help Info", help_info) def update_books_list(self): keyword = self.books_searcher_widget.get_text() if keyword is None or keyword == '': QtGui.QMessageBox.information(self, "Search box", "Enter any word to search") else: self.statusBar().showMessage('Searching on ISBNdb database...') try: self.books_manager.update_books(keyword) except Exception as exc: QtGui.QMessageBox.warning(self, "Warning box", "An exception occurred: %s" % exc) self.statusBar().showMessage('Finished', 1500) self.books_list_widget.update_list(self.books_manager.books_titles) @QtCore.pyqtSlot(QtCore.QModelIndex) def update_table_list(self, index): """ method to update the table book list """ book = self.books_manager.books[index.row()] # get book object self.books_table_widget.update_table(book) def focus(self): """ Focus the window to the center of the screen http://stackoverflow.com/questions/20243637/pyqt4-center-window-on-active-screen """ frame_geometry = self.frameGeometry() screen = QtGui.QApplication.desktop().screenNumber( QtGui.QApplication.desktop().cursor().pos()) center_point = QtGui.QApplication.desktop().screenGeometry( screen).center() frame_geometry.moveCenter(center_point) self.move(frame_geometry.topLeft())