ldml.LocaleScanner.__find(): only Error if no matches found
The existing caller returns early on finding a match, so never ran off the end of the iteration unless there were no matches. I'll soon be adding a new caller that wants to iterate all matches, so will run off the end even when there are some. So only raise the Error if we found nothing. Task-number: QTBUG-115158 Change-Id: I1cae4674eb5e83c433554c15ecc4441b756f20eb Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
This commit is contained in:
parent
82f8afe6ba
commit
c8b70f4e51
@ -413,7 +413,7 @@ class LocaleScanner (object):
|
||||
) # Used for month and day names
|
||||
|
||||
def __find(self, xpath):
|
||||
retries = [ xpath.split('/') ]
|
||||
retries, foundNone = [ xpath.split('/') ], True
|
||||
while retries:
|
||||
tags, elts, roots = retries.pop(), self.nodes, (self.base.root,)
|
||||
for selector in tags:
|
||||
@ -423,6 +423,8 @@ class LocaleScanner (object):
|
||||
break
|
||||
|
||||
else: # Found matching elements
|
||||
if elts:
|
||||
foundNone = False
|
||||
# Possibly filter elts to prefer the least drafty ?
|
||||
for elt in elts:
|
||||
yield elt
|
||||
@ -442,15 +444,19 @@ class LocaleScanner (object):
|
||||
if not roots:
|
||||
if retries: # Let outer loop fall back on an alias path:
|
||||
break
|
||||
if foundNone:
|
||||
sought = '/'.join(tags)
|
||||
if sought != xpath:
|
||||
sought += f' (for {xpath})'
|
||||
raise Error(f'All lack child {selector} for {sought} in {self.name}')
|
||||
|
||||
else: # Found matching elements
|
||||
if roots:
|
||||
foundNone = False
|
||||
for elt in roots:
|
||||
yield elt
|
||||
|
||||
if foundNone:
|
||||
sought = '/'.join(tags)
|
||||
if sought != xpath:
|
||||
sought += f' (for {xpath})'
|
||||
|
Loading…
x
Reference in New Issue
Block a user