from apollo_main_db.apollo.models import ApolloMarket from smelog.factory import BoundLogger from update_market_vendors.config import Config from update_market_vendors.constants import Vendor from update_market_vendors.main_db import session_scope from update_market_vendors.masker import set_vendor, remove_vendor from update_market_vendors.vendors import get_markets_by_vendor def handler(config: Config, logger: BoundLogger): with session_scope() as session: markets = session.query(ApolloMarket).all() codes = [m.code for m in markets] vendors_to_allowed_markets = { vendor: get_markets_by_vendor(vendor)(config, logger, codes) for vendor in Vendor } updated_markets = [] for market in markets: vendors_flag = market.vendors code = market.code for vendor, markets_result in vendors_to_allowed_markets.items(): allowed_markets, skipped_markets = markets_result if code not in skipped_markets: update_func = set_vendor if code in allowed_markets else remove_vendor vendors_flag = update_func(vendor, vendors_flag) if vendors_flag != market.vendors: market.vendors = vendors_flag updated_markets.append(code) session.commit() logger.info(f"Allowed vendors were successfully updated for {len(updated_markets)}/{len(codes)} markets: " f"{updated_markets}") return {}