1
+ """
2
+ Class for generating request URLs, which includes working with random, unpacking parameters, calculating hashes.
3
+ """
1
4
import random
2
5
import time
3
6
import hashlib
@@ -24,7 +27,7 @@ def __init__(self, api_key=None, secret=None, random_number=1000000):
24
27
self .assigned_rand = True
25
28
elif random_number < 100000 and random_number > 999999 :
26
29
raise Exception (
27
- "Non 6-digit number passed as random_number for API Signature" ,
30
+ "The non- 6-digit number passed as random_number for API Signature" ,
28
31
random_number ,
29
32
)
30
33
if api_key is None and secret is None :
@@ -35,11 +38,13 @@ def __init__(self, api_key=None, secret=None, random_number=1000000):
35
38
self .anonimus = False
36
39
self .rand = random_number
37
40
38
- def generate_url (self , method_name , ** fields ):
41
+ def generate_request (self , method_name , ** fields ):
39
42
"""
40
43
Generates request URL for API.
41
44
"""
42
45
46
+ request_url = "https://codeforces.com/api/" + str (method_name )
47
+
43
48
if not self .anonimus :
44
49
45
50
# Renew Rand
@@ -62,31 +67,8 @@ def generate_url(self, method_name, **fields):
62
67
api_signature = api_signature [:- 1 ]
63
68
api_signature += "#" + str (self .secret )
64
69
hashed_signature = hashlib .sha512 (api_signature .encode ("utf-8" ))
65
-
66
- request_url = "https://codeforces.com/api/" + str (method_name ) + "?"
67
- for i in fields :
68
- request_url += str (i ) + "="
69
- if isinstance (fields [i ], list ):
70
- for j in fields [i ]:
71
- request_url += str (j ) + ";"
72
- else :
73
- request_url += str (fields [i ])
74
- request_url += "&"
75
- request_url += (
76
- "apiSig=" + str (self .rand ) + str (hashed_signature .hexdigest ())
77
- )
78
- else :
79
- request_url = "https://codeforces.com/api/" + str (method_name ) + "?"
80
- for i in fields :
81
- request_url += str (i ) + "="
82
- if isinstance (fields [i ], list ):
83
- for j in fields [i ]:
84
- request_url += str (j ) + ";"
85
- else :
86
- request_url += str (fields [i ])
87
- request_url += "&"
88
- request_url = request_url [:- 1 ]
89
- return request_url
70
+ fields ["apiSig" ] = str (self .rand ) + str (hashed_signature .hexdigest ())
71
+ return {"request_url" : request_url , "data" : fields }
90
72
91
73
def check_return_code (self , response ):
92
74
"""
@@ -110,7 +92,7 @@ def renew_rand(self, random_number=1000000):
110
92
random_number = random .randint (100000 , 999999 )
111
93
elif random_number < 100000 and random_number > 999999 :
112
94
raise Exception (
113
- "Non 6-digit number passed as random_number for renew_rand" ,
95
+ "The non- 6-digit number passed as random_number for renew_rand" ,
114
96
random_number ,
115
97
)
116
98
@@ -120,4 +102,6 @@ def get_response(self, request):
120
102
self .check_return_code (response )
121
103
return response
122
104
except json .decoder .JSONDecodeError as error :
123
- raise ValueError ("A lot of users, try to reduce number of users in list" )
105
+ raise ValueError (
106
+ "A lot of users, try to reduce the number of users in the list"
107
+ )
0 commit comments