77import requests
88from werkzeug .contrib .cache import SimpleCache
99
10-
1110import kuas_api .kuas .ap as ap
1211import kuas_api .kuas .leave as leave
1312import kuas_api .kuas .parse as parse
3130AP_GUEST_PASSWORD = "123"
3231
3332s_cache = SimpleCache ()
34- red = redis .StrictRedis .from_url (url = os .environ ['REDIS_URL' ],db = 2 )
33+ red = redis .StrictRedis .from_url (url = os .environ ['REDIS_URL' ], db = 2 )
3534SECRET_KEY = red .get ("SECRET_KEY" ) if red .exists (
3635 "SECRET_KEY" ) else str (os .urandom (32 ))
36+ # Only use in cache.login , get encoded data from redis.
37+ # get data from redis should be able use without any decode or encode action.
38+ red_auth = redis .StrictRedis .from_url (
39+ url = os .environ ['REDIS_URL' ], db = 2 , charset = "utf-8" , decode_responses = True )
3740
3841
39- def dump_session_cookies (session ,is_login ):
42+ def dump_session_cookies (session , is_login ):
4043 """Dumps cookies to list
4144 """
4245
@@ -47,13 +50,17 @@ def dump_session_cookies(session,is_login):
4750 'domain' : c .domain ,
4851 'value' : c .value })
4952
50- return {'is_login' : is_login , 'cookies' :cookies }
53+ return {'is_login' : is_login , 'cookies' : cookies }
5154
5255
5356def login (username , password ):
5457 session = requests .Session ()
5558 is_login = {}
5659
60+ if red_auth .exists (username ):
61+ user_redis_cookies = red_auth .get (username )
62+ return json .loads (user_redis_cookies )
63+
5764 # AP Login
5865 try :
5966 is_login ["ap" ] = ap .login (session , username , password )
@@ -72,15 +79,15 @@ def login(username, password):
7279 is_login ["leave" ] = leave .login (session , username , password )
7380 except :
7481 is_login ["leave" ] = False
75- if is_login ["ap" ]:
76- return dump_session_cookies (session ,is_login )
82+ if is_login ["ap" ]:
83+ return dump_session_cookies (session , is_login )
7784 else :
78- return False
85+ return False
7986
8087
8188def ap_query (session , qid = None , args = None ,
8289 username = None , expire = AP_QUERY_EXPIRE ):
83- ap_query_key_tag = str (username ) + str (args ) + str (SECRET_KEY )
90+ ap_query_key_tag = str (username ) + str (args ) + str (SECRET_KEY )
8491 ap_query_key = qid + \
8592 hashlib .sha512 (
8693 bytes (ap_query_key_tag , "utf-8" )).hexdigest ()
@@ -95,6 +102,7 @@ def ap_query(session, qid=None, args=None,
95102
96103 return ap_query_content
97104
105+
98106def leave_query (session , year = "102" , semester = "2" ):
99107 return leave .getList (session , year , semester )
100108
@@ -194,31 +202,30 @@ def get_semester_list():
194202 """
195203
196204 s = requests .Session ()
197- ap .login (s ,AP_GUEST_ACCOUNT , AP_GUEST_PASSWORD )
205+ ap .login (s , AP_GUEST_ACCOUNT , AP_GUEST_PASSWORD )
198206
199207 content = ap_query (s , "ag304_01" )
200- if len (content )< 3000 :
208+ if len (content ) < 3000 :
201209 return False
202210 root = etree .HTML (content )
203211
204212 #options = root.xpath("id('yms_yms')/option")
205213 try :
206214 options = map (lambda x : {"value" : x .values ()[0 ].replace ("#" , "," ),
207- "selected" : 1 if "selected" in x .values () else 0 ,
208- "text" : x .text },
209- root .xpath ("id('yms_yms')/option" )
210- )
215+ "selected" : 1 if "selected" in x .values () else 0 ,
216+ "text" : x .text },
217+ root .xpath ("id('yms_yms')/option" )
218+ )
211219 except :
212220 return False
213-
221+
214222 options = list (options )
215223
216224 return options
217225
218226
219-
220227if __name__ == "__main__" :
221228 s = requests .Session ()
222229 is_login = login (s , "guest" , "123" )
223230
224- print (is_login )
231+ print (is_login )
0 commit comments