@@ -55,7 +55,7 @@ def match(self, parsed_piece):
5555 return []
5656 parsed_pieces = [EMPTY_PARSED_PIECE , ]
5757 parsed_pieces .extend (view .parsed_pieces )
58- return self ._nodes [view .view ].match (parsed_pieces )
58+ return [ n . info for n in self ._nodes [view .view ].match (parsed_pieces )]
5959
6060
6161class PiecePatternViewMatcher (_ViewMatcher ):
@@ -140,6 +140,9 @@ def __init__(self, pattern, info=None):
140140 self ._view_matchers = OrderedDict ([(view_cls , matcher_cls (view_cls ))
141141 for view_cls , matcher_cls in VIEW_MATCHERS ])
142142
143+ def leaf (self ):
144+ return len (self ._children ) == 0
145+
143146 def preprocess (self ):
144147 if not self ._children :
145148 self ._view_matchers = {}
@@ -158,9 +161,16 @@ def preprocess(self):
158161 def iter_children (self ):
159162 return itervalues (self ._children )
160163
161- def match (self , parsed_pieces , idx ):
162- if not self ._children :
163- return self .info
164+ def match (self , parsed_pieces , idx , matched_nodes ):
165+ parsed_piece = parsed_pieces [idx ]
166+ for matcher in itervalues (self ._view_matchers ):
167+ nodes = matcher .match (parsed_piece )
168+ for node in nodes :
169+ if node .leaf ():
170+ matched_nodes .append (node )
171+ return
172+ else :
173+ node .match (parsed_pieces , idx + 1 , matched_nodes )
164174
165175 @property
166176 def pattern (self ):
@@ -209,7 +219,9 @@ def root(self):
209219 return self ._root
210220
211221 def match (self , parsed_pieces ):
212- return self ._root .match (parsed_pieces , 0 )
222+ matched_nodes = []
223+ self ._root .match (parsed_pieces , 0 , matched_nodes )
224+ return matched_nodes
213225
214226 def preprocess (self ):
215227 self ._root .preprocess ()
@@ -240,3 +252,4 @@ def match(self, url):
240252 sid = digest (url_meta , [p .fuzzy_rule for p in parsed_pieces ])
241253 if sid in self ._pattern_match_trees :
242254 return self ._pattern_match_trees [sid ].match (parsed_pieces )
255+ return []
0 commit comments