22
33from django .http import HttpResponse
44from django .http import StreamingHttpResponse
5+ from django .contrib .auth import login , logout , authenticate
6+ from django .contrib .auth .models import User
57
6- from kwikapi import BaseRequest , BaseResponse , BaseRequestHandler
8+ from requests .structures import CaseInsensitiveDict
9+
10+ from kwikapi import BaseRequest , BaseResponse
11+ from kwikapi import BaseRequestHandler , BaseAuthAPI
12+ from kwikapi import BearerServerAuthenticator
13+ from kwikapi import BasicServerAuthenticator
14+
15+ class BasicAuthenticator (BasicServerAuthenticator ):
16+ USER_ATTRS = ('id' , 'email' , 'first_name' , 'last_name' )
17+
18+ def authenticate (self , request ):
19+ auth = super ().authenticate (request )
20+ username = auth .username .decode ('utf8' )
21+ password = auth .password .decode ('utf8' )
22+
23+ user = authenticate (request = request .raw_request ,
24+ username = username , password = password )
25+
26+ if not user :
27+ return auth
28+
29+ auth .is_authenticated = True
30+ auth .update ({ a : getattr (user , a ) for a in self .USER_ATTRS })
31+ return auth
32+
33+ class SessionAuthenticator (BearerServerAuthenticator ):
34+ # FIXME: this needs to be completed
35+
36+ def authenticate (self , request ):
37+ auth = super ().authenticate (request )
38+ session_id = auth .token
739
840class DjangoRequest (BaseRequest ):
941 def __init__ (self , request ):
1042 super ().__init__ ()
1143 self .raw_request = self ._request = request
44+ self ._headers = self ._load_headers ()
1245 self .response = DjangoResponse (self ._request )
1346
47+ def _load_headers (self ):
48+ hdrs = CaseInsensitiveDict ()
49+
50+ for k , v in self ._request .META .items ():
51+ if not k .startswith ('HTTP_' ):
52+ continue
53+
54+ k = '-' .join (k .split ('_' )[1 :])
55+ hdrs [k ] = v
56+
57+ return hdrs
58+
1459 @property
1560 def url (self ):
1661 return self ._request .get_full_path ()
@@ -21,11 +66,11 @@ def method(self):
2166
2267 @property
2368 def body (self ):
24- return self ._request
69+ return self ._request . body
2570
2671 @property
2772 def headers (self ):
28- return self ._request . META
73+ return self ._headers
2974
3075class DjangoResponse (BaseResponse ):
3176 def __init__ (self , request ):
@@ -61,10 +106,10 @@ class RequestHandler(BaseRequestHandler):
61106 PROTOCOL = BaseRequestHandler .DEFAULT_PROTOCOL
62107
63108 def handle_request (self , request ):
64- ''' fn = lambda: super().handle_request(DjangoRequest(request))
109+ fn = lambda : super (RequestHandler , self ).handle_request (DjangoRequest (request ))
65110
66111 if self .api .threadpool :
67- self.api.threadpool.apply_async(fn)
112+ f = self .api .threadpool .submit (fn )
113+ return f .result ()
68114 else :
69- fn()'''
70- return super ().handle_request (DjangoRequest (request ))
115+ return fn ()
0 commit comments