11
22import threading
33import json
4- import signal
5- import collections
4+ import time
65
76from werkzeug .wrappers import Request , Response
8- from werkzeug .serving import run_simple , make_server
7+ from werkzeug .serving import make_server
98
109URI_DEFAULT = ""
1110METHOD_ALL = "__ALL"
@@ -27,8 +26,16 @@ def __init__(self, uri, method="GET", data=None, data_encoding="utf-8", headers=
2726
2827 self .data = data
2928
29+ def __repr__ (self ):
30+ class_name = self .__class__ .__name__
31+ retval = "<{} " .format (class_name )
32+ retval += "uri={uri!r} method={method!r} query_string={query_string!r} headers={headers!r} data={data!r}>" .format_map (self .__dict__ )
33+ return retval
34+
3035 def match_data (self , request ):
31- return request .data != self .data
36+ if self .data is None :
37+ return True
38+ return request .data == self .data
3239
3340 def difference (self , request : Request ):
3441 retval = []
@@ -57,10 +64,10 @@ def difference(self, request: Request):
5764 return retval
5865
5966 def match (self , request : Request ):
60- if self .difference (request ):
61- return False
62- else :
63- return True
67+ difference = self .difference (request )
68+ if difference :
69+ print ( difference )
70+ return not difference
6471
6572
6673class NoHandlerError (Exception ):
@@ -100,13 +107,13 @@ def match(self, request):
100107 for requesthandler in self :
101108 if requesthandler .matcher .match (request ):
102109 return requesthandler
110+ return None
103111
104112
105113class Server :
106114 def __init__ (self , host = "localhost" , port = 4000 ):
107115 self .host = host
108116 self .port = port
109- self .handlers = {}
110117 self .assertions = []
111118 self .server = None
112119 self .server_thread = None
@@ -130,7 +137,7 @@ def create_matcher(self, *args, **kwargs):
130137 return RequestMatcher (* args , ** kwargs )
131138
132139 def expect_oneshot_request (self , uri , method = "GET" , data = None , data_encoding = "utf-8" , headers = None , ordered = False ):
133- matcher = self .create_matcher (uri , method = "GET" , data = None , data_encoding = "utf-8" , headers = None )
140+ matcher = self .create_matcher (uri , method = method , data = data , data_encoding = data_encoding , headers = headers )
134141 request_handler = RequestHandler (matcher )
135142 if ordered :
136143 self .ordered_handlers .append (request_handler )
@@ -139,8 +146,8 @@ def expect_oneshot_request(self, uri, method="GET", data=None, data_encoding="ut
139146
140147 return request_handler
141148
142- def expect_request (self , uri , method = "GET" , data = None , data_encoding = "utf-8" , headers = None ):
143- matcher = self .create_matcher (uri , method = "GET" , data = None , data_encoding = "utf-8" , headers = None )
149+ def expect_request (self , uri , method = "GET" , data = None , data_encoding = "utf-8" , headers = None ) -> RequestHandler :
150+ matcher = self .create_matcher (uri , method = method , data = data , data_encoding = data_encoding , headers = headers )
144151 request_handler = RequestHandler (matcher )
145152 self .handlers .append (request_handler )
146153 return request_handler
@@ -154,7 +161,10 @@ def start(self):
154161 self .server_thread .start ()
155162
156163 def stop (self ):
164+ t1 = time .time ()
157165 self .server .shutdown ()
166+ print (time .time () - t1 )
167+
158168 self .server_thread .join ()
159169 self .server = None
160170 self .server_thread = None
@@ -166,8 +176,29 @@ def check_assertions(self):
166176 if self .assertions :
167177 raise AssertionError (self .assertions .pop (0 ))
168178
179+ def format_nohandler_assertion (self , request ):
180+ def format_handlers (handlers ):
181+ if handlers :
182+ return [" {!r}" .format (handler .matcher ) for handler in handlers ]
183+ else :
184+ return [" none" ]
185+
186+ lines = []
187+ lines .append ("No handler found for request {!r}." .format (request ))
188+ lines .append ("" )
189+ lines .append ("Ordered matchers:" )
190+ lines .extend (format_handlers (self .ordered_handlers ))
191+ lines .append ("" )
192+ lines .append ("Oneshot matchers:" )
193+ lines .extend (format_handlers (self .oneshot_handlers ))
194+ lines .append ("" )
195+ lines .append ("Persistent matchers:" )
196+ lines .extend (format_handlers (self .handlers ))
197+
198+ return "\n " .join (lines )
199+
169200 def respond_nohandler (self , request : Request ):
170- self .add_assertion ("No handler found for request {!r}" . format (request ))
201+ self .add_assertion (self . format_nohandler_assertion (request ))
171202 return Response ("No handler found for this request" , 500 )
172203
173204 def dispatch (self , request ):
0 commit comments