correction, by comments and suggestions of Koren
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -6,3 +6,4 @@ raw_files/
|
|||||||
results/
|
results/
|
||||||
all_deals.py
|
all_deals.py
|
||||||
unknown_items.csv
|
unknown_items.csv
|
||||||
|
desktop.ini
|
8
main.py
8
main.py
@@ -78,19 +78,19 @@ if __name__ == '__main__':
|
|||||||
help='The name of the requested chain',
|
help='The name of the requested chain',
|
||||||
choices=chain_dict.keys(),
|
choices=chain_dict.keys(),
|
||||||
)
|
)
|
||||||
parser.add_argument('--type',
|
parser.add_argument('--filetype',
|
||||||
choices=("excel", "csv"),
|
choices=("excel", "csv"),
|
||||||
default='excel',
|
default='excel',
|
||||||
|
|
||||||
help="a switch flag to set set the output file to a CSV file",
|
help="The extension/type of the promotions output file",
|
||||||
required=False,
|
required=False,
|
||||||
)
|
)
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
file_type = '.xlsx' if not args.type or args.type == 'excel' else '.csv'
|
filetype = 'xlsx' if not args.filetype or args.filetype == 'excel' else 'csv'
|
||||||
chain: SupermarketChain = chain_dict[args.chain]
|
chain: SupermarketChain = chain_dict[args.chain]
|
||||||
if args.promos:
|
if args.promos:
|
||||||
arg_store_id = int(args.promos[0])
|
arg_store_id = int(args.promos[0])
|
||||||
main_latest_promos(store_id=arg_store_id, load_xml=args.load_prices, chain=chain, load_promos=args.load_promos, file_type=file_type)
|
main_latest_promos(store_id=arg_store_id, load_xml=args.load_prices, chain=chain, load_promos=args.load_promos, filetype=filetype)
|
||||||
|
|
||||||
elif args.price:
|
elif args.price:
|
||||||
get_products_prices(chain, store_id=args.price[0], load_xml=args.load_prices, product_name=args.price[1])
|
get_products_prices(chain, store_id=args.price[0], load_xml=args.load_prices, product_name=args.price[1])
|
||||||
|
36
promotion.py
36
promotion.py
@@ -1,18 +1,17 @@
|
|||||||
|
import csv
|
||||||
import re
|
import re
|
||||||
|
import sys
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from typing import Dict, List, Union
|
from typing import Dict, List, Union
|
||||||
import csv
|
|
||||||
import sys
|
|
||||||
from item import Item
|
|
||||||
from utils import (
|
|
||||||
create_items_dict,
|
|
||||||
get_float_from_tag, xml_file_gen,
|
|
||||||
create_bs_object,
|
|
||||||
)
|
|
||||||
from supermarket_chain import SupermarketChain
|
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
|
||||||
|
from item import Item
|
||||||
|
from supermarket_chain import SupermarketChain
|
||||||
|
from utils import (create_bs_object, create_items_dict, get_float_from_tag,
|
||||||
|
xml_file_gen)
|
||||||
|
|
||||||
INVALID_OR_UNKNOWN_PROMOTION_FUNCTION = -1
|
INVALID_OR_UNKNOWN_PROMOTION_FUNCTION = -1
|
||||||
|
|
||||||
PRODUCTS_TO_IGNORE = ['סירים', 'מגבות', 'מגבת', 'מפות', 'פסטיגל', 'ביגי']
|
PRODUCTS_TO_IGNORE = ['סירים', 'מגבות', 'מגבת', 'מפות', 'פסטיגל', 'ביגי']
|
||||||
@@ -45,7 +44,7 @@ class Promotion:
|
|||||||
|
|
||||||
def __init__(self, content: str, start_date: datetime, end_date: datetime, update_date: datetime, items: List[Item],
|
def __init__(self, content: str, start_date: datetime, end_date: datetime, update_date: datetime, items: List[Item],
|
||||||
promo_func: callable, club_id: ClubID, promotion_id: float, max_qty: int,
|
promo_func: callable, club_id: ClubID, promotion_id: float, max_qty: int,
|
||||||
allow_multiple_discounts: bool, reward_type: RewardType, type_file: str = "excel"):
|
allow_multiple_discounts: bool, reward_type: RewardType, filetype: str = "excel"):
|
||||||
self.content: str = content
|
self.content: str = content
|
||||||
self.start_date: datetime = start_date
|
self.start_date: datetime = start_date
|
||||||
self.end_date: datetime = end_date
|
self.end_date: datetime = end_date
|
||||||
@@ -57,7 +56,7 @@ class Promotion:
|
|||||||
self.allow_multiple_discounts = allow_multiple_discounts
|
self.allow_multiple_discounts = allow_multiple_discounts
|
||||||
self.reward_type = reward_type
|
self.reward_type = reward_type
|
||||||
self.promotion_id = promotion_id
|
self.promotion_id = promotion_id
|
||||||
self.type_file = type_file
|
self.filetype = filetype
|
||||||
|
|
||||||
def repr_ltr(self):
|
def repr_ltr(self):
|
||||||
title = self.content
|
title = self.content
|
||||||
@@ -112,7 +111,16 @@ def write_promotions_to_csv(promotions: List[Promotion], output_filename: str) -
|
|||||||
dt.to_excel(xl, index=False, sheet_name="name")
|
dt.to_excel(xl, index=False, sheet_name="name")
|
||||||
|
|
||||||
|
|
||||||
def dict_promos(promos: list, columns: list):
|
def dict_promos(promos: list, columns: list) -> dict:
|
||||||
|
'''dict_promos creates a dictionary of every promo to its place in the xml
|
||||||
|
|
||||||
|
:param promos: list of promos, separated by comma
|
||||||
|
:type promos: list
|
||||||
|
:param columns: columns of the exact place in the xml
|
||||||
|
:type columns: list
|
||||||
|
:return: dictionary of every promo and all the parameters its need
|
||||||
|
:rtype: dict
|
||||||
|
'''
|
||||||
return {col: p for prom in promos for col, p in zip(columns, prom)}
|
return {col: p for prom in promos for col, p in zip(columns, prom)}
|
||||||
|
|
||||||
|
|
||||||
@@ -250,7 +258,7 @@ def is_valid_promo(end_time: datetime, description) -> bool:
|
|||||||
|
|
||||||
|
|
||||||
def main_latest_promos(
|
def main_latest_promos(
|
||||||
store_id: int, load_xml: bool, chain: SupermarketChain, load_promos: bool, file_type: str) -> None:
|
store_id: int, load_xml: bool, chain: SupermarketChain, load_promos: bool, filetype: str) -> None:
|
||||||
"""
|
"""
|
||||||
This function writes to a CSV file the available promotions in a store with a given id sorted by their update date.
|
This function writes to a CSV file the available promotions in a store with a given id sorted by their update date.
|
||||||
|
|
||||||
@@ -263,7 +271,7 @@ def main_latest_promos(
|
|||||||
promotions: List[Promotion] = get_available_promos(chain, store_id, load_xml, load_promos)
|
promotions: List[Promotion] = get_available_promos(chain, store_id, load_xml, load_promos)
|
||||||
promotions.sort(key=lambda promo: (max(promo.update_date.date(), promo.start_date.date()), promo.start_date -
|
promotions.sort(key=lambda promo: (max(promo.update_date.date(), promo.start_date.date()), promo.start_date -
|
||||||
promo.end_date), reverse=True)
|
promo.end_date), reverse=True)
|
||||||
ex_file = f'results/{repr(type(chain))}_promos_{store_id}{file_type}'
|
ex_file = f'results/{repr(type(chain))}_promos_{store_id}.{filetype}'
|
||||||
write_promotions_to_csv(promotions, ex_file)
|
write_promotions_to_csv(promotions, ex_file)
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user