diff options
author | Edward Welbourne <edward.welbourne@qt.io> | 2024-01-23 21:14:47 +0100 |
---|---|---|
committer | Edward Welbourne <edward.welbourne@qt.io> | 2024-01-29 15:14:43 +0100 |
commit | c8b70f4e511e26c73a9da453f4c2b5624e66a2c1 (patch) | |
tree | 90e14fffaf94126e709b2aa855ed9c2961ccbcf6 /util/locale_database/ldml.py | |
parent | 82f8afe6bab42b7b70f571825d23cbb9270b9071 (diff) |
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>
Diffstat (limited to 'util/locale_database/ldml.py')
-rw-r--r-- | util/locale_database/ldml.py | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/util/locale_database/ldml.py b/util/locale_database/ldml.py index d259bedba1..4ee5868e57 100644 --- a/util/locale_database/ldml.py +++ b/util/locale_database/ldml.py @@ -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,19 +444,23 @@ class LocaleScanner (object): if not roots: if retries: # Let outer loop fall back on an alias path: break - sought = '/'.join(tags) - if sought != xpath: - sought += f' (for {xpath})' - raise Error(f'All lack child {selector} for {sought} in {self.name}') + 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 - sought = '/'.join(tags) - if sought != xpath: - sought += f' (for {xpath})' - raise Error(f'No {sought} in {self.name}') + if foundNone: + sought = '/'.join(tags) + if sought != xpath: + sought += f' (for {xpath})' + raise Error(f'No {sought} in {self.name}') def __currencyDisplayName(self, stem): try: |