"""Static Store data.""" import csv import pkg_resources CURRENT_CSV_FILE = pkg_resources.resource_filename( 'abacus_common_data', 'data/csv/stores.csv') class Store: """Store class. Datasource: snowflake's DIM_STORE.""" store_map = {} def __init__(self, store_id): """Find Store by id. Raises KeyError on unknown id.""" Store._load_csv_data() self.store = Store._get_data(store_id) @staticmethod def parse_csv(file_path): """Build a keyed dict of Store data.""" store_map = {} with open(CURRENT_CSV_FILE, encoding='utf8') as csv_file: csv_reader = csv.reader(csv_file) next(csv_reader, None) for row in csv_reader: store_id = int(row[0]) store_name = row[1] store_map[store_id] = { 'store_id': store_id, 'store_name': store_name } return store_map @classmethod def _get_data(cls, store_id): """Force a key error if not found.""" return cls.store_map[store_id] @classmethod def _load_csv_data(cls): """Initialize the class, loading data in from CSV file.""" if cls.store_map: return cls.store_map = Store.parse_csv(CURRENT_CSV_FILE) @property def store_id(self): """Store id.""" return self.store.get('store_id') @property def store_name(self): """Store name.""" return self.store.get('store_name') @classmethod def list_all_stores(cls): """Return an array of all Stores.""" Store._load_csv_data() list_of_types = [] for _, store in cls.store_map.items(): list_of_types.append(store) return list_of_types