17
17
18
18
import config
19
19
from config import ENV
20
- from config import USER_URL
21
20
from config import setup_logging
22
21
23
22
urllib3 .disable_warnings ()
@@ -37,6 +36,7 @@ class Kata:
37
36
code : str = ''
38
37
description : str = ''
39
38
uploaded : bool = False
39
+ completed_by : str = ''
40
40
41
41
def __post_init__ (self ):
42
42
# parse
@@ -71,6 +71,7 @@ def __init__(self):
71
71
self .completed_katas = []
72
72
self .uploaded_katas = set ()
73
73
log .debug ('Codewars agent prepared' )
74
+ self .username = self .get_username ()
74
75
75
76
@staticmethod
76
77
def _parse_cookie_env (raw_cookie : str ) -> dict :
@@ -82,11 +83,22 @@ def _parse_cookie_env(raw_cookie: str) -> dict:
82
83
for key , morsel in cookie .items ()
83
84
})
84
85
85
- def get_user_data (self , url : str ) -> dict :
86
+ def get_username (self ):
87
+ """Parse logged-in users' username."""
88
+ log .debug ('getting username' )
89
+ r = self .session .get ('http://www.codewars.com/dashboard' )
90
+ user_image = r .html .find ('.profile-pic img' )[0 ]
91
+ username = user_image .attrs ['alt' ].split ()[0 ]
92
+ return username
93
+
94
+ def get_user_data (self ) -> dict :
86
95
"""Fetch user info json from public API."""
87
96
log .debug ('getting user data' )
97
+ url = fr"{ ENV ['API_URL' ]} users/{ self .username } "
88
98
r = self .session .get (url , verify = False )
89
- return r .json ()
99
+ data = r .json ()
100
+ self .user_full_name = data ['name' ]
101
+ return data
90
102
91
103
@staticmethod
92
104
def parse_user_info (user_data : dict ) -> str :
@@ -103,7 +115,7 @@ def load_completed_katas_data(self):
103
115
Save it internally for later use.
104
116
"""
105
117
log .debug ('loading katas data' )
106
- url = fr"{ USER_URL } /code-challenges/completed"
118
+ url = fr"{ ENV [ 'API_URL' ] } users/ { self . username } /code-challenges/completed"
107
119
108
120
self .completed_katas = []
109
121
@@ -152,6 +164,7 @@ def _parse_response(response: Response) -> tuple[str, str]:
152
164
153
165
def create_kata_obj (self , kata_data : dict ) -> Kata :
154
166
"""Create kata instance from api and parsed data."""
167
+ kata_data ['completed_by' ] = self .user_full_name
155
168
kata = Kata (** kata_data )
156
169
kata .description , kata .code = self .get_kata_data (kata .id )
157
170
return kata
@@ -174,7 +187,7 @@ def main():
174
187
# prepare online agent
175
188
cw = CodewarsAgent ()
176
189
177
- user_data = cw .get_user_data (USER_URL )
190
+ user_data = cw .get_user_data ()
178
191
log .info (cw .parse_user_info (user_data ))
179
192
180
193
# load completed katas info from public api
0 commit comments