105 lines
4.4 KiB
Python
105 lines
4.4 KiB
Python
from argparse import ArgumentParser
|
|
import logging
|
|
|
|
from bareket import Bareket
|
|
from mahsaneiHashook import MahsaneiHashook
|
|
from dor_alon import DorAlon
|
|
from freshmarket import Freshmarket
|
|
from hazi_hinam import HaziHinam
|
|
from keshet import Keshet
|
|
from promotion import main_latest_promos, get_promos_by_name
|
|
from stop_market import StopMarket
|
|
from store_utils import get_all_deals, get_store_id
|
|
from tiv_taam import TivTaam
|
|
from utils import RESULTS_DIRNAME, RAW_FILES_DIRNAME, get_products_prices
|
|
from supermarket_chain import SupermarketChain
|
|
from shufersal import ShuferSal
|
|
from co_op import CoOp
|
|
from victory import Victory
|
|
from yohananof import Yohananof
|
|
from zol_vebegadol import ZolVebegadol
|
|
from rami_levi import RamiLevi
|
|
from osher_ad import OsherAd
|
|
from pathlib import Path
|
|
|
|
# TODO: fix problem of left-to-right printing
|
|
|
|
Path(RESULTS_DIRNAME).mkdir(exist_ok=True)
|
|
Path(RAW_FILES_DIRNAME).mkdir(exist_ok=True)
|
|
|
|
chains = ShuferSal, CoOp, ZolVebegadol, RamiLevi, OsherAd, Freshmarket, TivTaam, HaziHinam, Keshet, StopMarket, \
|
|
Yohananof, DorAlon, MahsaneiHashook, Bareket, Victory
|
|
|
|
chain_dict = {repr(chain): chain() for chain in chains}
|
|
|
|
|
|
if __name__ == '__main__':
|
|
parser = ArgumentParser()
|
|
parser.add_argument('--promos',
|
|
help="generates a promos_{store_id}.log file with all the promotions in the requested store",
|
|
metavar='store_id',
|
|
nargs=1,
|
|
type=SupermarketChain.store_id_type,
|
|
)
|
|
parser.add_argument('--find_promos_by_name',
|
|
help="prints all promos containing the given promo_name in the given store",
|
|
metavar=('store_id', 'promo_name'),
|
|
nargs=2,
|
|
# type=store_id_type, # TODO: add type-checking of first parameter
|
|
)
|
|
parser.add_argument('--price',
|
|
help='prints all products that contain the given name in the requested store',
|
|
metavar=('store_id', 'product_name'),
|
|
nargs=2,
|
|
)
|
|
parser.add_argument('--find_store_id',
|
|
help='prints all Shufersal stores within a city. Input should be a name of a city in Hebrew',
|
|
metavar='city',
|
|
nargs=1,
|
|
)
|
|
# parser.add_argument('--all_deals',
|
|
# action='store_true',
|
|
# )
|
|
parser.add_argument('--load_prices',
|
|
help='boolean flag representing whether to load an existing price XML file',
|
|
action='store_true',
|
|
)
|
|
parser.add_argument('--load_promos',
|
|
help='boolean flag representing whether to load an existing promo XML file',
|
|
action='store_true',
|
|
)
|
|
parser.add_argument('--load_stores',
|
|
help='boolean flag representing whether to load an existing stores XML file',
|
|
action='store_true',
|
|
)
|
|
parser.add_argument('--chain',
|
|
required=True,
|
|
help='The name of the requested chain',
|
|
choices=chain_dict.keys(),
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
chain: SupermarketChain = chain_dict[args.chain]
|
|
if args.promos:
|
|
arg_store_id = int(args.promos[0])
|
|
|
|
logger = logging.getLogger()
|
|
logger.setLevel(logging.INFO)
|
|
handler = logging.FileHandler(filename=f'{RESULTS_DIRNAME}/{args.chain}_promos_{arg_store_id}.log', mode='w',
|
|
encoding='utf-8')
|
|
logger.addHandler(handler)
|
|
main_latest_promos(store_id=arg_store_id, load_xml=args.load_prices, logger=logger, chain=chain,
|
|
load_promos=args.load_promos)
|
|
|
|
elif args.price:
|
|
get_products_prices(chain, store_id=args.price[0], load_xml=args.load_prices, product_name=args.price[1])
|
|
|
|
elif args.find_store_id:
|
|
arg_city = args.find_store_id[0]
|
|
get_store_id(city=arg_city, load_xml=args.load_stores, chain=chain)
|
|
|
|
elif args.find_promos_by_name:
|
|
arg_store_id = int(args.find_promos_by_name[0])
|
|
get_promos_by_name(store_id=arg_store_id, chain=chain, promo_name=args.find_promos_by_name[1],
|
|
load_prices=args.load_prices, load_promos=args.load_promos)
|