1+ from werkzeug .routing import Map , Rule
2+
3+ class Router (object ):
4+ def __init__ (self , url_map = None ):
5+ self ._url_map = url_map or Map ([])
6+ self ._view_functions = {}
7+ self ._adapter = None
8+
9+
10+ def add (self , name , pattern , view_func , defaults = None , subdomain = None , methods = None ,
11+ build_only = False , strict_slashes = None ,
12+ redirect_to = None , alias = False , host = None ):
13+
14+ self ._url_map .add (Rule (pattern , endpoint = name , defaults = defaults , subdomain = subdomain , methods = methods ,
15+ build_only = build_only , strict_slashes = strict_slashes , redirect_to = redirect_to ,
16+ alias = alias , host = host ))
17+
18+ self ._view_functions [name ] = view_func
19+
20+ self ._adapter = None
21+
22+ def adapter (self ):
23+ if not self ._adapter :
24+ self ._adapter = self ._url_map .bind ("localhost" )
25+
26+ return self ._adapter
27+
28+ def match (self , path_info = None , method = None , return_rule = False , query_args = None ):
29+ name , parameters = self .adapter ().match (path_info , method , return_rule , query_args )
30+
31+ return name , parameters , self ._view_functions [name ]
32+
33+ def generate (self , name , values = None , method = None , force_external = False , append_unknown = True ):
34+
35+ return self .adapter ().build (name , values , method , force_external , append_unknown )
0 commit comments