def get_goods_list(): file_path = os.path.abspath(input('Введите путь к файлу:').strip('"\'')) if not os.path.exists(file_path): print('Такого файла нет') logging.error('Нет файла {}'.format(file_path)) elif not os.path.isfile(file_path): print('Зто не файл') logging.error('{} - не файл'.format(file_path)) else: shutil.copy(file_path, 'data') goods_list = GoodInfoList() goods_list.add_from_file(file_path) return goods_list
def setUp(self): """ setUp function for set data """ with open("config_script.json", "r") as json_data: config_data = json.load(json_data) logging.basicConfig(filename=config_data["filename_logging"], filemode=config_data["filemode_logging"], level=config_data["level_logging"], format=config_data["format_logging"]) self.database = DB_Worker() self.info_list = GoodInfoList() self.file_goods = FileWork() self.file_data = self.file_goods.select_path_file("test") if len(self.file_data) > 0: self.info_list.get_from_file(self.file_data)
def main(): parser = argparse.ArgumentParser() parser.add_argument('-rname', default='goods2.info') parser.add_argument('-wname') namespace = parser.parse_args() print('---------------- Проблемы при считывании файла --------------') log_rep.info( '---------------- Проблемы при считывании файла --------------') goods_info_list = GoodInfoList() goods_info_list.read_file(namespace.rname) print('----------------- Вывод информации о товарах ---------------') log_rep.info( '----------------- Вывод информации о товарах ---------------') msg = "Общее количество товаров - {total_count}" \ .format(total_count=len(goods_info_list)) print(msg) log_rep.info(msg) msg = "Средняя цена товара - {average_cost}" \ .format(average_cost=goods_info_list.average_price()) print(msg) log_rep.info(msg) for element in goods_info_list.most_expensive_products(): msg = "Самый дорогой товар - {good_name}, Цена - {good_cost}" \ .format(good_name=element.product_name, good_cost=element.cost_product) print(msg) log_rep.info(msg) for element in goods_info_list.ending_products(): msg = "Заканчивается товар - {good_name}, Осталось - {good_cost}" \ .format(good_name=element.product_name, good_cost=element.cost_product) print(msg) log_rep.info(msg) if namespace.wname: print('---------------- Проблемы при записи файла --------------') log_rep.info( '---------------- Проблемы при записи файла --------------') goods_info_list.write_file(namespace.wname)
# товары с истёкшим сроком годности, метод должен возвращать список товаров GoodInfoList # добавьте возможность получения элемента по ключу good_name в GoodInfoList # изменив метод __getitem__() # если таких элементов несколько верните список GoodInfoList # Добавьте в модуль reporter пример демонстрации новых возможностей программы # Для проверки используйте файл, приложенный к заданию goods2.info # Данные в файле находятся в в формате: # Имя товара:Цена:Количество:Дата поставки:Время хранения(в днях) from good_info import GoodInfoList if __name__ == "__main__": goods_info_list = GoodInfoList() goods_info_list.read_file('goods2_test.info') print('------------------- Содержимое файла -----------------') print(goods_info_list) print() print('Сортировка по name и по убыванию') goods_info_list.sort('name', True) for element in goods_info_list.goods_list: print(element) print() print('Cреднее отклонение для всех цен товаров') print(goods_info_list.get_std())
class GoodInfoListTest(unittest.TestCase): def form_expensive_list_goods(self): """ Function form list with most expensive goods :return: function return GoodInfoList with most expensive sort goods """ self.database.truncate_all_tables() self.database.add( GoodInfo("рыба мороженая, Кета 1кг", "400", "5", "2020-12-30", "90", "2020-12-30")) most_expensive_test_list = self.database.get_all_goods() return most_expensive_test_list def form_cheapset_list_goods(self): """ Function form list with cheapset goods :return: function return GoodInfoList with most cheapset sort goods """ self.database.truncate_all_tables() list_with_object_cheapset_test = [ GoodInfo('макароны Макфа,рожки', '30', '7', '2020-12-30', '360', '2020-12-30'), GoodInfo('макароны Макфа,спагетти', '30', '10', '2020-12-30', '360', '2020-12-30') ] for good in list_with_object_cheapset_test: self.database.add(good) most_cheapset_test_list = self.database.get_all_goods() return most_cheapset_test_list def form_ending_list_goods(self): """ Function form list with ending goods :return: function return GoodInfoList with most ending sort goods """ self.database.truncate_all_tables() list_with_objects_ending_test = [ GoodInfo('вермишель Макфа 1кг', '45', '2', '2020-12-30', '720', '2020-12-30') ] for good in list_with_objects_ending_test: self.database.add(good) list_with_ending_goods = self.database.get_all_goods() return list_with_ending_goods def setUp(self): """ setUp function for set data """ with open("config_script.json", "r") as json_data: config_data = json.load(json_data) logging.basicConfig(filename=config_data["filename_logging"], filemode=config_data["filemode_logging"], level=config_data["level_logging"], format=config_data["format_logging"]) self.database = DB_Worker() self.info_list = GoodInfoList() self.file_goods = FileWork() self.file_data = self.file_goods.select_path_file("test") if len(self.file_data) > 0: self.info_list.get_from_file(self.file_data) def tearDown(self): """ Execute after execute test """ self.database.truncate_all_tables() def test_get_list_ending_goods(self): """ Function test get list with ending goods """ ending_goods_test = self.info_list.get_list_ending_goods() ending_goods_test_list = self.form_ending_list_goods() self.assertEqual(ending_goods_test, ending_goods_test_list) def test_get_list_cheapset_goods(self): """ Function test get list with cheapset goods """ cheapset_goods_test = self.info_list.\ get_list_with_cheap_goods() most_cheapset_test = self.form_cheapset_list_goods() self.assertEqual(cheapset_goods_test, most_cheapset_test) def test_get_list_most_expensive(self): """ Function test get list with most expensive goods """ expensive_goods_test = self.info_list.get_list_most_expensive() most_expensive_test = self.form_expensive_list_goods() self.assertEqual(expensive_goods_test, most_expensive_test) def test_product_buy(self): """ Function test product buy """ result_buy = self.info_list.product_buy("соль 1 кг", 5) self.assertEqual(result_buy, 175) def test_product_buy_more_then_have(self): """ Function test product buy more then have """ result_buy = self.info_list.product_buy("соль 1 кг", 50) self.assertFalse(result_buy) def test_product_buy_with_not_exists_name(self): """ Function test product buy with not exists name """ result_buy = self.info_list.product_buy("Говядина Немецкая 2кг", 3) self.assertFalse(result_buy) def test_product_buy_missing_goods(self): """ Function test product buy missings goods """ result_buy = self.info_list.product_buy("хлеб серый хлебозавод", 3) self.assertFalse(result_buy) def test_add_without_name(self): """ Function test product buy without name """ good = GoodInfo("", "30", "40", "2020-12-30", "14", "2020-12-30") check_product_data = self.database.add(good) self.assertFalse(check_product_data) def test_add_with_not_right_shelf_life(self): """ Function test product buy not right shelf life """ good = GoodInfo("яйцо 1 кат.", "-30", "40", "2020-12-30", "-14", "2020-12-30") check_product_data = self.database.add(good) self.assertFalse(check_product_data) def test_add_with_end_shelf_life(self): """ Function test add with end shelf life """ good = GoodInfo("яйцо 1 кат.", "-30", "40", "2020-12-1", "3", "2020-12-1") check_product_data = self.database.add(good) self.assertFalse(check_product_data) def test_add_with_negative_price(self): """ Function test add with negative price """ good = GoodInfo("яйцо 1 кат.", "-30", "40", "2020-12-30", "14", "2020-12-30") check_product_data = self.database.add(good) self.assertFalse(check_product_data) def test_add_with_negative_amount(self): """ Function test add with negative amount """ good = GoodInfo("яйцо 1 кат.", "30", "-40", "2020-12-30", "14", "2020-12-30") check_product_data = self.database.add(good) self.assertFalse(check_product_data) def test_remove(self): """ Function test remove of GoodInfoList """ test_remove = self.info_list.remove("сахар 1кг") self.assertEqual(test_remove, "сахар 1кг") def test_remove_expensive(self): """ Function test remove expensive of GoodInfoList """ test_remove_expensive = self.info_list.remove_expensive() self.assertTrue(test_remove_expensive) def test_get_std(self): """ Function test standart deviation """ std = self.info_list.get_std() self.assertEqual(std, 111.08728376994648) def test_amount_value(self): """ Function test amount value """ dict_with_value = self.info_list.get_value_info() self.assertEqual(dict_with_value['amount'], 26) def test_mean_value(self): """ Function test mean value """ dict_with_value = self.info_list.get_value_info() print(dict_with_value["amount"]) self.assertEqual(dict_with_value['mean'], 135.0)
def setUp(self): self.goods_list = GoodInfoList([]) self.goods_list.add_from_file('goods-test.info')
class GoodInfoTest(unittest.TestCase): def setUp(self): self.goods_list = GoodInfoList([]) self.goods_list.add_from_file('goods-test.info') def test_total(self): self.assertEqual(len(self.goods_list), 46) def test_different(self): self.assertEqual(len(self.goods_list['морковь 1кг']), 2) def test_mean(self): self.assertEqual(self.goods_list.get_mean(), 98.50) def test_std(self): self.assertEqual(self.goods_list.get_std(), 95.37965075307089) def test_expensive(self): self.assertEqual( self.goods_list.get_expensive()[0], GoodInfo('рыба мороженая, Кета 1кг', 400.0, 5, '2020-12-30', '2020-12-30', 90)) def test_ending(self): self.assertEqual( self.goods_list.get_ending()[0], GoodInfo('пирожки с картошкой', 30.0, 2, '2020-12-30', '2020-12-30', 7)) def test_sort(self): self.assertEqual( self.goods_list.sort_goods('name')[0], GoodInfo('Чай зеленый Lipton 10 пак.', 60.0, 20, '2020-12-30', '2020-12-30', 1080)) def test_without_name(self): with self.assertRaises(TypeError): self.goods_list.add( GoodInfo(10, 10, '2020-12-30', '2020-12-30', 30)) def test_wrong_expiration(self): self.goods_list.add( GoodInfo('хлеб', 10, 10, '2020-12-30', '2020-12-30', -30)) self.assertNotEqual( self.goods_list[-1], GoodInfo('хлеб', 10, 10, '2020-12-30', '2020-12-30', -30)) def test_add_expired(self): self.goods_list.add( GoodInfo('хлеб', 10, 10, '2020-12-20', '2020-12-30', 3)) self.assertNotEqual( self.goods_list[-1], GoodInfo('хлеб', 10, 10, '2020-12-20', '2020-12-30', 3)) def test_negative_cost(self): self.goods_list.add( GoodInfo('хлеб', -10, 10, '2020-12-30', '2020-12-30', 30)) self.assertNotEqual( self.goods_list[-1], GoodInfo('хлеб', -10, 10, '2020-12-30', '2020-12-30', 30)) def test_negative_count(self): self.goods_list.add( GoodInfo('хлеб', 10, -10, '2020-12-30', '2020-12-30', 30)) self.assertNotEqual( self.goods_list[-1], GoodInfo('хлеб', 10, -10, '2020-12-30', '2020-12-30', 30)) def test_zero_count(self): self.goods_list.add( GoodInfo('хлеб', 10, 0, '2020-12-30', '2020-12-30', 30)) self.assertNotEqual( self.goods_list[-1], GoodInfo('хлеб', 10, 0, '2020-12-30', '2020-12-30', 30)) def test_remove(self): self.goods_list.remove('свинина 1кг') self.assertFalse(self.goods_list['свинина 1кг']) def test_remove_expensive(self): self.assertEqual( str(self.goods_list.remove_expensive()), 'Товар:рыба мороженая, Кета 1кг Цена: 400.0 ' 'Количество: 5 Произведен:2020-12-30 ' 'Поставка: 2020-12-30 Срок годности 90 дней') def test_sell_one(self): self.assertEqual(self.goods_list.sell('говядина 1кг', 1), 250) def test_sell_more(self): self.assertFalse(self.goods_list.sell('говядина 1кг', 100)) def test_sell_not_exist(self): self.assertFalse(self.goods_list.sell('черешня', 1)) def test_sell_absent(self): self.goods_list.sell('баранина 1кг', 10) self.assertFalse(self.goods_list.sell('баранина 1кг', 10)) def test_read_file(self): self.assertEqual(len(self.goods_list), 46) def test_read_empty(self): self.assertNotEqual(str(self.goods_list[-2]), '') def test_read_colons(self): self.assertNotEqual( str(self.goods_list[-1]), 'Товар: Цена: Количество: Произведен: ' 'Поставка: Срок годности дней')
# если таких элементов несколько верните список GoodInfoList # Добавьте в модуль reporter пример демонстрации новых возможностей программы # Для проверки используйте файл, приложенный к заданию goods2.info # Данные в файле находятся в в формате: # Имя товара:Цена:Количество:Дата поставки:Время хранения(в днях) """ Модуль reporter предназначен для вывода информации о товарах. """ from good_info import GoodInfoList if __name__ == "__main__": print('---------------- Проблемы про считывании файла --------------') goods_info_list = GoodInfoList() goods_info_list.read_file('goods2.info') print('----------------- Вывод информации о товарах ---------------') print("Общее количество товаров - {total_count}".format( total_count=len(goods_info_list))) print("Средняя цена товара - {average_cost}".format( average_cost=goods_info_list.average_price())) for element in goods_info_list.most_expensive_products(): print("Самый дорогой товар - {good_name}, Цена - {good_cost}".format( good_name=element.product_name, good_cost=element.cost_product)) for element in goods_info_list.ending_products():