def process_data(cls, content, data, small, large, ignore, free_provider, free_shipment, discount_limit): """Processes all data set and applies necessary logic. :param content: :param data: :param small: :param large: :param ignore: :param free_provider: :param free_shipment: :param discount_limit: :return:list: """ result = [] l_discount = {} for item in content: item = item.split() if not ShipmentValidator.validate_line_format(item, data): item.append(ignore) if small in item and ignore not in item: item.append(ShipmentHelper.get_lowest_price(data)) result.append(item) for item in result: if large in item and free_provider in item: month = datetime.datetime.strptime(item[0], '%Y-%m-%d').month try: l_discount[month].append(item[0]) except KeyError: l_discount[month] = [item[0]] l_discount['discount_{}'.format(month)] = False if len(l_discount[month] ) == 3 and not l_discount['discount_{}'.format(month)]: item.append(free_shipment) l_discount['discount_{}'.format(month)] = True else: for size in ShipmentHelper.get_package_sizes(data): if size in item: for provider in ShipmentHelper.get_providers(data): if provider in item: price = ShipmentHelper.get_price( provider, size, data) item.append(price) else: for size in ShipmentHelper.get_package_sizes(data): if size != small and size in item: for provider in ShipmentHelper.get_providers(data): if provider in item: item.append( ShipmentHelper.get_price( provider, size, data)) result = cls.append_discount(result, data, ignore, discount_limit) return result
def test_get_package_sizes(self): sizes = ShipmentHelper.get_package_sizes(DATA) all_sizes = True for size in sizes: if size not in ALLOWED_SIZES: all_sizes = False self.assertEqual(len(sizes), 3) self.assertTrue(all_sizes)