def __init__(self): self.currentMenu = [None, None] self.page = 1 self.per_page = 10 self.CUI = CUI("Product model menu") self.productController = ProductController() self.CUI.addField('Add Product', lambda: self.__addProduct()) self.CUI.addField('Generate rows', lambda: self.__generateRows()) self.CUI.addField('Products', lambda: self.__getProducts())
def __init__(self): self.currentMenu = [None, None] self.page = 1 self.per_page = 10 self.CUI = CUI("Client model menu") self.clientController = ClientController() self.CUI.addField('Add Client', lambda: self.__addClient()) self.CUI.addField('Generate rows', lambda: self.__generateRows()) self.CUI.addField('Clients', lambda: self.__getClients())
def __init__(self): self.currentMenu = [None, None] self.page = 1 self.per_page = 10 self.CUI = CUI("Order model menu") self.orderController = OrderController() self.CUI.addField('Add Order', lambda: self.__addOrder()) self.CUI.addField('Generate rows', lambda: self.__generateRows()) self.CUI.addField('Orders', lambda: self.__getOrders())
def __init__(self): self.page = 1 self.per_page = 10 self.currentMenu = [None, None] self.CUI = CUI("Category model menu") self.categoryController = CategoryController() self.CUI.addField('Add Category', lambda: self.__addCategory()) self.CUI.addField('Generate rows', lambda: self.__generateRows()) self.CUI.addField('Categorys', lambda: self.__getCategorys())
def __init__(self, instance): self.instance = instance self.page = 1 self.itemsCurrentMenu = [None, None] self.per_page = 10 self.CUI = CUI(f"{self.instance.__name__} model menu") self.Controller = ModelController(instance) self.CUI.addField(f'Add {self.instance.__name__}', lambda: self.__addItem()) self.CUI.addField(f'{self.instance.__name__}s', lambda: self.__getItems())
def __init__(self): self.currentMenu = None self.page = 1 self.per_page = 10 self.min = None self.max = None self.CUI = CUI("Search menu") self.searchController = SearchController() self.CUI.addField('Search products cost by cost range', lambda: self.__getProductsByCostRange()) self.CUI.addField('Search all client orders', lambda: self.__getClientOrders()) self.CUI.addField('Search all category products', lambda: self.__getCategoryProducts())
def __fillEntityMenu(self, *args): self.currentMenu = CUI(f'{self.instance.__name__} fill menu') try: if len(args) > 0 and isinstance(args[0], self.instance): item = args[0] for (key, value) in self.Controller.getModelEntityMappedKeys( item).items(): self.currentMenu.addField( f'{key}: <{value}>', lambda key=key, value=value: self. __supportFillItemFunc(key, value, item)) elif len(args) > 0 and isinstance(args[0], dict): mapped = args[0] for key in self.Controller.getModelKeys(): mapped[key] = None self.currentMenu.addField( f'{key}', lambda key=key: self.__supportFillFunc(key, mapped)) else: raise Exception('Invalid arguments') except Exception as err: self.currentMenu.setError(str(err)) self.currentMenu.run('Save and Return')
class EntityView: def __init__(self, instance): self.instance = instance self.page = 1 self.itemsCurrentMenu = [None, None] self.per_page = 10 self.CUI = CUI(f"{self.instance.__name__} model menu") self.Controller = ModelController(instance) self.CUI.addField(f'Add {self.instance.__name__}', lambda: self.__addItem()) self.CUI.addField(f'{self.instance.__name__}s', lambda: self.__getItems()) def __supportFillItemFunc(self, key, value, item): try: new_value = input(f'Enter new {key} value: ') if isinstance(new_value, str) and len(new_value) > 0: if new_value.isdigit(): setattr(item, key, int(new_value)) else: setattr(item, key, new_value) else: raise Exception('Incorrect input') self.currentMenu.renameField(f'{key}: <{value}>', f'{key}: <{new_value}>') except Exception as err: self.currentMenu.setError(str(err)) def __supportFillFunc(self, key, mapped): try: value = input(f'Enter new {key} value: ') old_value = None if key in mapped and mapped[key] is not None: old_value = mapped[key] if isinstance(value, str) and len(value) > 0: if value.isdigit(): mapped[key] = int(value) else: mapped[key] = value else: raise Exception('Incorrect input') if old_value is None: self.currentMenu.renameField(f'{key}', f'{key}: <{value}>') else: self.currentMenu.renameField(f'{key}: <{old_value}>', f'{key}: <{value}>') except Exception as err: self.currentMenu.setError(str(err)) def __fillEntityMenu(self, *args): self.currentMenu = CUI(f'{self.instance.__name__} fill menu') try: if len(args) > 0 and isinstance(args[0], self.instance): item = args[0] for (key, value) in self.Controller.getModelEntityMappedKeys( item).items(): self.currentMenu.addField( f'{key}: <{value}>', lambda key=key, value=value: self. __supportFillItemFunc(key, value, item)) elif len(args) > 0 and isinstance(args[0], dict): mapped = args[0] for key in self.Controller.getModelKeys(): mapped[key] = None self.currentMenu.addField( f'{key}', lambda key=key: self.__supportFillFunc(key, mapped)) else: raise Exception('Invalid arguments') except Exception as err: self.currentMenu.setError(str(err)) self.currentMenu.run('Save and Return') def run(self): self.CUI.run() def __addItem(self): try: mapped = {} self.__fillEntityMenu(mapped) exec_str = '' for value in mapped.values(): if value is None or \ (isinstance(value, str) and any((char in exec_bad_chars) for char in value)) \ : raise Exception('Invalid entity fill') if isinstance(value, str): exec_str += f"'{value}', " else: exec_str += f"{value}, " exec("self.entity = self.instance(%s)" % exec_str[:-1]) entityId = self.Controller.add(self.entity) self.CUI.setError(f'New Entity created! Id: {entityId}') 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.itemsCurrentMenu[0].stop() self.__getItems() def __getItems(self): itemsMenu = CUI(self.instance.__name__ + 's') self.itemsCurrentMenu[0] = itemsMenu try: if self.page < math.ceil( self.Controller.getCount() / self.per_page): itemsMenu.addField( 'NEXT', lambda: self.__changePageParams( self.page + 1, self.per_page)) if self.page > 1: itemsMenu.addField( 'PREV', lambda: self.__changePageParams( self.page - 1, self.per_page)) entities = self.Controller.getRange(self.page, self.per_page) for entity in entities: if 'name' in self.Controller.getModelKeys(): itemsMenu.addField(f"<{entity.id}> {entity.name}", lambda id=entity.id: self.__getItem(id)) else: itemsMenu.addField(f"<{entity.id}>", lambda id=entity.id: self.__getItem(id)) except Exception as err: itemsMenu.setError(str(err)) itemsMenu.run('Return to main menu') def __updateItem(self, item): self.__fillEntityMenu(item) self.Controller.update(item) self.itemsCurrentMenu[1].stop() self.__getItem(item.id) def __deleteItem(self, id: int): self.Controller.delete(id) self.itemsCurrentMenu[1].stop() self.__supportCUIFunc() def __supportCUIFunc(self): self.itemsCurrentMenu[1].stop() self.__changePageParams(self.page, self.per_page) def __getItem(self, id: int): itemMenu = CUI(f'{self.instance.__name__} menu') self.itemsCurrentMenu[1] = itemMenu try: item = self.Controller.getById(id) for (key, value ) in self.Controller.getModelEntityMappedKeys(item).items(): itemMenu.addField(str(key) + ' : ' + str(value)) itemMenu.addField('DELETE', lambda: self.__deleteItem(item.id)) itemMenu.addField('UPDATE', lambda: self.__updateItem(item)) itemMenu.addField('Return to prev menu', lambda: self.__supportCUIFunc()) except Exception as err: itemMenu.setError(str(err)) itemMenu.run(False)
def __getItem(self, id: int): itemMenu = CUI(f'{self.instance.__name__} menu') self.itemsCurrentMenu[1] = itemMenu try: item = self.Controller.getById(id) for (key, value ) in self.Controller.getModelEntityMappedKeys(item).items(): itemMenu.addField(str(key) + ' : ' + str(value)) itemMenu.addField('DELETE', lambda: self.__deleteItem(item.id)) itemMenu.addField('UPDATE', lambda: self.__updateItem(item)) itemMenu.addField('Return to prev menu', lambda: self.__supportCUIFunc()) except Exception as err: itemMenu.setError(str(err)) itemMenu.run(False)
def __getItems(self): itemsMenu = CUI(self.instance.__name__ + 's') self.itemsCurrentMenu[0] = itemsMenu try: if self.page < math.ceil( self.Controller.getCount() / self.per_page): itemsMenu.addField( 'NEXT', lambda: self.__changePageParams( self.page + 1, self.per_page)) if self.page > 1: itemsMenu.addField( 'PREV', lambda: self.__changePageParams( self.page - 1, self.per_page)) entities = self.Controller.getRange(self.page, self.per_page) for entity in entities: if 'name' in self.Controller.getModelKeys(): itemsMenu.addField(f"<{entity.id}> {entity.name}", lambda id=entity.id: self.__getItem(id)) else: itemsMenu.addField(f"<{entity.id}>", lambda id=entity.id: self.__getItem(id)) except Exception as err: itemsMenu.setError(str(err)) itemsMenu.run('Return to main menu')
def __getClient(self, id: int): clientMenu = CUI('Client menu') self.currentMenu[1] = clientMenu try: client: Client = self.clientController.getById(id) values = client.getValues().split(',') keys = client.getKeys().split(',') for i in range(len(keys)): clientMenu.addField(keys[i] + ' : ' + values[i]) clientMenu.addField('DELETE', lambda: self.__deleteClient(client.id)) clientMenu.addField('UPDATE', lambda: self.__updateClient(client.id)) clientMenu.addField('Return to prev menu', lambda: self.__supportCUIFunc()) except Exception as err: clientMenu.setError(str(err)) clientMenu.run(False)
from bases import session from entityView import EntityView from CUI.cui import CUI from models.books import Book from models.exemplars import Exemplar from models.readers import Reader if __name__ == '__main__': cui = CUI('lab3') cui.addField('Books', lambda: EntityView(Book).run()) cui.addField('Exemplars', lambda: EntityView(Exemplar).run()) cui.addField('Readers', lambda: EntityView(Reader).run()) cui.run() session.close()
from views.clientView import ClientView from views.orderView import OrderView from views.categoryView import CategoryView from views.productView import ProductView from views.searchView import SearchView from CUI.cui import CUI if __name__ == '__main__': main = CUI() main.addField('Products', lambda: ProductView().run()) main.addField('Categories', lambda: CategoryView().run()) main.addField('Orders', lambda: OrderView().run()) main.addField('Clients', lambda: ClientView().run()) main.addField('Search', lambda: SearchView().run()) main.run()
class SearchView: def __init__(self): self.currentMenu = None self.page = 1 self.per_page = 10 self.min = None self.max = None self.CUI = CUI("Search menu") self.searchController = SearchController() self.CUI.addField('Search products cost by cost range', lambda: self.__getProductsByCostRange()) self.CUI.addField('Search all client orders', lambda: self.__getClientOrders()) self.CUI.addField('Search all category products', lambda: self.__getCategoryProducts()) 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.__getProductsByCostRange() def __exitMenu(self): self.min = None self.max = None self.page = 1 self.per_page = 10 self.currentMenu.stop() def __getProductsByCostRange(self): searchMenu = CUI('Products') self.currentMenu = searchMenu try: if self.min is None or self.max is None: self.min = int(input('Enter min value: ')) self.max = int(input('Enter max value: ')) if not (isinstance(self.min, int) and isinstance(self.max, int) and self.max > 0 and self.min > 0 and self.max >= self.min): raise Exception('Invalid input') startTime = time.time() allRecords = self.searchController.getProductsByCostRange( self.min, self.max) 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> | Product name | Product cost | Category name') for record in self.searchController.getProductsByCostRange( self.min, self.max, self.page, self.per_page): 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 __getClientOrders(self): searchMenu = CUI('Client Orders') self.currentMenu = searchMenu try: client_id = int(input('Enter client_id: ')) if not (isinstance(client_id, int) and client_id > 0): raise Exception('Invalid input') startTime = time.time() allRecords = self.searchController.getAllClientOrders(client_id) endTime = time.time() searchMenu.setError('\nElapsed time: ' + str(endTime - startTime)[:9] + 's' '\nRows num: ' + str(len(allRecords))) searchMenu.addField('<Order id> | transaction date | taxes_sum') 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 __getCategoryProducts(self): searchMenu = CUI('Cayegory Products') self.currentMenu = searchMenu try: category_id = int(input('Enter category_id: ')) if not (isinstance(category_id, int) and category_id > 0): raise Exception('Invalid input') startTime = time.time() allRecords = self.searchController.getAllCategoryProducts( category_id) endTime = time.time() searchMenu.setError('\nElapsed time: ' + str(endTime - startTime)[:9] + 's' '\nRows num: ' + str(len(allRecords))) searchMenu.addField( '<Product id> | Product name | Product cost | Manufacturer') for record in allRecords: searchMenu.addField( f"<{record[0]}> {record[1]} {record[2]} {record[3]}") except Exception as err: searchMenu.setError(str(err)) searchMenu.run('Return to prev menu')
def __getClientOrders(self): searchMenu = CUI('Client Orders') self.currentMenu = searchMenu try: client_id = int(input('Enter client_id: ')) if not (isinstance(client_id, int) and client_id > 0): raise Exception('Invalid input') startTime = time.time() allRecords = self.searchController.getAllClientOrders(client_id) endTime = time.time() searchMenu.setError('\nElapsed time: ' + str(endTime - startTime)[:9] + 's' '\nRows num: ' + str(len(allRecords))) searchMenu.addField('<Order id> | transaction date | taxes_sum') 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 __getProductsByCostRange(self): searchMenu = CUI('Products') self.currentMenu = searchMenu try: if self.min is None or self.max is None: self.min = int(input('Enter min value: ')) self.max = int(input('Enter max value: ')) if not (isinstance(self.min, int) and isinstance(self.max, int) and self.max > 0 and self.min > 0 and self.max >= self.min): raise Exception('Invalid input') startTime = time.time() allRecords = self.searchController.getProductsByCostRange( self.min, self.max) 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> | Product name | Product cost | Category name') for record in self.searchController.getProductsByCostRange( self.min, self.max, self.page, self.per_page): 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 __getCategoryProducts(self): searchMenu = CUI('Cayegory Products') self.currentMenu = searchMenu try: category_id = int(input('Enter category_id: ')) if not (isinstance(category_id, int) and category_id > 0): raise Exception('Invalid input') startTime = time.time() allRecords = self.searchController.getAllCategoryProducts( category_id) endTime = time.time() searchMenu.setError('\nElapsed time: ' + str(endTime - startTime)[:9] + 's' '\nRows num: ' + str(len(allRecords))) searchMenu.addField( '<Product id> | Product name | Product cost | Manufacturer') for record in allRecords: searchMenu.addField( f"<{record[0]}> {record[1]} {record[2]} {record[3]}") except Exception as err: searchMenu.setError(str(err)) searchMenu.run('Return to prev menu')
def __getClients(self): clientsMenu = CUI('Clients') self.currentMenu[0] = clientsMenu try: if self.page < math.ceil( self.clientController.getCount() / self.per_page): clientsMenu.addField( 'NEXT', lambda: self.__changePageParams( self.page + 1, self.per_page)) if self.page > 1: clientsMenu.addField( 'PREV', lambda: self.__changePageParams( self.page - 1, self.per_page)) clients = self.clientController.getAll(self.page, self.per_page) for client in clients: clientsMenu.addField(f"<{client.id}> {client.name}", lambda id=client.id: self.__getClient(id)) except Exception as err: clientsMenu.setError(str(err)) clientsMenu.run('Return to main menu')
class ClientView: def __init__(self): self.currentMenu = [None, None] self.page = 1 self.per_page = 10 self.CUI = CUI("Client model menu") self.clientController = ClientController() self.CUI.addField('Add Client', lambda: self.__addClient()) self.CUI.addField('Generate rows', lambda: self.__generateRows()) self.CUI.addField('Clients', lambda: self.__getClients()) 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.clientController.generateRows(rowsNum) self.CUI.setError(' Rows generated! Elapsed time: ' + time) except Exception as error: self.CUI.setError(str(error)) def __addClient(self): try: result = self.clientController.add() if isinstance(result, bool) and not result: raise Exception('Inccorect values') else: self.CUI.setError('New Client 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.__getClients() def __getClients(self): clientsMenu = CUI('Clients') self.currentMenu[0] = clientsMenu try: if self.page < math.ceil( self.clientController.getCount() / self.per_page): clientsMenu.addField( 'NEXT', lambda: self.__changePageParams( self.page + 1, self.per_page)) if self.page > 1: clientsMenu.addField( 'PREV', lambda: self.__changePageParams( self.page - 1, self.per_page)) clients = self.clientController.getAll(self.page, self.per_page) for client in clients: clientsMenu.addField(f"<{client.id}> {client.name}", lambda id=client.id: self.__getClient(id)) except Exception as err: clientsMenu.setError(str(err)) clientsMenu.run('Return to main menu') def __updateClient(self, id: int): if self.clientController.update(id): self.currentMenu[1].stop() self.__getClient(id) else: self.currentMenu[1].setError('Incorrect update values') def __deleteClient(self, id: int): self.clientController.delete(id) self.currentMenu[1].stop() self.__supportCUIFunc() def __supportCUIFunc(self): self.currentMenu[1].stop() self.__changePageParams(self.page, self.per_page) def __getClient(self, id: int): clientMenu = CUI('Client menu') self.currentMenu[1] = clientMenu try: client: Client = self.clientController.getById(id) values = client.getValues().split(',') keys = client.getKeys().split(',') for i in range(len(keys)): clientMenu.addField(keys[i] + ' : ' + values[i]) clientMenu.addField('DELETE', lambda: self.__deleteClient(client.id)) clientMenu.addField('UPDATE', lambda: self.__updateClient(client.id)) clientMenu.addField('Return to prev menu', lambda: self.__supportCUIFunc()) except Exception as err: clientMenu.setError(str(err)) clientMenu.run(False)
def __getOrders(self): ordersMenu = CUI('Order') self.currentMenu[0] = ordersMenu try: if self.page < math.ceil( self.orderController.getCount() / self.per_page): ordersMenu.addField( 'NEXT', lambda: self.__changePageParams( self.page + 1, self.per_page)) if self.page > 1: ordersMenu.addField( 'PREV', lambda: self.__changePageParams( self.page - 1, self.per_page)) orders = self.orderController.getAll(self.page, self.per_page) for order in orders: ordersMenu.addField(f"<{order.id}> {order.transaction_date}", lambda id=order.id: self.__getOrder(id)) except Exception as err: ordersMenu.setError(str(err)) ordersMenu.run('Return to main menu')
from db import session from entityView import EntityView from CUI.cui import CUI from models.client import Client from models.order import Order from models.category import Category from models.product import Product if __name__ == '__main__': cui = CUI('lab3') cui.addField('Clients', lambda: EntityView(Client).run()) cui.addField('Orders', lambda: EntityView(Order).run()) cui.addField('Categories', lambda: EntityView(Category).run()) cui.addField('Product', lambda: EntityView(Product).run()) cui.run() session.close()
def __getOrder(self, id: int): orderMenu = CUI('Order menu') self.currentMenu[1] = orderMenu try: order: Order = self.orderController.getById(id) values = order.getValues().split(',') keys = order.getKeys().split(',') for i in range(len(keys)): orderMenu.addField(keys[i] + ' : ' + values[i]) orderMenu.addField('DELETE', lambda: self.__deleteOrder(order.id)) orderMenu.addField('UPDATE', lambda: self.__updateOrder(order.id)) orderMenu.addField('Return to prev menu', lambda: self.__supportCUIFunc()) except Exception as err: orderMenu.setError(str(err)) orderMenu.run(False)