28
28
import logging
29
29
import re
30
30
import requests
31
+ import six
31
32
32
33
from .utilities import f2i , h2f
33
34
from pgoapi .rpc_api import RpcApi
@@ -45,71 +46,71 @@ class PGoApi:
45
46
API_ENTRY = 'https://pgorelease.nianticlabs.com/plfe/rpc'
46
47
47
48
def __init__ (self ):
48
-
49
+
49
50
self .log = logging .getLogger (__name__ )
50
51
51
52
self ._auth_provider = None
52
53
self ._api_endpoint = None
53
-
54
+
54
55
self ._position_lat = 0
55
56
self ._position_lng = 0
56
57
self ._position_alt = 0
57
58
58
59
self ._req_method_list = []
59
-
60
+
60
61
def call (self ):
61
62
if not self ._req_method_list :
62
63
return False
63
-
64
+
64
65
if self ._auth_provider is None or not self ._auth_provider .is_login ():
65
66
self .log .info ('Not logged in' )
66
67
return False
67
-
68
+
68
69
player_position = self .get_position ()
69
-
70
+
70
71
request = RpcApi (self ._auth_provider )
71
-
72
+
72
73
if self ._api_endpoint :
73
74
api_endpoint = self ._api_endpoint
74
75
else :
75
76
api_endpoint = self .API_ENTRY
76
-
77
+
77
78
self .log .info ('Execution of RPC' )
78
79
response = None
79
80
try :
80
81
response = request .request (api_endpoint , self ._req_method_list , player_position )
81
82
except ServerBusyOrOfflineException as e :
82
83
self .log .info ('Server seems to be busy or offline - try again!' )
83
-
84
+
84
85
# cleanup after call execution
85
86
self .log .info ('Cleanup of request!' )
86
87
self ._req_method_list = []
87
-
88
+
88
89
return response
89
90
90
91
def list_curr_methods (self ):
91
92
for i in self ._req_method_list :
92
93
print ("{} ({})" .format (RequestType .Name (i ),i ))
93
-
94
+
94
95
def set_logger (self , logger ):
95
96
self ._ = logger or logging .getLogger (__name__ )
96
97
97
98
def get_position (self ):
98
99
return (self ._position_lat , self ._position_lng , self ._position_alt )
99
100
100
- def set_position (self , lat , lng , alt ):
101
+ def set_position (self , lat , lng , alt ):
101
102
self .log .debug ('Set Position - Lat: %s Long: %s Alt: %s' , lat , lng , alt )
102
-
103
+
103
104
self ._position_lat = f2i (lat )
104
105
self ._position_lng = f2i (lng )
105
106
self ._position_alt = f2i (alt )
106
107
107
108
def __getattr__ (self , func ):
108
109
def function (** kwargs ):
109
-
110
+
110
111
if not self ._req_method_list :
111
112
self .log .info ('Create new request...' )
112
-
113
+
113
114
name = func .upper ()
114
115
if kwargs :
115
116
self ._req_method_list .append ( { RequestType .Value (name ): kwargs } )
@@ -118,60 +119,59 @@ def function(**kwargs):
118
119
else :
119
120
self ._req_method_list .append ( RequestType .Value (name ) )
120
121
self .log .info ("Adding '%s' to RPC request" , name )
121
-
122
+
122
123
return self
123
-
124
+
124
125
if func .upper () in RequestType .keys ():
125
126
return function
126
127
else :
127
128
raise AttributeError
128
-
129
-
129
+
130
+
130
131
def login (self , provider , username , password ):
131
-
132
- if not isinstance (username , str ) or not isinstance (password , str ):
132
+
133
+ if not isinstance (username , six . string_types ) or not isinstance (password , six . string_types ):
133
134
raise AuthException ("Username/password not correctly specified" )
134
-
135
+
135
136
if provider == 'ptc' :
136
137
self ._auth_provider = AuthPtc ()
137
138
elif provider == 'google' :
138
139
self ._auth_provider = AuthGoogle ()
139
140
else :
140
141
raise AuthException ("Invalid authentication provider - only ptc/google available." )
141
-
142
+
142
143
self .log .debug ('Auth provider: %s' , provider )
143
-
144
+
144
145
if not self ._auth_provider .login (username , password ):
145
- self .log .info ('Login process failed' )
146
+ self .log .info ('Login process failed' )
146
147
return False
147
-
148
+
148
149
self .log .info ('Starting RPC login sequence (app simulation)' )
149
-
150
+
150
151
# making a standard call, like it is also done by the client
151
152
self .get_player ()
152
153
self .get_hatched_eggs ()
153
154
self .get_inventory ()
154
155
self .check_awarded_badges ()
155
156
self .download_settings (hash = "05daf51635c82611d1aac95c0b051d3ec088a930" )
156
-
157
+
157
158
response = self .call ()
158
-
159
- if not response :
160
- self .log .info ('Login failed!' )
159
+
160
+ if not response :
161
+ self .log .info ('Login failed!' )
161
162
return False
162
-
163
+
163
164
if 'api_url' in response :
164
165
self ._api_endpoint = ('https://{}/rpc' .format (response ['api_url' ]))
165
166
self .log .debug ('Setting API endpoint to: %s' , self ._api_endpoint )
166
167
else :
167
168
self .log .error ('Login failed - unexpected server response!' )
168
169
return False
169
-
170
+
170
171
if 'auth_ticket' in response :
171
172
self ._auth_provider .set_ticket (response ['auth_ticket' ].values ())
172
-
173
+
173
174
self .log .info ('Finished RPC login sequence (app simulation)' )
174
- self .log .info ('Login process completed' )
175
-
175
+ self .log .info ('Login process completed' )
176
+
176
177
return True
177
-
0 commit comments