示例#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')
示例#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')
示例#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)
示例#4
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')
示例#5
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)
示例#6
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)
示例#7
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)
示例#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')
示例#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')
示例#10
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)