Example #1
0
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
Example #2
0
    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)
Example #3
0
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)
Example #4
0
# товары с истёкшим сроком годности, метод должен возвращать список товаров 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())
Example #5
0
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)
Example #6
0
 def setUp(self):
     self.goods_list = GoodInfoList([])
     self.goods_list.add_from_file('goods-test.info')
Example #7
0
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]), 'Товар: Цена: Количество: Произведен: '
            'Поставка: Срок годности  дней')
Example #8
0
# если таких элементов несколько верните список 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():