import re from importlib import import_module service_lookup = { # MARK_SERVICE_START 'Authentication': 'steam.protobufs.steammessages_auth_pb2', 'AuthenticationSupport': 'steam.protobufs.steammessages_auth_pb2', 'CloudGaming': 'steam.protobufs.steammessages_auth_pb2', 'Broadcast': 'steam.protobufs.steammessages_broadcast_pb2', 'BroadcastClient': 'steam.protobufs.steammessages_broadcast_pb2', 'Chat': 'steam.protobufs.steammessages_chat_pb2', 'ChatRoom': 'steam.protobufs.steammessages_chat_pb2', 'ClanChatRooms': 'steam.protobufs.steammessages_chat_pb2', 'ChatRoomClient': 'steam.protobufs.steammessages_chat_pb2', 'ChatUsability': 'steam.protobufs.steammessages_chat_pb2', 'ChatUsabilityClient': 'steam.protobufs.steammessages_chat_pb2', 'Cloud': 'steam.protobufs.steammessages_cloud_pb2', 'CloudClient': 'steam.protobufs.steammessages_cloud_pb2', 'ContentServerDirectory': 'steam.protobufs.steammessages_contentsystem_pb2', 'Credentials': 'steam.protobufs.steammessages_credentials_pb2', 'DataPublisher': 'steam.protobufs.steammessages_datapublisher_pb2', 'ValveHWSurvey': 'steam.protobufs.steammessages_datapublisher_pb2', 'ContentBuilder': 'steam.protobufs.steammessages_depotbuilder_pb2', 'DeviceAuth': 'steam.protobufs.steammessages_deviceauth_pb2', 'Econ': 'steam.protobufs.steammessages_econ_pb2', 'FriendMessages': 'steam.protobufs.steammessages_friendmessages_pb2', 'FriendMessagesClient': 'steam.protobufs.steammessages_friendmessages_pb2', 'GameNotifications': 'steam.protobufs.steammessages_gamenotifications_pb2', 'GameNotificationsClient': 'steam.protobufs.steammessages_gamenotifications_pb2', 'GameServers': 'steam.protobufs.steammessages_gameservers_pb2', 'GameServerClient': 'steam.protobufs.steammessages_gameservers_pb2', 'Inventory': 'steam.protobufs.steammessages_inventory_pb2', 'InventoryClient': 'steam.protobufs.steammessages_inventory_pb2', 'CommunityLinkFilter': 'steam.protobufs.steammessages_linkfilter_pb2', 'LobbyMatchmakingLegacy': 'steam.protobufs.steammessages_lobbymatchmaking_pb2', 'MarketingMessages': 'steam.protobufs.steammessages_marketingmessages_pb2', 'EconMarket': 'steam.protobufs.steammessages_market_pb2', 'Offline': 'steam.protobufs.steammessages_offline_pb2', 'Parental': 'steam.protobufs.steammessages_parental_pb2', 'ParentalClient': 'steam.protobufs.steammessages_parental_pb2', 'Parties': 'steam.protobufs.steammessages_parties_pb2', 'PartnerApps': 'steam.protobufs.steammessages_partnerapps_pb2', 'PhysicalGoods': 'steam.protobufs.steammessages_physicalgoods_pb2', 'Player': 'steam.protobufs.steammessages_player_pb2', 'PlayerClient': 'steam.protobufs.steammessages_player_pb2', 'PublishedFile': 'steam.protobufs.steammessages_publishedfile_pb2', 'PublishedFileClient': 'steam.protobufs.steammessages_publishedfile_pb2', 'QueuedMatchmaking': 'steam.protobufs.steammessages_qms_pb2', 'QueuedMatchmakingGameHost': 'steam.protobufs.steammessages_qms_pb2', 'Secrets': 'steam.protobufs.steammessages_secrets_pb2', 'Shader': 'steam.protobufs.steammessages_shader_pb2', 'SiteManagerClient': 'steam.protobufs.steammessages_site_license_pb2', 'SiteLicense': 'steam.protobufs.steammessages_site_license_pb2', 'STAR': 'steam.protobufs.steammessages_star_pb2', 'SteamTV': 'steam.protobufs.steammessages_steamtv_pb2', 'StoreBrowse': 'steam.protobufs.steammessages_storebrowse_pb2', 'Store': 'steam.protobufs.steammessages_store_pb2', 'StoreClient': 'steam.protobufs.steammessages_store_pb2', 'TimedTrial': 'steam.protobufs.steammessages_timedtrial_pb2', 'TwoFactor': 'steam.protobufs.steammessages_twofactor_pb2', 'TestSteamClient': 'steam.protobufs.steammessages_unified_test_pb2', 'TestServerFromClient': 'steam.protobufs.steammessages_unified_test_pb2', 'UserAccount': 'steam.protobufs.steammessages_useraccount_pb2', 'AccountLinking': 'steam.protobufs.steammessages_useraccount_pb2', 'EmbeddedClient': 'steam.protobufs.steammessages_useraccount_pb2', 'Video': 'steam.protobufs.steammessages_video_pb2', 'VideoClient': 'steam.protobufs.steammessages_video_pb2', 'FovasVideo': 'steam.protobufs.steammessages_video_pb2', 'HelpRequestLogs': 'steam.protobufs.steammessages_webui_friends_pb2', 'Community': 'steam.protobufs.steammessages_webui_friends_pb2', 'ExperimentService': 'steam.protobufs.steammessages_webui_friends_pb2', 'FriendsList': 'steam.protobufs.steammessages_webui_friends_pb2', 'FriendsListClient': 'steam.protobufs.steammessages_webui_friends_pb2', 'Clan': 'steam.protobufs.steammessages_webui_friends_pb2', 'VoiceChat': 'steam.protobufs.steammessages_webui_friends_pb2', 'VoiceChatClient': 'steam.protobufs.steammessages_webui_friends_pb2', 'WebRTCClient': 'steam.protobufs.steammessages_webui_friends_pb2', 'WebRTCClientNotifications': 'steam.protobufs.steammessages_webui_friends_pb2', 'MobilePerAccount': 'steam.protobufs.steammessages_webui_friends_pb2', 'MobileDevice': 'steam.protobufs.steammessages_webui_friends_pb2', 'Workshop': 'steam.protobufs.steammessages_workshop_pb2', } # MARK_SERVICE_END method_lookup = {} def get_um(method_name, response=False): """Get protobuf for given method name :param method_name: full method name (e.g. ``Player.GetGameBadgeLevels#1``) :type method_name: :class:`str` :param response: whether to return proto for response or request :type response: :class:`bool` :return: protobuf message """ key = (method_name, response) if key not in method_lookup: match = re.findall(r'^([a-z]+)\.([a-z]+)#(\d)?$', method_name, re.I) if not match: return None interface, method, version = match[0] if interface not in service_lookup: return None package = import_module(service_lookup[interface]) service = getattr(package, interface, None) if service is None: return None for method_desc in service.GetDescriptor().methods: name = "%s.%s#%d" % (interface, method_desc.name, 1) method_lookup[(name, False)] = getattr(package, method_desc.input_type.full_name, None) method_lookup[(name, True)] = getattr(package, method_desc.output_type.full_name, None) return method_lookup[key]