def test_get_key_info(): key_data_1 = {"machine_name": "g1", "human_name": 'G1'} key_data_2 = {"machine_name": "g2", "human_name": 'G2'} key_data_3 = {"machine_name": "g3", "human_name": 'G3'} orders = [ { 'product': { 'category': 'bundle' }, 'tpkd_dict': { 'all_tpks': [key_data_1, key_data_2] } }, { 'product': { 'category': 'storefront' }, 'tpkd_dict': { 'all_tpks': [key_data_3] } }, ] assert LibraryResolver._get_key_infos(orders) == [ KeyInfo(Key(key_data_1), 'bundle'), KeyInfo(Key(key_data_2), 'bundle'), KeyInfo(Key(key_data_3), 'storefront'), ]
def test_key_properties(origin_bundle_order): all_tpks = origin_bundle_order['tpkd_dict']['all_tpks'] for key_data in all_tpks: key = Key(key_data) key.key_type key.key_val key.downloads key.in_galaxy_format()
def _get_keys(orders: list, show_revealed_keys: bool) -> List[KeyGame]: keys = [] for details in orders: for tpks in details['tpkd_dict']['all_tpks']: key = Key(tpks) try: key.in_galaxy_format() # minimal validation except Exception as e: logger.warning(f"Error while parsing tpks {repr(e)}: {tpks}", extra={'tpks': tpks}) else: if key.key_val is None or show_revealed_keys: keys.extend(key.key_games) return keys
def _get_key_infos(orders: list) -> List[KeyInfo]: keys = [] for details in orders: for tpks in details['tpkd_dict']['all_tpks']: key = Key(tpks) try: key.in_galaxy_format() # minimal validation product_category = details['product']['category'] except Exception as e: logger.warning(f"Error while parsing tpks {repr(e)}: {tpks}", extra={'tpks': tpks}) continue else: keys.append(KeyInfo(key, product_category)) return keys
def test_key_game_human_name_not_changed(): tpks = { 'machine_name': 'tor', 'human_name': 'Tor Steam', 'key_type_human_name': 'Steam' } assert KeyGame(Key(tpks), 'tor', 'Tor Steam').human_name == 'Tor Steam'
def get_torchlight(orders_keys): for i in orders_keys: if i['product']['machine_name'] == 'torchlight_storefront': torchlight_order = i drm_free = Subproduct(torchlight_order['subproducts'][0]) key = Key(torchlight_order['tpkd_dict']['all_tpks'][0]) return torchlight_order, drm_free, key
def test_key_key_games_one_game(): """Most common case where 1 key == 1 game""" key = Key({ "machine_name": "ww", "human_name": "The Witcher", "key_type_human_name": "Steam Key" }) assert key.key_games == [KeyGame(key, "ww", "The Witcher (Steam Key)")]
def __init__(self, id: str, data: dict): self.id = id self.title = data['title'] self.display_item_machine_name = data['display_item_machine_name'] self.tpkds = [Key(tpkd) for tpkd in data.get('tpkds', [])] self.delivery_methods: t.List[DeliveryMethod] = [ DeliveryMethod(m) for m in data['delivery_methods'] ] self.platforms: t.List[HP] = [HP(p) for p in data['platforms']]
def test_is_multigame_key(human_name, category, blacklist, is_multigame): """Most common case where 1 key == 1 game""" key = Key({ "machine_name": "mock_machine_name", "human_name": human_name, "key_type_human_name": "Steam Key" }) assert LibraryResolver._is_multigame_key(key, category, blacklist) == is_multigame
def test_strip_from_key(sensitive_logger, caplog): key_val = "ABCD-EDGH-IJKL" data = { "machine_name": "dead_space_origin_key", "human_name": "Dead Space Origin Key", "redeemed_key_val": key_val } key = Key(data) logging.error(key) assert key_val not in caplog.text assert key.key_val == key_val # logger doesnt affect actual data
def _get_keys(orders: list, show_revealed_keys: bool) -> List[Key]: keys = [] for details in orders: for tpks in details['tpkd_dict']['all_tpks']: try: key = Key(tpks) except Exception as e: logging.warning(f"Error while parsing keys {e}: {tpks}") else: if key.key_val is None or show_revealed_keys: keys.append(key) return keys
def test_key_split_key_games(): tpks = { "machine_name": "sega", "human_name": "Alpha Protocol, Company of Heroes, Rome: Total War, Hell Yeah! Wrath of the Dead Rabbit", } key = Key(tpks) assert key.key_games == [ KeyGame(key, "sega_0", "Alpha Protocol"), KeyGame(key, "sega_1", "Company of Heroes"), KeyGame(key, "sega_2", "Rome: Total War"), KeyGame(key, "sega_3", "Hell Yeah! Wrath of the Dead Rabbit") ]
def test_split_multigame_key(): tpks = { "machine_name": "sega", "human_name": "Alpha Protocol, Company of Heroes, Rome: Total War, Hell Yeah! Wrath of the Dead Rabbit", } key = Key(tpks) assert LibraryResolver._split_multigame_key(key) == [ KeyGame(key, "sega_0", "Alpha Protocol"), KeyGame(key, "sega_1", "Company of Heroes"), KeyGame(key, "sega_2", "Rome: Total War"), KeyGame(key, "sega_3", "Hell Yeah! Wrath of the Dead Rabbit") ]
def test_strip_extra_game_key(sensitive_logger, caplog): """Extra arguments are used also by sentry.io""" key_val = "ABCD-EDGH-IJKL" data = { "machine_name": "dead_space_origin_key", "human_name": "Dead Space Origin Key", "redeemed_key_val": key_val } key = Key(data) logging.error("some text", extra={'game': key}) for record in caplog.records: if hasattr(record, "game"): assert record.game.key_val != key_val assert record.game._data['redeemed_key_val'] != key_val # logger doesnt affect actual data assert key._data['redeemed_key_val'] == key_val assert key.key_val == key_val
def test_key_key_game_data(): tpks = {"machine_name": "ww", "human_name": "The Witcher, The Witcher 2"} key = Key(tpks) assert tpks == KeyGame(key, 'ww', 'sth')._data