Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitff64628

Browse files
author
meig
committed
enhance xhttp server
1 parent7ba6e63 commitff64628

File tree

4 files changed

+114
-19
lines changed

4 files changed

+114
-19
lines changed

‎pub/common/error.py‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ def pack_errinfo_json(error,detail=None):
4646
defmatch(code,error_tuple):
4747
returncode==error_tuple[0]
4848

49+
defpack_ok_json():
50+
return'{"result":"ok"}'
51+
4952
if__name__=="__main__":
5053
printpack_errinfo_json(ERROR_INTERNAL_SERVER_ERROR,"shit")
5154
raw_input()

‎pub/common/utils.py‎

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
# -*- coding:utf-8 -*-
55
importsys
66
importos
7+
importos.path
78
importplatform
89

910
defget_cur_info_within_exception():
@@ -100,9 +101,30 @@ def test_directory(test_dir):
100101
returnFalse
101102
returnTrue
102103

103-
104+
defrmdir_r(path,ignore_error=False):
105+
items=os.listdir(path)
106+
foriteminitems:
107+
try:
108+
fullpath=os.path.join(path,item)
109+
ifos.path.isdir(fullpath):
110+
rmdir_r(fullpath,ignore_error)
111+
else:
112+
os.remove(fullpath)
113+
exceptException:
114+
ifignore_error:
115+
continue
116+
else:
117+
break
118+
os.rmdir(path)
104119

105120
if__name__=='__main__':
106121
test()
107122
printget_local_addr()
108-
os.system("pause")
123+
os.system("pause")
124+
125+
try:
126+
rmdir_r(r"E:\git__\flashp2p\livems_refactor\live_master\pub\common\tp1")
127+
exceptException,e:
128+
printstr(e)
129+
130+
raw_input("press")

‎pub/xhttp/xhttp_server.py‎

Lines changed: 45 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,62 @@
11
#!/usr/bin/python
22
# -*- coding:utf-8 -*-
33

4+
importhttplib
5+
importre
46
importtornado.httpserver
57
importtornado.ioloop
6-
fromcommonimporterror
7-
importurls
8+
importxhttp_utils
9+
frompub.commonimporterror
810

911
classXRequestHandler(object):
1012
''' Callback handler to dispatch and handle request'''
1113

12-
def__init__(self,url_map):
13-
self.__router=url_map
14+
def__init__(self,url_match_list):
15+
self.__router=url_match_list
1416

1517
defhandle_request(self,request):
16-
ifself.__router.has_key(request.path):
17-
handler=self.__router[request.path]
18+
#if self.__router.has_key(request.path):
19+
# handler = self.__router[request.path]
20+
#else:
21+
# handler = None
22+
request_handler=None
23+
forre_str,handlerinself.__router:
24+
ifre.match(re_str,request.path):
25+
request_handler=handler
26+
break
27+
ifnotrequest_handler:
28+
resp=xhttp_utils.render_to_response(None,404)
1829
else:
19-
handler=None
20-
ifnothandler:
21-
body=error.pack_errinfo_json(error.ERROR_HTTP_URL_NOT_SUPPORTED)
22-
else:
23-
body=handler(request)
24-
message="HTTP/1.1 200 OK\r\nContent-Length:%d\r\n\r\n%s"% (len(body),body)
30+
try:
31+
resp=request_handler(request)
32+
exceptException,e:
33+
resp=xhttp_utils.render_to_response(None,500)
34+
message=resp.pack_http_response_buf()
2535
request.write(message)
2636
request.finish()
2737

28-
defstart(port,url_map=None):
38+
defpack_response(code,headers={},body=""):
39+
status=httplib.responses.get(code)
40+
ifnotstatus:
41+
status="Unknown"
42+
segs= []
43+
segs.append("HTTP/1.1 %u %s"% (code,status))
44+
forkey,valueinheaders.iteritems():
45+
segs.append("%s:%s"%(key,value))
46+
body=str(body)
47+
segs.append("Content-Length:%d"%len(body))
48+
message="%s\r\n\r\n%s"% ("\r\n".join(segs),body)
49+
returnmessage
50+
51+
defstart(ports,url_map=None,_no_keep_alive=True):
2952
request_handler=XRequestHandler(url_map)
30-
http_server=tornado.httpserver.HTTPServer(request_handler.handle_request,no_keep_alive=True)
31-
http_server.listen(int(port))
53+
ifnotisinstance(ports,tuple):
54+
ports= (ports,)
55+
forportinports:
56+
http_server=tornado.httpserver.HTTPServer(request_handler.handle_request,no_keep_alive=_no_keep_alive)
57+
http_server.listen(int(port))
3258
tornado.ioloop.IOLoop.instance().start()
33-
print"thread to quit:Main Thread"
34-
returnTrue
59+
returnTrue
60+
61+
defstop():
62+
tornado.ioloop.IOLoop.instance().stop()

‎pub/xhttp/xhttp_utils.py‎

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#!/usr/bin/python
2+
# -*- coding:utf-8 -*-
3+
4+
importhttplib
5+
6+
classServerResponse(object):
7+
def__init__(self,code,headers,body):
8+
self.code=code
9+
self.headers=headers
10+
self.body=body
11+
12+
defpack_http_response_buf(self):
13+
status=httplib.responses.get(self.code)
14+
ifnotstatus:
15+
status="Unknown"
16+
segs= []
17+
segs.append("HTTP/1.1 %u %s"% (self.code,status))
18+
forkey,valueinself.headers.iteritems():
19+
segs.append("%s:%s"%(key,value))
20+
ifself.body==None:
21+
body=status
22+
else:
23+
body=str(self.body)
24+
segs.append("Content-Length:%d"%len(body))
25+
message="%s\r\n\r\n%s"% ("\r\n".join(segs),body)
26+
returnmessage
27+
28+
defrender_to_response(body,code=200,headers={}):
29+
returnServerResponse(code,headers,body)
30+
31+
defpack_response(code):
32+
resp=render_to_response("",code)
33+
returnresp.pack_http_response_buf()
34+
35+
deflogin_required(auth_func):
36+
def_deco(handler):
37+
def__deco(request):
38+
ifauth_func(request):
39+
returnhandler(request)
40+
returnrender_to_response("",401,{"WWW-Authenticate":'Basic realm="insert realm"'})
41+
return__deco
42+
return_deco

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp