Exemplo n.º 1
0
    def __getReadersByBook(self):
        searchMenu = CUI('Readers of the book')
        self.currentMenu = searchMenu
        try:
            book_id = int(input('Enter book id: '))

            if not (isinstance(book_id, int) and book_id > 0):
                raise Exception('Invalid input')

            startTime = time.time()
            allRecords = self.searchController.getReadersByBook(book_id)
            endTime = time.time()

            searchMenu.setError('\nElapsed time: ' +
                                str(endTime - startTime)[:9] + 's'
                                '\nRows num: ' + str(len(allRecords)))

            searchMenu.addField('<Book id> | Reader name | Reader surname')
            for record in allRecords:
                searchMenu.addField(f"<{record[0]}> {record[1]} {record[2]}")

        except Exception as err:
            searchMenu.setError(str(err))

        searchMenu.run('Return to prev menu')
Exemplo n.º 2
0
    def __getSomeExemplars(self):
        searchMenu = CUI('Exemplars which id less than input value')
        self.currentMenu = searchMenu
        try:
            exemplar_id = int(input('Input value of id: '))

            if not (isinstance(exemplar_id, int) and exemplar_id > 0):
                raise Exception('Invalid input')

            startTime = time.time()
            allRecords = self.searchController.getSomeExemplars(exemplar_id)
            endTime = time.time()

            searchMenu.setError('\nElapsed time: ' +
                                str(endTime - startTime)[:9] + 's'
                                '\nRows num: ' + str(len(allRecords)))

            searchMenu.addField('<Exemplar id> | Book id | Reader id ')
            for record in allRecords:
                searchMenu.addField(f"<{record[0]}> {record[1]} {record[2]} ")

        except Exception as err:
            searchMenu.setError(str(err))

        searchMenu.run('Return to prev menu')
Exemplo n.º 3
0
    def __getBooksByReader(self):
        searchMenu = CUI('Books which read by reader')
        self.currentMenu = searchMenu
        try:
            reader_id = int(input('Enter book id: '))
            if not (isinstance(reader_id, int) and reader_id > 0):
                raise Exception('Invalid input')

            startTime = time.time()
            allRecords = self.searchController.getBooksByReader(reader_id)
            endTime = time.time()

            searchMenu.setError('\nElapsed time: ' +
                                str(endTime - startTime)[:9] + 's'
                                '\nRows num: ' + str(len(allRecords)))

            if self.page < math.ceil(len(allRecords) / self.per_page):
                searchMenu.addField(
                    'NEXT', lambda: self.__changePageParams(
                        self.page + 1, self.per_page))
            if self.page > 1:
                searchMenu.addField(
                    'PREV', lambda: self.__changePageParams(
                        self.page - 1, self.per_page))

            searchMenu.addField('<ID> | Book name | Publishing | Year')
            for record in allRecords:
                searchMenu.addField(
                    f"<{record[0]}> {record[1]} {record[2]} {record[3]}")

        except Exception as err:
            searchMenu.setError(str(err))

        searchMenu.addField('Return to prev menu', lambda: self.__exitMenu())
        searchMenu.run(False)
Exemplo n.º 4
0
    def __getBook(self, id: int):
        bookMenu = CUI('Book menu')
        self.currentMenu[1] = bookMenu
        try:
            book: Book = self.bookController.getById(id)
            values = book.getValues().split(',')
            keys = book.getKeys().split(',')
            for i in range(len(keys)):
                bookMenu.addField(keys[i] + ' : ' + values[i])

            bookMenu.addField('DELETE',
                              lambda: self.__deleteBook(book.book_id))
            bookMenu.addField('UPDATE',
                              lambda: self.__updateBook(book.book_id))
            bookMenu.addField('Return to prev menu',
                              lambda: self.__supportCUIFunc())
        except Exception as err:
            bookMenu.setError(str(err))
        bookMenu.run(False)
Exemplo n.º 5
0
    def __getExemplar(self, id: int):
        exemplarMenu = CUI('Exemplar menu')
        self.currentMenu[1] = exemplarMenu
        try:
            exemplar: Exemplar = self.exemplarController.getById(id)
            values = exemplar.getValues().split(',')
            keys = exemplar.getKeys().split(',')
            for i in range(len(keys)):
                exemplarMenu.addField(keys[i] + ' : ' + values[i])

            exemplarMenu.addField(
                'DELETE', lambda: self.__deleteExemplar(exemplar.exemplar_id))
            exemplarMenu.addField(
                'UPDATE', lambda: self.__updateExemplar(exemplar.exemplar_id))
            exemplarMenu.addField('Return to prev menu',
                                  lambda: self.__supportCUIFunc())
        except Exception as err:
            exemplarMenu.setError(str(err))
        exemplarMenu.run(False)
Exemplo n.º 6
0
    def __getReaders(self):
        readersMenu = CUI('Readers')
        self.currentMenu[0] = readersMenu
        try:
            if self.page < math.ceil(self.readerController.getCount() / self.per_page):
                readersMenu.addField('NEXT', lambda: self.__changePageParams(self.page + 1, self.per_page))
            if self.page > 1:
                readersMenu.addField('PREV', lambda: self.__changePageParams(self.page - 1, self.per_page))
            readers = self.readerController.getAll(self.page, self.per_page)
            for reader in readers:
                readersMenu.addField(f"<{reader.reader_id}>{reader.name}", lambda reader_id=reader.reader_id: self.__getReader(reader_id))

        except Exception as err:
            readersMenu.setError(str(err))
        readersMenu.run('Return to main menu')
Exemplo n.º 7
0
    def __getReader(self, id: int):
        readerMenu = CUI('Reader menu')
        self.currentMenu[1] = readerMenu
        try:
            reader: Reader = self.readerController.getById(id)
            values = reader.getValues().split(',')
            keys = reader.getKeys().split(',')
            for i in range(len(keys)):
                if i == 0:
                    continue
                readerMenu.addField(keys[i] + ' : ' + values[i])

            readerMenu.addField('DELETE', lambda: self.__deleteReader(reader.reader_id))
            readerMenu.addField('UPDATE', lambda: self.__updateReader(reader.reader_id))
            readerMenu.addField('Return to prev menu', lambda: self.__supportCUIFunc())
        except Exception as err:
            readerMenu.setError(str(err))
        readerMenu.run(False)
Exemplo n.º 8
0
    def __getBooks(self):
        booksMenu = CUI('Books')
        self.currentMenu[0] = booksMenu
        try:
            if self.page < math.ceil(
                    self.bookController.getCount() / self.per_page):
                booksMenu.addField(
                    'NEXT', lambda: self.__changePageParams(
                        self.page + 1, self.per_page))
            if self.page > 1:
                booksMenu.addField(
                    'PREV', lambda: self.__changePageParams(
                        self.page - 1, self.per_page))
            books = self.bookController.getAll(self.page, self.per_page)
            for book in books:
                booksMenu.addField(
                    f"<{book.book_id}>{book.name}",
                    lambda book_id=book.book_id: self.__getBook(book_id))

        except Exception as err:
            booksMenu.setError(str(err))
        booksMenu.run('Return to main menu')
Exemplo n.º 9
0
    def __getExemplars(self):
        exemplarsMenu = CUI('Exemplar')
        self.currentMenu[0] = exemplarsMenu
        try:
            if self.page < math.ceil(
                    self.exemplarController.getCount() / self.per_page):
                exemplarsMenu.addField(
                    'NEXT', lambda: self.__changePageParams(
                        self.page + 1, self.per_page))
            if self.page > 1:
                exemplarsMenu.addField(
                    'PREV', lambda: self.__changePageParams(
                        self.page - 1, self.per_page))
            exemplars = self.exemplarController.getAll(self.page,
                                                       self.per_page)
            for exemplar in exemplars:
                exemplarsMenu.addField(f"<{exemplar.exemplar_id}>",
                                       lambda exemplar_id=exemplar.exemplar_id:
                                       self.__getExemplar(exemplar_id))

        except Exception as err:
            exemplarsMenu.setError(str(err))
        exemplarsMenu.run('Return to main menu')
Exemplo n.º 10
0
import sys
from cui import CUI
from views.bookView import BookView
from views.exemplarView import ExemplarView
from views.readerView import ReaderView
from views.searchView import SearchView
if __name__ == '__main__':
    main = CUI()
    main.addField('Books', lambda: BookView().run())
    main.addField('Exemplar', lambda: ExemplarView().run())
    main.addField('Reader', lambda: ReaderView().run())
    main.addField('Search', lambda: SearchView().run())
    # main.addField('Search ', lambda: SearchView().run())
    main.run()
#from consolemenu import *
#from consolemenu.items import *
# con = psycopg2.connect(
#         database="library",
#         user="******",
#         password="******")
# cur = con.cursor()
# cur.execute("insert into public.\"Books\"(name, author,year,publishing,place) values('north','Tor',1999,'Time','Dnipro')")
# cur.execute("select book_id, name, author, year, publishing, place from public.\"Books\"")
# rows = cur.fetchall()
#for r in rows:
#   print(f"book_id: {r[0]}, name: {r[1]}, author: {r[2]}, year: {r[3]}, publishing: {r[4]} , place: {r[5]} " )
# con.commit()
# cur.close()
# con.close()
Exemplo n.º 11
0
class SearchView:
    def __init__(self):
        self.currentMenu = None
        self.page = 1
        self.per_page = 10
        self.reader_id = None
        self.book_id = None
        self.exemplar_id = None

        self.CUI = CUI("Search menu")
        self.searchController = SearchController()
        self.CUI.addField('Search all books of the reader',
                          lambda: self.__getBooksByReader())
        self.CUI.addField('Search readers of the book',
                          lambda: self.__getReadersByBook())
        self.CUI.addField(
            'Search all exemplars which id less than input value:',
            lambda: self.__getSomeExemplars())

    def run(self):
        self.CUI.run()

    def __changePageParams(self, page: int, per_page: int):
        self.page = page
        self.per_page = per_page
        self.currentMenu.stop()
        self.__getBooksByReader()

    def __exitMenu(self):
        self.reader_id = None
        self.book_id = None
        self.exemplar_id = None
        self.page = 1
        self.per_page = 10
        self.currentMenu.stop()

    def __getBooksByReader(self):
        searchMenu = CUI('Books which read by reader')
        self.currentMenu = searchMenu
        try:
            reader_id = int(input('Enter book id: '))
            if not (isinstance(reader_id, int) and reader_id > 0):
                raise Exception('Invalid input')

            startTime = time.time()
            allRecords = self.searchController.getBooksByReader(reader_id)
            endTime = time.time()

            searchMenu.setError('\nElapsed time: ' +
                                str(endTime - startTime)[:9] + 's'
                                '\nRows num: ' + str(len(allRecords)))

            if self.page < math.ceil(len(allRecords) / self.per_page):
                searchMenu.addField(
                    'NEXT', lambda: self.__changePageParams(
                        self.page + 1, self.per_page))
            if self.page > 1:
                searchMenu.addField(
                    'PREV', lambda: self.__changePageParams(
                        self.page - 1, self.per_page))

            searchMenu.addField('<ID> | Book name | Publishing | Year')
            for record in allRecords:
                searchMenu.addField(
                    f"<{record[0]}> {record[1]} {record[2]} {record[3]}")

        except Exception as err:
            searchMenu.setError(str(err))

        searchMenu.addField('Return to prev menu', lambda: self.__exitMenu())
        searchMenu.run(False)

    def __getReadersByBook(self):
        searchMenu = CUI('Readers of the book')
        self.currentMenu = searchMenu
        try:
            book_id = int(input('Enter book id: '))

            if not (isinstance(book_id, int) and book_id > 0):
                raise Exception('Invalid input')

            startTime = time.time()
            allRecords = self.searchController.getReadersByBook(book_id)
            endTime = time.time()

            searchMenu.setError('\nElapsed time: ' +
                                str(endTime - startTime)[:9] + 's'
                                '\nRows num: ' + str(len(allRecords)))

            searchMenu.addField('<Book id> | Reader name | Reader surname')
            for record in allRecords:
                searchMenu.addField(f"<{record[0]}> {record[1]} {record[2]}")

        except Exception as err:
            searchMenu.setError(str(err))

        searchMenu.run('Return to prev menu')

    def __getSomeExemplars(self):
        searchMenu = CUI('Exemplars which id less than input value')
        self.currentMenu = searchMenu
        try:
            exemplar_id = int(input('Input value of id: '))

            if not (isinstance(exemplar_id, int) and exemplar_id > 0):
                raise Exception('Invalid input')

            startTime = time.time()
            allRecords = self.searchController.getSomeExemplars(exemplar_id)
            endTime = time.time()

            searchMenu.setError('\nElapsed time: ' +
                                str(endTime - startTime)[:9] + 's'
                                '\nRows num: ' + str(len(allRecords)))

            searchMenu.addField('<Exemplar id> | Book id | Reader id ')
            for record in allRecords:
                searchMenu.addField(f"<{record[0]}> {record[1]} {record[2]} ")

        except Exception as err:
            searchMenu.setError(str(err))

        searchMenu.run('Return to prev menu')
Exemplo n.º 12
0
class ReaderView:
    def __init__(self):
        self.currentMenu = [None, None]
        self.page = 1
        self.per_page = 10

        self.CUI = CUI("Reader model menu")
        self.readerController = ReaderController()
        self.CUI.addField('Add Reader', lambda: self.__addReaders())
        self.CUI.addField('Generate rows', lambda: self.__generateRows())
        self.CUI.addField('Readers', lambda: self.__getReaders())

    def run(self):
        self.CUI.run()

    def __generateRows(self):
        try:
            rowsNum = int(input('Enter rows num: '))
            if not (isinstance(rowsNum, int) and rowsNum > 0):
                raise Exception('Invalid input')
            self.CUI.setError('   Please wait! Rows are generating...   ')
            time = self.readerController.generateRows(rowsNum)
            self.CUI.setError('   Rows generated! Elapsed time: ' + time)
        except Exception as error:
            self.CUI.setError(str(error))

    def __addReaders(self):
        try:
            result = self.readerController.add()
            if isinstance(result, bool) and not result: raise Exception('Inccorect values')
            else: self.CUI.setError('New Reader id: ' + str(result))
        except Exception as err:
            self.CUI.setError(str(err))

    def __changePageParams(self, page: int, per_page: int):
        self.page = page
        self.per_page = per_page
        self.currentMenu[0].stop()
        self.__getReaders()

    def __getReaders(self):
        readersMenu = CUI('Readers')
        self.currentMenu[0] = readersMenu
        try:
            if self.page < math.ceil(self.readerController.getCount() / self.per_page):
                readersMenu.addField('NEXT', lambda: self.__changePageParams(self.page + 1, self.per_page))
            if self.page > 1:
                readersMenu.addField('PREV', lambda: self.__changePageParams(self.page - 1, self.per_page))
            readers = self.readerController.getAll(self.page, self.per_page)
            for reader in readers:
                readersMenu.addField(f"<{reader.reader_id}>{reader.name}", lambda reader_id=reader.reader_id: self.__getReader(reader_id))

        except Exception as err:
            readersMenu.setError(str(err))
        readersMenu.run('Return to main menu')

    def __updateReader(self, id: int):
        if self.readerController.update(id):
            self.currentMenu[1].stop()
            self.__getReader(id)
        else:
            self.currentMenu[1].setError('Incorrect update values')

    def __deleteReader(self, id: int):
        self.readerController.delete(id)
        self.currentMenu[1].stop()
        self.__supportCUIFunc()

    def __supportCUIFunc(self):
        self.currentMenu[1].stop()
        self.__changePageParams(self.page, self.per_page)

    def __getReader(self, id: int):
        readerMenu = CUI('Reader menu')
        self.currentMenu[1] = readerMenu
        try:
            reader: Reader = self.readerController.getById(id)
            values = reader.getValues().split(',')
            keys = reader.getKeys().split(',')
            for i in range(len(keys)):
                if i == 0:
                    continue
                readerMenu.addField(keys[i] + ' : ' + values[i])

            readerMenu.addField('DELETE', lambda: self.__deleteReader(reader.reader_id))
            readerMenu.addField('UPDATE', lambda: self.__updateReader(reader.reader_id))
            readerMenu.addField('Return to prev menu', lambda: self.__supportCUIFunc())
        except Exception as err:
            readerMenu.setError(str(err))
        readerMenu.run(False)