Skip to content

Commit 91fad2d

Browse files
committed
pattern_matcher beta finish
1 parent 482516a commit 91fad2d

2 files changed

Lines changed: 19 additions & 5 deletions

File tree

src/os_urlpattern/cmdline.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ def _match_result(self, pattern_matcher, raw_url):
183183
try:
184184
url = raw_url.decode(DEFAULT_ENCODING)
185185
result = pattern_matcher.match(url)
186+
result = ", ".join([r.info['ptn'] for r in result])
186187
except (InvalidPatternException,
187188
IrregularURLException,
188189
InvalidCharException,

src/os_urlpattern/pattern_matcher.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

6161
class 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

Comments
 (0)