pysteam-client 1.4.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pysteam_client-1.4.6/LICENSE +19 -0
- pysteam_client-1.4.6/PKG-INFO +225 -0
- pysteam_client-1.4.6/README.rst +194 -0
- pysteam_client-1.4.6/pyproject.toml +190 -0
- pysteam_client-1.4.6/scripts/__init__.py +7 -0
- pysteam_client-1.4.6/scripts/pb_compile.py +111 -0
- pysteam_client-1.4.6/scripts/pb_fetch.py +104 -0
- pysteam_client-1.4.6/scripts/pb_gen_enums.py +100 -0
- pysteam_client-1.4.6/scripts/pb_postprocess.py +71 -0
- pysteam_client-1.4.6/scripts/pb_services.py +69 -0
- pysteam_client-1.4.6/scripts/pb_update.py +36 -0
- pysteam_client-1.4.6/scripts/vcr_webapi.py +154 -0
- pysteam_client-1.4.6/scripts/vcr_webauth.py +229 -0
- pysteam_client-1.4.6/steam/__init__.py +13 -0
- pysteam_client-1.4.6/steam/client/__init__.py +698 -0
- pysteam_client-1.4.6/steam/client/builtins/__init__.py +17 -0
- pysteam_client-1.4.6/steam/client/builtins/apps.py +430 -0
- pysteam_client-1.4.6/steam/client/builtins/friends.py +232 -0
- pysteam_client-1.4.6/steam/client/builtins/gameservers.py +230 -0
- pysteam_client-1.4.6/steam/client/builtins/leaderboards.py +252 -0
- pysteam_client-1.4.6/steam/client/builtins/unified_messages.py +124 -0
- pysteam_client-1.4.6/steam/client/builtins/user.py +209 -0
- pysteam_client-1.4.6/steam/client/builtins/web.py +158 -0
- pysteam_client-1.4.6/steam/client/cdn.py +987 -0
- pysteam_client-1.4.6/steam/client/gc.py +120 -0
- pysteam_client-1.4.6/steam/client/user.py +169 -0
- pysteam_client-1.4.6/steam/core/__init__.py +0 -0
- pysteam_client-1.4.6/steam/core/cm.py +589 -0
- pysteam_client-1.4.6/steam/core/connection.py +207 -0
- pysteam_client-1.4.6/steam/core/crypto.py +106 -0
- pysteam_client-1.4.6/steam/core/manifest.py +319 -0
- pysteam_client-1.4.6/steam/core/msg/__init__.py +286 -0
- pysteam_client-1.4.6/steam/core/msg/headers.py +189 -0
- pysteam_client-1.4.6/steam/core/msg/structs.py +426 -0
- pysteam_client-1.4.6/steam/core/msg/unified.py +140 -0
- pysteam_client-1.4.6/steam/enums/__init__.py +109 -0
- pysteam_client-1.4.6/steam/enums/base.py +5 -0
- pysteam_client-1.4.6/steam/enums/common.py +1097 -0
- pysteam_client-1.4.6/steam/enums/emsg.py +1986 -0
- pysteam_client-1.4.6/steam/enums/proto.py +4127 -0
- pysteam_client-1.4.6/steam/exceptions.py +49 -0
- pysteam_client-1.4.6/steam/game_servers.py +674 -0
- pysteam_client-1.4.6/steam/globalid.py +93 -0
- pysteam_client-1.4.6/steam/guard.py +669 -0
- pysteam_client-1.4.6/steam/monkey.py +26 -0
- pysteam_client-1.4.6/steam/protobufs/__init__.py +0 -0
- pysteam_client-1.4.6/steam/protobufs/clientmetrics_pb2.py +45 -0
- pysteam_client-1.4.6/steam/protobufs/clientmetrics_pb2.pyi +182 -0
- pysteam_client-1.4.6/steam/protobufs/content_manifest_pb2.py +51 -0
- pysteam_client-1.4.6/steam/protobufs/content_manifest_pb2.pyi +239 -0
- pysteam_client-1.4.6/steam/protobufs/contenthubs_pb2.py +47 -0
- pysteam_client-1.4.6/steam/protobufs/contenthubs_pb2.pyi +156 -0
- pysteam_client-1.4.6/steam/protobufs/encrypted_app_ticket_pb2.py +37 -0
- pysteam_client-1.4.6/steam/protobufs/encrypted_app_ticket_pb2.pyi +47 -0
- pysteam_client-1.4.6/steam/protobufs/enums_clientserver_pb2.py +49 -0
- pysteam_client-1.4.6/steam/protobufs/enums_clientserver_pb2.pyi +3031 -0
- pysteam_client-1.4.6/steam/protobufs/enums_pb2.py +203 -0
- pysteam_client-1.4.6/steam/protobufs/enums_pb2.pyi +2235 -0
- pysteam_client-1.4.6/steam/protobufs/enums_productinfo_pb2.py +39 -0
- pysteam_client-1.4.6/steam/protobufs/enums_productinfo_pb2.pyi +89 -0
- pysteam_client-1.4.6/steam/protobufs/gc_pb2.py +38 -0
- pysteam_client-1.4.6/steam/protobufs/gc_pb2.pyi +84 -0
- pysteam_client-1.4.6/steam/protobufs/htmlmessages_pb2.py +372 -0
- pysteam_client-1.4.6/steam/protobufs/htmlmessages_pb2.pyi +4101 -0
- pysteam_client-1.4.6/steam/protobufs/offline_ticket_pb2.py +36 -0
- pysteam_client-1.4.6/steam/protobufs/offline_ticket_pb2.pyi +50 -0
- pysteam_client-1.4.6/steam/protobufs/steamdatagram_messages_auth_pb2.py +50 -0
- pysteam_client-1.4.6/steam/protobufs/steamdatagram_messages_auth_pb2.pyi +247 -0
- pysteam_client-1.4.6/steam/protobufs/steamdatagram_messages_sdr_pb2.py +149 -0
- pysteam_client-1.4.6/steam/protobufs/steamdatagram_messages_sdr_pb2.pyi +1872 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_accounthardware_pb2.py +122 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_accounthardware_pb2.pyi +872 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_appoverview_pb2.py +52 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_appoverview_pb2.pyi +455 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_auth_pb2.py +161 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_auth_pb2.pyi +1454 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_base_pb2.py +96 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_base_pb2.pyi +1268 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_broadcast_pb2.py +216 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_broadcast_pb2.pyi +2146 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_chat_pb2.py +376 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_chat_pb2.pyi +3944 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_childprocessquery_pb2.py +42 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_childprocessquery_pb2.pyi +100 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_client_objects_pb2.py +194 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_client_objects_pb2.pyi +2480 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientlanp2p_pb2.py +48 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientlanp2p_pb2.pyi +170 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientmetrics_pb2.py +106 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientmetrics_pb2.pyi +964 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientnotificationtypes_pb2.py +131 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientnotificationtypes_pb2.pyi +1132 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_2_pb2.py +270 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_2_pb2.pyi +2720 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_appinfo_pb2.py +78 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_appinfo_pb2.pyi +549 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_friends_pb2.py +116 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_friends_pb2.pyi +1044 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_gameservers_pb2.py +72 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_gameservers_pb2.pyi +601 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_lbs_pb2.py +54 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_lbs_pb2.pyi +271 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_login_pb2.py +68 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_login_pb2.pyi +594 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_mms_pb2.py +96 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_mms_pb2.pyi +892 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_pb2.py +145 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_pb2.pyi +1485 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_ucm_pb2.py +90 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_ucm_pb2.pyi +820 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_uds_pb2.py +74 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_uds_pb2.pyi +543 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_ufs_pb2.py +86 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_ufs_pb2.pyi +657 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_userstats_pb2.py +56 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_userstats_pb2.pyi +270 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_video_pb2.py +48 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientserver_video_pb2.pyi +217 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientsettings_pb2.py +587 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_clientsettings_pb2.pyi +1055 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_cloud_pb2.py +162 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_cloud_pb2.pyi +1530 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_community_pb2.py +179 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_community_pb2.pyi +1689 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_contentsystem_pb2.py +82 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_contentsystem_pb2.pyi +530 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_credentials_pb2.py +62 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_credentials_pb2.pyi +304 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_datapublisher_pb2.py +64 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_datapublisher_pb2.pyi +352 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_depotbuilder_pb2.py +68 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_depotbuilder_pb2.pyi +389 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_deviceauth_pb2.py +122 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_deviceauth_pb2.pyi +628 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_econ_pb2.py +86 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_econ_pb2.pyi +749 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_familygroups_pb2.py +193 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_familygroups_pb2.pyi +1728 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_friendmessages_pb2.py +93 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_friendmessages_pb2.pyi +639 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_gamenetworking_pb2.py +46 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_gamenetworking_pb2.pyi +87 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_gamenetworkingui_pb2.py +47 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_gamenetworkingui_pb2.pyi +225 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_gamenotifications_pb2.py +84 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_gamenotifications_pb2.pyi +481 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_gamerecording_objects_pb2.py +40 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_gamerecording_objects_pb2.pyi +81 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_gamerecording_pb2.py +75 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_gamerecording_pb2.pyi +374 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_gameservers_pb2.py +80 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_gameservers_pb2.pyi +460 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_hiddevices_pb2.py +83 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_hiddevices_pb2.pyi +590 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_inventory_pb2.py +90 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_inventory_pb2.pyi +594 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_linkfilter_pb2.py +52 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_linkfilter_pb2.pyi +144 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_lobbymatchmaking_pb2.py +46 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_lobbymatchmaking_pb2.pyi +91 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_market_pb2.py +44 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_market_pb2.pyi +71 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_marketingmessages_pb2.py +139 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_marketingmessages_pb2.pyi +1181 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_notifications_pb2.py +52 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_notifications_pb2.pyi +203 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_offline_pb2.py +51 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_offline_pb2.pyi +118 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_parental_objects_pb2.py +50 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_parental_objects_pb2.pyi +270 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_parental_pb2.py +113 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_parental_pb2.pyi +692 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_parties_pb2.py +66 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_parties_pb2.pyi +284 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_partnerapps_pb2.py +72 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_partnerapps_pb2.pyi +379 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_player_pb2.py +365 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_player_pb2.pyi +3734 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_publishedfile_pb2.py +247 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_publishedfile_pb2.pyi +2820 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_qms_pb2.py +68 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_qms_pb2.pyi +374 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_remoteclient_discovery_pb2.py +93 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_remoteclient_discovery_pb2.pyi +879 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_remoteclient_pb2.py +111 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_remoteclient_pb2.pyi +1000 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_remoteclient_service_messages_pb2.py +146 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_remoteclient_service_messages_pb2.pyi +1238 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_remoteclient_service_pb2.py +45 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_remoteclient_service_pb2.pyi +8 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_remoteplay_pb2.py +317 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_remoteplay_pb2.pyi +3543 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_secrets_pb2.py +48 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_secrets_pb2.pyi +119 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_shader_pb2.py +72 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_shader_pb2.pyi +365 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_site_license_pb2.py +74 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_site_license_pb2.pyi +354 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_sitelicenseclient_pb2.py +50 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_sitelicenseclient_pb2.pyi +160 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_siteserverui_pb2.py +84 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_siteserverui_pb2.pyi +529 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_star_pb2.py +92 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_star_pb2.pyi +237 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_steamtv_pb2.py +216 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_steamtv_pb2.pyi +2005 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_store_pb2.py +181 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_store_pb2.pyi +1676 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_storebrowse_pb2.py +169 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_storebrowse_pb2.pyi +2131 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_timedtrial_pb2.py +52 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_timedtrial_pb2.pyi +143 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_twofactor_pb2.py +80 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_twofactor_pb2.pyi +590 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_unified_base_pb2.py +42 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_unified_base_pb2.pyi +85 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_unified_test_pb2.py +66 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_unified_test_pb2.pyi +193 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_useraccount_pb2.py +106 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_useraccount_pb2.pyi +840 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_vac_pb2.py +48 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_vac_pb2.pyi +125 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_video_pb2.py +64 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_video_pb2.pyi +220 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_virtualcontroller_pb2.py +58 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_virtualcontroller_pb2.pyi +454 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_workshop_pb2.py +44 -0
- pysteam_client-1.4.6/steam/protobufs/steammessages_workshop_pb2.pyi +62 -0
- pysteam_client-1.4.6/steam/protobufs/steamnetworkingsockets_messages_certs_pb2.py +45 -0
- pysteam_client-1.4.6/steam/protobufs/steamnetworkingsockets_messages_certs_pb2.pyi +155 -0
- pysteam_client-1.4.6/steam/protobufs/steamnetworkingsockets_messages_pb2.py +72 -0
- pysteam_client-1.4.6/steam/protobufs/steamnetworkingsockets_messages_pb2.pyi +638 -0
- pysteam_client-1.4.6/steam/protobufs/steamnetworkingsockets_messages_udp_pb2.py +55 -0
- pysteam_client-1.4.6/steam/protobufs/steamnetworkingsockets_messages_udp_pb2.pyi +272 -0
- pysteam_client-1.4.6/steam/protobufs/test_messages_pb2.py +42 -0
- pysteam_client-1.4.6/steam/protobufs/test_messages_pb2.pyi +112 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_achievements_pb2.py +48 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_achievements_pb2.pyi +90 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_audio_pb2.py +99 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_audio_pb2.pyi +503 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_base_pb2.py +42 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_base_pb2.pyi +58 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_bluetooth_pb2.py +101 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_bluetooth_pb2.pyi +589 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_gamenotes_pb2.py +46 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_gamenotes_pb2.pyi +59 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_gamerecording_pb2.py +234 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_gamerecording_pb2.pyi +2067 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_gamerecordingfiles_pb2.py +64 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_gamerecordingfiles_pb2.pyi +444 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_gamescope_pb2.py +67 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_gamescope_pb2.pyi +286 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_hardwareupdate_pb2.py +77 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_hardwareupdate_pb2.pyi +333 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_leds_pb2.py +85 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_leds_pb2.pyi +438 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_screensaver_pb2.py +49 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_screensaver_pb2.pyi +67 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_sharedjscontext_pb2.py +49 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_sharedjscontext_pb2.pyi +97 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_sleep_pb2.py +67 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_sleep_pb2.pyi +217 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_steamengine_pb2.py +60 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_steamengine_pb2.pyi +197 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_steaminput_pb2.py +160 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_steaminput_pb2.pyi +1484 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_steamos_pb2.py +125 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_steamos_pb2.pyi +788 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_storagedevicemanager_pb2.py +79 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_storagedevicemanager_pb2.pyi +402 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_systemmanager_pb2.py +50 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_systemmanager_pb2.pyi +80 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_transport_pb2.py +48 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_transport_pb2.pyi +63 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_transportvalidation_pb2.py +104 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_transportvalidation_pb2.pyi +525 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_user_pb2.py +50 -0
- pysteam_client-1.4.6/steam/protobufs/webuimessages_user_pb2.pyi +93 -0
- pysteam_client-1.4.6/steam/py.typed +0 -0
- pysteam_client-1.4.6/steam/steamid.py +631 -0
- pysteam_client-1.4.6/steam/utils/__init__.py +98 -0
- pysteam_client-1.4.6/steam/utils/appcache.py +161 -0
- pysteam_client-1.4.6/steam/utils/binary.py +69 -0
- pysteam_client-1.4.6/steam/utils/proto.py +110 -0
- pysteam_client-1.4.6/steam/utils/throttle.py +64 -0
- pysteam_client-1.4.6/steam/utils/web.py +24 -0
- pysteam_client-1.4.6/steam/versions_report/__init__.py +55 -0
- pysteam_client-1.4.6/steam/versions_report/__main__.py +4 -0
- pysteam_client-1.4.6/steam/webapi.py +535 -0
- pysteam_client-1.4.6/steam/webauth.py +495 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Copyright (c) 2015 Rossen Georgiev <rossen@rgp.io>
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
4
|
+
this software and associated documentation files (the "Software"), to deal in
|
|
5
|
+
the Software without restriction, including without limitation the rights to
|
|
6
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
7
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
|
8
|
+
so, subject to the following conditions:
|
|
9
|
+
|
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
|
11
|
+
copies or substantial portions of the Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
19
|
+
SOFTWARE.
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: pysteam-client
|
|
3
|
+
Version: 1.4.6
|
|
4
|
+
Summary: Module for interacting with various Steam features
|
|
5
|
+
Home-page: https://github.com/ValvePython/steam
|
|
6
|
+
License: MIT
|
|
7
|
+
Keywords: valve,steam,steamid,api,webapi,steamcommunity
|
|
8
|
+
Author: Rossen Georgiev
|
|
9
|
+
Author-email: rossen@rgp.io
|
|
10
|
+
Requires-Python: >=3.13.11,<4.0.0
|
|
11
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Natural Language :: English
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Provides-Extra: client
|
|
19
|
+
Requires-Dist: cachetools (>=3.0.0)
|
|
20
|
+
Requires-Dist: gevent (>=1.5.0) ; extra == "client"
|
|
21
|
+
Requires-Dist: gevent-eventemitter (>=2.1) ; extra == "client"
|
|
22
|
+
Requires-Dist: protobuf (>=5.26,<7) ; extra == "client"
|
|
23
|
+
Requires-Dist: pycryptodomex (>=3.7.0)
|
|
24
|
+
Requires-Dist: requests (>=2.9.1)
|
|
25
|
+
Requires-Dist: six (>=1.10.0)
|
|
26
|
+
Requires-Dist: urllib3 (<2)
|
|
27
|
+
Requires-Dist: vdf (>=3.3)
|
|
28
|
+
Project-URL: Repository, https://github.com/H47R15/steam
|
|
29
|
+
Description-Content-Type: text/x-rst
|
|
30
|
+
|
|
31
|
+
steam
|
|
32
|
+
=====
|
|
33
|
+
|
|
34
|
+
Python client for the Steam network — CM protocol, PICS / CDN, WebAuth,
|
|
35
|
+
Web API, Steam Guard, SteamIDs, master-server queries.
|
|
36
|
+
|
|
37
|
+
**This is a fork of** `ValvePython/steam <https://github.com/ValvePython/steam>`_
|
|
38
|
+
maintained under `H47R15/steam <https://github.com/H47R15/steam>`_. The
|
|
39
|
+
upstream project is largely inactive; this fork exists to keep the library
|
|
40
|
+
working against modern Python and current Steam wire protocols.
|
|
41
|
+
|
|
42
|
+
What changed vs. upstream
|
|
43
|
+
-------------------------
|
|
44
|
+
|
|
45
|
+
* **Python 3.13+ only.** Dropped the py2 / py<3.4 compat shims (``six``,
|
|
46
|
+
``six.moves``, ``raw_input``, ``xrange``, ``long``, ``win_inet_pton``,
|
|
47
|
+
``backports.lzma``, ``enum34``, …).
|
|
48
|
+
* **Modern protobuf runtime + regenerated ``_pb2`` files.** Bumped from
|
|
49
|
+
``protobuf==3.20.3`` to ``>=5.26,<7`` and re-ran ``protoc`` (v33.2) against
|
|
50
|
+
fresh SteamDB proto sources. The old per-message
|
|
51
|
+
``_reflection.GeneratedProtocolMessageType`` codegen shrunk ~20× to the
|
|
52
|
+
modern ``_descriptor_pool.AddSerializedFile`` + ``_builder`` pattern
|
|
53
|
+
(``steammessages_base_pb2.py``: 2 200 → 96 lines).
|
|
54
|
+
* **Full ``.pyi`` type stubs** for every ``_pb2`` file via ``mypy-protobuf``
|
|
55
|
+
— ``msg.field`` accesses now type-check under Pylance / pyright.
|
|
56
|
+
* **Poetry-first workflow.** ``pip`` + ``Makefile`` + ``setup.py``
|
|
57
|
+
replaced by a single ``pyproject.toml``; regeneration steps registered as
|
|
58
|
+
``poetry run pb-*`` console scripts (details below).
|
|
59
|
+
* **~50 new proto files** picked up from upstream since the fork was last
|
|
60
|
+
synced (family groups, game recording, remote client, SteamOS webui
|
|
61
|
+
messages, HTML messages, virtual controller, community messages, and
|
|
62
|
+
more). ``steam/enums/proto.py`` grew from 90 → 247 enums.
|
|
63
|
+
* Real latent bug fixes surfaced while porting — e.g. a ``list + map(...)``
|
|
64
|
+
``TypeError`` in ``struct.py``, a tuple-vs-int mismatch in
|
|
65
|
+
``MarketingMessage.flags``, ``hexlify(None)`` in avatar-URL fallback,
|
|
66
|
+
broken ``CookieJar`` iteration in ``WebAuth``.
|
|
67
|
+
|
|
68
|
+
Requirements
|
|
69
|
+
------------
|
|
70
|
+
|
|
71
|
+
* Python **3.13.11** (pinned via ``pyproject.toml``). Any newer 3.13.x is
|
|
72
|
+
fine. Older Pythons are not supported.
|
|
73
|
+
* `Poetry <https://python-poetry.org/>`_ for dependency management.
|
|
74
|
+
* ``protoc`` on ``PATH`` — required only when regenerating the ``_pb2``
|
|
75
|
+
files (``poetry run pb-compile``). Install via ``brew install protobuf``
|
|
76
|
+
on macOS or the equivalent from your distro.
|
|
77
|
+
|
|
78
|
+
Install
|
|
79
|
+
-------
|
|
80
|
+
|
|
81
|
+
Clone the repo and install with poetry:
|
|
82
|
+
|
|
83
|
+
.. code:: bash
|
|
84
|
+
|
|
85
|
+
git clone https://github.com/H47R15/steam.git
|
|
86
|
+
cd steam
|
|
87
|
+
poetry install --with dev --extras client
|
|
88
|
+
|
|
89
|
+
The ``client`` extra pulls in ``gevent`` + ``protobuf`` + ``gevent-eventemitter``
|
|
90
|
+
— required by ``SteamClient`` and CDN. Without it, only the
|
|
91
|
+
``requests``-based subset (WebAPI / WebAuth / SteamID / master-server
|
|
92
|
+
query) is functional.
|
|
93
|
+
|
|
94
|
+
Features
|
|
95
|
+
--------
|
|
96
|
+
|
|
97
|
+
* **SteamClient** — CM protocol client on top of gevent. Login flows
|
|
98
|
+
(password / QR / refresh token), PICS product info, friends list, chat,
|
|
99
|
+
game coordinator hooks.
|
|
100
|
+
* **CDNClient** — content depot downloads with manifest parsing.
|
|
101
|
+
* **WebAuth / MobileWebAuth** — obtain authenticated ``requests.Session``
|
|
102
|
+
cookies for ``store.steampowered.com`` / ``steamcommunity.com``.
|
|
103
|
+
* **WebAPI** — thin wrapper around Steam's ``api.steampowered.com`` that
|
|
104
|
+
introspects the interface catalogue at construction time.
|
|
105
|
+
* **SteamAuthenticator** — enable / disable / verify Steam Guard 2FA.
|
|
106
|
+
* **SteamID** — parse and convert between the 32-bit / 64-bit /
|
|
107
|
+
``STEAM_X:Y:Z`` / community-URL representations.
|
|
108
|
+
* **Master server query protocol** — query masters directly or through
|
|
109
|
+
``SteamClient``.
|
|
110
|
+
|
|
111
|
+
Dev workflow (poetry)
|
|
112
|
+
---------------------
|
|
113
|
+
|
|
114
|
+
All commands run from the repo root.
|
|
115
|
+
|
|
116
|
+
.. code:: bash
|
|
117
|
+
|
|
118
|
+
poetry install --with dev --extras client # install everything
|
|
119
|
+
poetry run pytest # run the test suite (~83 tests, ~1s)
|
|
120
|
+
poetry run pytest -k test_webauth # filter to a subset
|
|
121
|
+
poetry run pytest --tb=short -q # concise output
|
|
122
|
+
|
|
123
|
+
poetry run pylint steam # optional lint pass
|
|
124
|
+
|
|
125
|
+
Regenerating protobufs
|
|
126
|
+
----------------------
|
|
127
|
+
|
|
128
|
+
The ``_pb2.py`` and ``_pb2.pyi`` files under ``steam/protobufs`` are
|
|
129
|
+
generated from ``.proto`` sources under ``protobufs/``. Console scripts:
|
|
130
|
+
|
|
131
|
+
.. code:: bash
|
|
132
|
+
|
|
133
|
+
poetry run pb-fetch # download + normalize .proto files from SteamDB
|
|
134
|
+
poetry run pb-compile # protoc --python_out --mypy_out + post-process
|
|
135
|
+
poetry run pb-services # regenerate steam/core/msg/unified.py service map
|
|
136
|
+
poetry run pb-gen-enums # regenerate steam/enums/proto.py from *_pb2
|
|
137
|
+
|
|
138
|
+
poetry run pb-update # all four in sequence — the usual entry point
|
|
139
|
+
|
|
140
|
+
``pb-fetch`` reads URLs from ``protobuf_list.txt`` (comments and blank
|
|
141
|
+
lines skipped) and downloads them into ``protobufs/``. Locally-maintained
|
|
142
|
+
``.proto`` files (``gc.proto``, ``test_messages.proto``) are set aside via
|
|
143
|
+
``.notouch`` rename before the fetch and restored after.
|
|
144
|
+
|
|
145
|
+
``pb-compile`` wipes ``steam/protobufs/*_pb2.{py,pyi}`` first, then runs a
|
|
146
|
+
single ``protoc`` invocation over every ``.proto``. Post-processing:
|
|
147
|
+
|
|
148
|
+
* ``.py`` — sibling protobuf imports get the ``steam.protobufs.`` prefix
|
|
149
|
+
so runtime import works without ``steam/protobufs/`` on ``sys.path``.
|
|
150
|
+
* ``.pyi`` — ``DESCRIPTOR: _descriptor.Descriptor`` overrides inside each
|
|
151
|
+
message class are stripped (they trip
|
|
152
|
+
``reportIncompatibleVariableOverride`` under types-protobuf 7.34+; the
|
|
153
|
+
parent ``Message`` class's union type is inherited instead).
|
|
154
|
+
|
|
155
|
+
VCR fixtures
|
|
156
|
+
------------
|
|
157
|
+
|
|
158
|
+
Web-facing tests (``test_webapi.py``, ``test_webauth.py``,
|
|
159
|
+
``test_steamid.py``) replay recorded HTTP fixtures from ``vcr/*.yaml`` in
|
|
160
|
+
``RecordMode.NONE`` — no live network, no credentials needed for CI.
|
|
161
|
+
|
|
162
|
+
To regenerate the ``webapi.yaml`` cassette against a fresh Steam API
|
|
163
|
+
response, copy ``.env.example`` to ``.env`` and fill in ``STEAM_API_KEY``
|
|
164
|
+
(see the template for instructions on where to get one), then follow the
|
|
165
|
+
regen recipe at the top of ``tests/test_webapi.py``.
|
|
166
|
+
|
|
167
|
+
The ``webauth_*.yaml`` cassettes are regenerated by
|
|
168
|
+
``tests/generete_webauth_vcr.py`` — needs real Steam credentials at run
|
|
169
|
+
time; run interactively when the anonymized replay drifts from live.
|
|
170
|
+
|
|
171
|
+
Live smoke test
|
|
172
|
+
---------------
|
|
173
|
+
|
|
174
|
+
Beyond the unit suite, the CM handshake / anonymous-login / PICS-fetch
|
|
175
|
+
end-to-end flow can be smoke-tested against live Steam:
|
|
176
|
+
|
|
177
|
+
.. code:: python
|
|
178
|
+
|
|
179
|
+
from steam.client import SteamClient
|
|
180
|
+
|
|
181
|
+
client = SteamClient()
|
|
182
|
+
assert client.anonymous_login()
|
|
183
|
+
resp = client.get_product_info(apps=[553850], timeout=15) # Helldivers 2
|
|
184
|
+
print(resp['apps'][553850]['common']['name'])
|
|
185
|
+
client.logout()
|
|
186
|
+
client.disconnect()
|
|
187
|
+
|
|
188
|
+
Layout
|
|
189
|
+
------
|
|
190
|
+
|
|
191
|
+
.. code::
|
|
192
|
+
|
|
193
|
+
steam/
|
|
194
|
+
├── steam/ # library source
|
|
195
|
+
│ ├── client/ # SteamClient, CDN, builtins/*
|
|
196
|
+
│ ├── core/ # CM protocol, message framing
|
|
197
|
+
│ ├── enums/ # SteamIntEnum wrappers (common.py hand-written,
|
|
198
|
+
│ │ # proto.py auto-generated by pb-gen-enums)
|
|
199
|
+
│ ├── protobufs/ # generated *_pb2.py + *_pb2.pyi
|
|
200
|
+
│ └── utils/
|
|
201
|
+
├── scripts/ # poetry console-script entry points (pb-*)
|
|
202
|
+
├── protobufs/ # .proto sources (fetched by pb-fetch)
|
|
203
|
+
├── typings/ # local pyright stubs (see typings/…/builder.pyi
|
|
204
|
+
│ # for the BuildServices typeshed override)
|
|
205
|
+
├── tests/ # pytest suite
|
|
206
|
+
├── vcr/ # recorded HTTP fixtures for offline test replay
|
|
207
|
+
├── docs/ # Sphinx source (rendered at steam.readthedocs.io
|
|
208
|
+
│ # — kept in-tree but not currently deployed
|
|
209
|
+
│ # from this fork)
|
|
210
|
+
└── pyproject.toml # poetry config + [tool.pyright]
|
|
211
|
+
|
|
212
|
+
Upstream links (reference only — refer to this fork for maintained code):
|
|
213
|
+
|
|
214
|
+
* Upstream: https://github.com/ValvePython/steam
|
|
215
|
+
* Old docs: https://steam.readthedocs.io/en/latest/ (mostly still
|
|
216
|
+
applicable — the library shape has not diverged from upstream, only its
|
|
217
|
+
Python-runtime and protobuf-vintage baseline)
|
|
218
|
+
* Command-line companion (unmaintained upstream):
|
|
219
|
+
https://github.com/ValvePython/steamctl
|
|
220
|
+
|
|
221
|
+
License
|
|
222
|
+
-------
|
|
223
|
+
|
|
224
|
+
MIT (unchanged from upstream). See ``LICENSE``.
|
|
225
|
+
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
steam
|
|
2
|
+
=====
|
|
3
|
+
|
|
4
|
+
Python client for the Steam network — CM protocol, PICS / CDN, WebAuth,
|
|
5
|
+
Web API, Steam Guard, SteamIDs, master-server queries.
|
|
6
|
+
|
|
7
|
+
**This is a fork of** `ValvePython/steam <https://github.com/ValvePython/steam>`_
|
|
8
|
+
maintained under `H47R15/steam <https://github.com/H47R15/steam>`_. The
|
|
9
|
+
upstream project is largely inactive; this fork exists to keep the library
|
|
10
|
+
working against modern Python and current Steam wire protocols.
|
|
11
|
+
|
|
12
|
+
What changed vs. upstream
|
|
13
|
+
-------------------------
|
|
14
|
+
|
|
15
|
+
* **Python 3.13+ only.** Dropped the py2 / py<3.4 compat shims (``six``,
|
|
16
|
+
``six.moves``, ``raw_input``, ``xrange``, ``long``, ``win_inet_pton``,
|
|
17
|
+
``backports.lzma``, ``enum34``, …).
|
|
18
|
+
* **Modern protobuf runtime + regenerated ``_pb2`` files.** Bumped from
|
|
19
|
+
``protobuf==3.20.3`` to ``>=5.26,<7`` and re-ran ``protoc`` (v33.2) against
|
|
20
|
+
fresh SteamDB proto sources. The old per-message
|
|
21
|
+
``_reflection.GeneratedProtocolMessageType`` codegen shrunk ~20× to the
|
|
22
|
+
modern ``_descriptor_pool.AddSerializedFile`` + ``_builder`` pattern
|
|
23
|
+
(``steammessages_base_pb2.py``: 2 200 → 96 lines).
|
|
24
|
+
* **Full ``.pyi`` type stubs** for every ``_pb2`` file via ``mypy-protobuf``
|
|
25
|
+
— ``msg.field`` accesses now type-check under Pylance / pyright.
|
|
26
|
+
* **Poetry-first workflow.** ``pip`` + ``Makefile`` + ``setup.py``
|
|
27
|
+
replaced by a single ``pyproject.toml``; regeneration steps registered as
|
|
28
|
+
``poetry run pb-*`` console scripts (details below).
|
|
29
|
+
* **~50 new proto files** picked up from upstream since the fork was last
|
|
30
|
+
synced (family groups, game recording, remote client, SteamOS webui
|
|
31
|
+
messages, HTML messages, virtual controller, community messages, and
|
|
32
|
+
more). ``steam/enums/proto.py`` grew from 90 → 247 enums.
|
|
33
|
+
* Real latent bug fixes surfaced while porting — e.g. a ``list + map(...)``
|
|
34
|
+
``TypeError`` in ``struct.py``, a tuple-vs-int mismatch in
|
|
35
|
+
``MarketingMessage.flags``, ``hexlify(None)`` in avatar-URL fallback,
|
|
36
|
+
broken ``CookieJar`` iteration in ``WebAuth``.
|
|
37
|
+
|
|
38
|
+
Requirements
|
|
39
|
+
------------
|
|
40
|
+
|
|
41
|
+
* Python **3.13.11** (pinned via ``pyproject.toml``). Any newer 3.13.x is
|
|
42
|
+
fine. Older Pythons are not supported.
|
|
43
|
+
* `Poetry <https://python-poetry.org/>`_ for dependency management.
|
|
44
|
+
* ``protoc`` on ``PATH`` — required only when regenerating the ``_pb2``
|
|
45
|
+
files (``poetry run pb-compile``). Install via ``brew install protobuf``
|
|
46
|
+
on macOS or the equivalent from your distro.
|
|
47
|
+
|
|
48
|
+
Install
|
|
49
|
+
-------
|
|
50
|
+
|
|
51
|
+
Clone the repo and install with poetry:
|
|
52
|
+
|
|
53
|
+
.. code:: bash
|
|
54
|
+
|
|
55
|
+
git clone https://github.com/H47R15/steam.git
|
|
56
|
+
cd steam
|
|
57
|
+
poetry install --with dev --extras client
|
|
58
|
+
|
|
59
|
+
The ``client`` extra pulls in ``gevent`` + ``protobuf`` + ``gevent-eventemitter``
|
|
60
|
+
— required by ``SteamClient`` and CDN. Without it, only the
|
|
61
|
+
``requests``-based subset (WebAPI / WebAuth / SteamID / master-server
|
|
62
|
+
query) is functional.
|
|
63
|
+
|
|
64
|
+
Features
|
|
65
|
+
--------
|
|
66
|
+
|
|
67
|
+
* **SteamClient** — CM protocol client on top of gevent. Login flows
|
|
68
|
+
(password / QR / refresh token), PICS product info, friends list, chat,
|
|
69
|
+
game coordinator hooks.
|
|
70
|
+
* **CDNClient** — content depot downloads with manifest parsing.
|
|
71
|
+
* **WebAuth / MobileWebAuth** — obtain authenticated ``requests.Session``
|
|
72
|
+
cookies for ``store.steampowered.com`` / ``steamcommunity.com``.
|
|
73
|
+
* **WebAPI** — thin wrapper around Steam's ``api.steampowered.com`` that
|
|
74
|
+
introspects the interface catalogue at construction time.
|
|
75
|
+
* **SteamAuthenticator** — enable / disable / verify Steam Guard 2FA.
|
|
76
|
+
* **SteamID** — parse and convert between the 32-bit / 64-bit /
|
|
77
|
+
``STEAM_X:Y:Z`` / community-URL representations.
|
|
78
|
+
* **Master server query protocol** — query masters directly or through
|
|
79
|
+
``SteamClient``.
|
|
80
|
+
|
|
81
|
+
Dev workflow (poetry)
|
|
82
|
+
---------------------
|
|
83
|
+
|
|
84
|
+
All commands run from the repo root.
|
|
85
|
+
|
|
86
|
+
.. code:: bash
|
|
87
|
+
|
|
88
|
+
poetry install --with dev --extras client # install everything
|
|
89
|
+
poetry run pytest # run the test suite (~83 tests, ~1s)
|
|
90
|
+
poetry run pytest -k test_webauth # filter to a subset
|
|
91
|
+
poetry run pytest --tb=short -q # concise output
|
|
92
|
+
|
|
93
|
+
poetry run pylint steam # optional lint pass
|
|
94
|
+
|
|
95
|
+
Regenerating protobufs
|
|
96
|
+
----------------------
|
|
97
|
+
|
|
98
|
+
The ``_pb2.py`` and ``_pb2.pyi`` files under ``steam/protobufs`` are
|
|
99
|
+
generated from ``.proto`` sources under ``protobufs/``. Console scripts:
|
|
100
|
+
|
|
101
|
+
.. code:: bash
|
|
102
|
+
|
|
103
|
+
poetry run pb-fetch # download + normalize .proto files from SteamDB
|
|
104
|
+
poetry run pb-compile # protoc --python_out --mypy_out + post-process
|
|
105
|
+
poetry run pb-services # regenerate steam/core/msg/unified.py service map
|
|
106
|
+
poetry run pb-gen-enums # regenerate steam/enums/proto.py from *_pb2
|
|
107
|
+
|
|
108
|
+
poetry run pb-update # all four in sequence — the usual entry point
|
|
109
|
+
|
|
110
|
+
``pb-fetch`` reads URLs from ``protobuf_list.txt`` (comments and blank
|
|
111
|
+
lines skipped) and downloads them into ``protobufs/``. Locally-maintained
|
|
112
|
+
``.proto`` files (``gc.proto``, ``test_messages.proto``) are set aside via
|
|
113
|
+
``.notouch`` rename before the fetch and restored after.
|
|
114
|
+
|
|
115
|
+
``pb-compile`` wipes ``steam/protobufs/*_pb2.{py,pyi}`` first, then runs a
|
|
116
|
+
single ``protoc`` invocation over every ``.proto``. Post-processing:
|
|
117
|
+
|
|
118
|
+
* ``.py`` — sibling protobuf imports get the ``steam.protobufs.`` prefix
|
|
119
|
+
so runtime import works without ``steam/protobufs/`` on ``sys.path``.
|
|
120
|
+
* ``.pyi`` — ``DESCRIPTOR: _descriptor.Descriptor`` overrides inside each
|
|
121
|
+
message class are stripped (they trip
|
|
122
|
+
``reportIncompatibleVariableOverride`` under types-protobuf 7.34+; the
|
|
123
|
+
parent ``Message`` class's union type is inherited instead).
|
|
124
|
+
|
|
125
|
+
VCR fixtures
|
|
126
|
+
------------
|
|
127
|
+
|
|
128
|
+
Web-facing tests (``test_webapi.py``, ``test_webauth.py``,
|
|
129
|
+
``test_steamid.py``) replay recorded HTTP fixtures from ``vcr/*.yaml`` in
|
|
130
|
+
``RecordMode.NONE`` — no live network, no credentials needed for CI.
|
|
131
|
+
|
|
132
|
+
To regenerate the ``webapi.yaml`` cassette against a fresh Steam API
|
|
133
|
+
response, copy ``.env.example`` to ``.env`` and fill in ``STEAM_API_KEY``
|
|
134
|
+
(see the template for instructions on where to get one), then follow the
|
|
135
|
+
regen recipe at the top of ``tests/test_webapi.py``.
|
|
136
|
+
|
|
137
|
+
The ``webauth_*.yaml`` cassettes are regenerated by
|
|
138
|
+
``tests/generete_webauth_vcr.py`` — needs real Steam credentials at run
|
|
139
|
+
time; run interactively when the anonymized replay drifts from live.
|
|
140
|
+
|
|
141
|
+
Live smoke test
|
|
142
|
+
---------------
|
|
143
|
+
|
|
144
|
+
Beyond the unit suite, the CM handshake / anonymous-login / PICS-fetch
|
|
145
|
+
end-to-end flow can be smoke-tested against live Steam:
|
|
146
|
+
|
|
147
|
+
.. code:: python
|
|
148
|
+
|
|
149
|
+
from steam.client import SteamClient
|
|
150
|
+
|
|
151
|
+
client = SteamClient()
|
|
152
|
+
assert client.anonymous_login()
|
|
153
|
+
resp = client.get_product_info(apps=[553850], timeout=15) # Helldivers 2
|
|
154
|
+
print(resp['apps'][553850]['common']['name'])
|
|
155
|
+
client.logout()
|
|
156
|
+
client.disconnect()
|
|
157
|
+
|
|
158
|
+
Layout
|
|
159
|
+
------
|
|
160
|
+
|
|
161
|
+
.. code::
|
|
162
|
+
|
|
163
|
+
steam/
|
|
164
|
+
├── steam/ # library source
|
|
165
|
+
│ ├── client/ # SteamClient, CDN, builtins/*
|
|
166
|
+
│ ├── core/ # CM protocol, message framing
|
|
167
|
+
│ ├── enums/ # SteamIntEnum wrappers (common.py hand-written,
|
|
168
|
+
│ │ # proto.py auto-generated by pb-gen-enums)
|
|
169
|
+
│ ├── protobufs/ # generated *_pb2.py + *_pb2.pyi
|
|
170
|
+
│ └── utils/
|
|
171
|
+
├── scripts/ # poetry console-script entry points (pb-*)
|
|
172
|
+
├── protobufs/ # .proto sources (fetched by pb-fetch)
|
|
173
|
+
├── typings/ # local pyright stubs (see typings/…/builder.pyi
|
|
174
|
+
│ # for the BuildServices typeshed override)
|
|
175
|
+
├── tests/ # pytest suite
|
|
176
|
+
├── vcr/ # recorded HTTP fixtures for offline test replay
|
|
177
|
+
├── docs/ # Sphinx source (rendered at steam.readthedocs.io
|
|
178
|
+
│ # — kept in-tree but not currently deployed
|
|
179
|
+
│ # from this fork)
|
|
180
|
+
└── pyproject.toml # poetry config + [tool.pyright]
|
|
181
|
+
|
|
182
|
+
Upstream links (reference only — refer to this fork for maintained code):
|
|
183
|
+
|
|
184
|
+
* Upstream: https://github.com/ValvePython/steam
|
|
185
|
+
* Old docs: https://steam.readthedocs.io/en/latest/ (mostly still
|
|
186
|
+
applicable — the library shape has not diverged from upstream, only its
|
|
187
|
+
Python-runtime and protobuf-vintage baseline)
|
|
188
|
+
* Command-line companion (unmaintained upstream):
|
|
189
|
+
https://github.com/ValvePython/steamctl
|
|
190
|
+
|
|
191
|
+
License
|
|
192
|
+
-------
|
|
193
|
+
|
|
194
|
+
MIT (unchanged from upstream). See ``LICENSE``.
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
[tool.poetry]
|
|
2
|
+
# ``name`` is the distribution name on PyPI (``pip install pysteam-client``);
|
|
3
|
+
# ``packages`` below keeps the import module ``steam`` unchanged so consumer
|
|
4
|
+
# code still writes ``from steam.client import SteamClient``. The upstream
|
|
5
|
+
# ``steam`` distribution name on PyPI is owned by ValvePython since 2013,
|
|
6
|
+
# so the fork lives under a scoped name here.
|
|
7
|
+
name = "pysteam-client"
|
|
8
|
+
version = "1.4.6"
|
|
9
|
+
description = "Module for interacting with various Steam features"
|
|
10
|
+
authors = ["Rossen Georgiev <rossen@rgp.io>"]
|
|
11
|
+
license = "MIT"
|
|
12
|
+
readme = "README.rst"
|
|
13
|
+
homepage = "https://github.com/ValvePython/steam"
|
|
14
|
+
repository = "https://github.com/H47R15/steam"
|
|
15
|
+
keywords = ["valve", "steam", "steamid", "api", "webapi", "steamcommunity"]
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Development Status :: 5 - Production/Stable",
|
|
18
|
+
"Natural Language :: English",
|
|
19
|
+
"Intended Audience :: Developers",
|
|
20
|
+
"License :: OSI Approved :: MIT License",
|
|
21
|
+
"Operating System :: OS Independent",
|
|
22
|
+
"Programming Language :: Python :: 3.13",
|
|
23
|
+
]
|
|
24
|
+
packages = [
|
|
25
|
+
{ include = "steam" },
|
|
26
|
+
# Dev-only helpers exposed as poetry console scripts (see
|
|
27
|
+
# ``[tool.poetry.scripts]`` below). Shipped alongside the runtime
|
|
28
|
+
# package so ``poetry install`` registers the ``pb-*`` entrypoints on
|
|
29
|
+
# PATH — the modules themselves are only imported when a script is
|
|
30
|
+
# explicitly invoked, so pulling them in has zero runtime cost for
|
|
31
|
+
# library consumers.
|
|
32
|
+
{ include = "scripts" },
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
# ─── console scripts ─────────────────────────────────────────────
|
|
36
|
+
#
|
|
37
|
+
# After ``poetry install`` these are on PATH inside the venv, so a
|
|
38
|
+
# maintainer can run e.g. ``poetry run pb-compile`` from the package
|
|
39
|
+
# root without spelling out the full ``python scripts/…`` path.
|
|
40
|
+
[tool.poetry.scripts]
|
|
41
|
+
pb-fetch = "scripts.pb_fetch:main"
|
|
42
|
+
pb-compile = "scripts.pb_compile:main"
|
|
43
|
+
pb-services = "scripts.pb_services:main"
|
|
44
|
+
pb-gen-enums = "scripts.pb_gen_enums:main"
|
|
45
|
+
pb-update = "scripts.pb_update:main"
|
|
46
|
+
vcr-webapi = "scripts.vcr_webapi:main" # regen vcr/webapi.yaml (needs STEAM_API_KEY)
|
|
47
|
+
vcr-webauth = "scripts.vcr_webauth:main" # regen vcr/webauth_*.yaml (interactive)
|
|
48
|
+
|
|
49
|
+
[tool.poetry.dependencies]
|
|
50
|
+
# Pinned to Python 3.13.11.
|
|
51
|
+
python = "^3.13.11"
|
|
52
|
+
|
|
53
|
+
# ─── runtime deps (from the original setup.py) ────────────────────
|
|
54
|
+
#
|
|
55
|
+
# The legacy ``win-inet-pton`` (py2.7 Windows shim) and
|
|
56
|
+
# ``enum34`` (py<3.4 stdlib backport) constraints from setup.py
|
|
57
|
+
# were dropped — this fork targets py3.13 only, both are provided
|
|
58
|
+
# by the modern stdlib.
|
|
59
|
+
pycryptodomex = ">=3.7.0"
|
|
60
|
+
requests = ">=2.9.1"
|
|
61
|
+
urllib3 = "<2"
|
|
62
|
+
vdf = ">=3.3"
|
|
63
|
+
cachetools = ">=3.0.0"
|
|
64
|
+
# ``six`` is a py2/py3 compat shim. Kept because the fork's
|
|
65
|
+
# source still imports it in a few places; harmless on py3.13.
|
|
66
|
+
six = ">=1.10.0"
|
|
67
|
+
|
|
68
|
+
# ─── client extra (optional deps) ─────────────────────────────────
|
|
69
|
+
#
|
|
70
|
+
# The ``client`` extra pulls in the gevent-based SteamClient — same
|
|
71
|
+
# split as the original setup.py's ``install_extras['client']``.
|
|
72
|
+
# Enable with: poetry install --extras client
|
|
73
|
+
#
|
|
74
|
+
# ``protobuf`` bumped from the original ``~=3.0`` to ``>=5.26,<7``.
|
|
75
|
+
# The fork's ``steam/protobufs/*_pb2.py`` were originally protoc-3.x
|
|
76
|
+
# generated (per-message ``_reflection.GeneratedProtocolMessageType``
|
|
77
|
+
# + ``_sym_db.RegisterMessage``); protoc-5.x/6.x emits far cleaner
|
|
78
|
+
# code (``_descriptor_pool.AddSerializedFile`` + ``_builder`` — 20×
|
|
79
|
+
# smaller files, zero descriptor-mutation, works cleanly under
|
|
80
|
+
# Pylance). Runtime protobuf 5.26+ has ``google.protobuf.runtime_version``
|
|
81
|
+
# which the modern codegen calls at import time to validate the
|
|
82
|
+
# generator/runtime pair — 5.26 is the earliest release that ships
|
|
83
|
+
# it, and py3.13 wheels ship from 5.28 onward. Upper bound ``<7``
|
|
84
|
+
# reserves the next major bump for a deliberate migration, not an
|
|
85
|
+
# accidental one.
|
|
86
|
+
gevent = { version = ">=1.5.0", optional = true }
|
|
87
|
+
protobuf = { version = ">=5.26,<7", optional = true }
|
|
88
|
+
gevent-eventemitter = { version = ">=2.1", optional = true }
|
|
89
|
+
|
|
90
|
+
[tool.poetry.extras]
|
|
91
|
+
client = ["gevent", "protobuf", "gevent-eventemitter"]
|
|
92
|
+
|
|
93
|
+
# ─── dev deps (from the original dev_requirements.txt) ────────────
|
|
94
|
+
#
|
|
95
|
+
# ``mock`` is part of the stdlib as ``unittest.mock`` on py3.3+,
|
|
96
|
+
# but the fork's test files still ``import mock`` (the
|
|
97
|
+
# py2.7-compatible pattern) so we keep the PyPI ``mock`` package
|
|
98
|
+
# as a dev dep — it's a stdlib passthrough on modern Python,
|
|
99
|
+
# harmless overhead, and rewriting the 7 test files to
|
|
100
|
+
# ``from unittest import mock`` would be pure churn.
|
|
101
|
+
# ``coveralls-python`` git fork was py2.7-specific and was dropped.
|
|
102
|
+
# Everything else was bumped past the py3.13 wheel cliff (vcrpy
|
|
103
|
+
# 2.x has no py3.13 wheels; 5.x does).
|
|
104
|
+
[tool.poetry.group.dev.dependencies]
|
|
105
|
+
mock = ">=5.0"
|
|
106
|
+
vcrpy = ">=5.0"
|
|
107
|
+
PyYAML = ">=6.0"
|
|
108
|
+
coverage = ">=7.0"
|
|
109
|
+
pytest = ">=8.0"
|
|
110
|
+
pytest-cov = ">=4.0"
|
|
111
|
+
coveralls = ">=3.3"
|
|
112
|
+
deptry = "^0.23.0"
|
|
113
|
+
# Typeshed stubs for the ``google.protobuf`` runtime — gives Pylance
|
|
114
|
+
# the base ``Message`` class's methods (``ParseFromString`` /
|
|
115
|
+
# ``SerializeToString`` / …) that the domain ``.pyi`` stubs below
|
|
116
|
+
# inherit from. Dev-only because it ships only ``.pyi`` files with
|
|
117
|
+
# no runtime impact.
|
|
118
|
+
types-protobuf = ">=4.24"
|
|
119
|
+
# ``mypy-protobuf`` ships a ``protoc-gen-mypy`` plugin that emits
|
|
120
|
+
# a ``.pyi`` companion next to every ``*_pb2.py`` when protoc is
|
|
121
|
+
# invoked with ``--mypy_out``. Dev-only — used by the ``pb_compile``
|
|
122
|
+
# Makefile target when regenerating from upstream ``.proto`` files;
|
|
123
|
+
# never imported at runtime.
|
|
124
|
+
#
|
|
125
|
+
# ``mypy-protobuf`` bumped to the modern line now that the runtime
|
|
126
|
+
# ``protobuf`` pin is ``>=5.26`` — 5.x mypy-protobuf matches the
|
|
127
|
+
# 5.x/6.x protoc + runtime that Pylance's typeshed stubs are
|
|
128
|
+
# generated against, so the emitted ``.pyi`` files line up with what
|
|
129
|
+
# static analysers already expect.
|
|
130
|
+
mypy-protobuf = ">=3.6"
|
|
131
|
+
|
|
132
|
+
# ─── deptry ignores ───────────────────────────────────────────────
|
|
133
|
+
#
|
|
134
|
+
# The client extras are legitimately optional runtime deps that the
|
|
135
|
+
# fork's non-client modules don't import — deptry's DEP002 (unused)
|
|
136
|
+
# would flag them under a default install, so ignore explicitly.
|
|
137
|
+
python-dotenv = "^1.2.2"
|
|
138
|
+
[tool.deptry.per_rule_ignores]
|
|
139
|
+
DEP002 = ["gevent", "protobuf", "gevent-eventemitter", "six", "types-protobuf", "mypy-protobuf"]
|
|
140
|
+
|
|
141
|
+
[tool.deptry.package_module_name_map]
|
|
142
|
+
# Underscore vs hyphen in the extras names.
|
|
143
|
+
gevent_eventemitter = "gevent-eventemitter"
|
|
144
|
+
|
|
145
|
+
# ─── pyright / Pylance ─────────────────────────────────
|
|
146
|
+
#
|
|
147
|
+
# ``stubPath = "typings"`` points pyright at our local stub overrides
|
|
148
|
+
# under ``typings/`` (default pyright convention, but must be enabled
|
|
149
|
+
# explicitly). Currently patches one typeshed bug:
|
|
150
|
+
# google/protobuf/internal/builder.pyi — ``BuildServices`` param typing
|
|
151
|
+
# See the stub file's docstring for the full rationale.
|
|
152
|
+
[tool.pyright]
|
|
153
|
+
stubPath = "typings"
|
|
154
|
+
|
|
155
|
+
# ─── semantic-release ──────────────────
|
|
156
|
+
[tool.semantic_release]
|
|
157
|
+
version_toml = [ "pyproject.toml:tool.poetry.version" ]
|
|
158
|
+
version_source = "toml"
|
|
159
|
+
branch = "master"
|
|
160
|
+
upload_to_PyPI = false
|
|
161
|
+
github_release = false
|
|
162
|
+
commit_author = "github-actions[bot] <github-actions[bot]@users.noreply.github.com>"
|
|
163
|
+
upload_to_release = false
|
|
164
|
+
tag_format = "steam-v{version}"
|
|
165
|
+
|
|
166
|
+
[tool.semantic_release.commit_parser_options]
|
|
167
|
+
allowed_tags = [
|
|
168
|
+
"build",
|
|
169
|
+
"chore",
|
|
170
|
+
"ci",
|
|
171
|
+
"docs",
|
|
172
|
+
"feat",
|
|
173
|
+
"fix",
|
|
174
|
+
"perf",
|
|
175
|
+
"style",
|
|
176
|
+
"refactor",
|
|
177
|
+
"test",
|
|
178
|
+
"MAJOR",
|
|
179
|
+
"BREAKING",
|
|
180
|
+
"breaking",
|
|
181
|
+
"BREAKING CHANGE",
|
|
182
|
+
"breaking change",
|
|
183
|
+
]
|
|
184
|
+
minor_tags = ["feat"]
|
|
185
|
+
patch_tags = ["fix", "perf"]
|
|
186
|
+
major_tags = ["MAJOR", "BREAKING", "BREAKING CHANGE", "breaking change"]
|
|
187
|
+
|
|
188
|
+
[build-system]
|
|
189
|
+
requires = ["poetry-core"]
|
|
190
|
+
build-backend = "poetry.core.masonry.api"
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"""Dev-only helpers exposed as poetry console scripts.
|
|
2
|
+
|
|
3
|
+
See ``pyproject.toml``'s ``[tool.poetry.scripts]`` block for the console
|
|
4
|
+
entries (``pb-fetch`` / ``pb-compile`` / ``pb-services`` / ``pb-gen-enums``
|
|
5
|
+
/ ``pb-update``). Each is a thin wrapper around one of this package's
|
|
6
|
+
``main()`` functions.
|
|
7
|
+
"""
|