summaryrefslogtreecommitdiffstats
path: root/util/locale_database/qlocalexml2cpp.py
diff options
context:
space:
mode:
authorIevgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>2021-07-12 14:11:39 +0200
committerIevgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io>2021-07-20 16:51:51 +0200
commite9519d207e3c38ca779f7dcfc5e5a716ec041590 (patch)
tree450fc31e0c5fa7e3832c60c22130fd666a97e112 /util/locale_database/qlocalexml2cpp.py
parent424243ab175eafc1dc9d4fe795f02147d519654d (diff)
locale_database: Use context manager interface to update source files
Use context manager interface (with statement) to atomically update source files. This ensures that all files are properly closed and the temporary file is removed even in case of errors. Task-number: QTBUG-83488 Pick-to: 6.2 Change-Id: I18cd96f1d03e467dea6212f6576a41e65f414ce1 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'util/locale_database/qlocalexml2cpp.py')
-rwxr-xr-xutil/locale_database/qlocalexml2cpp.py107
1 files changed, 39 insertions, 68 deletions
diff --git a/util/locale_database/qlocalexml2cpp.py b/util/locale_database/qlocalexml2cpp.py
index 9866bd6ea7..7ac7945cf8 100755
--- a/util/locale_database/qlocalexml2cpp.py
+++ b/util/locale_database/qlocalexml2cpp.py
@@ -135,10 +135,14 @@ def currencyIsoCodeData(s):
class LocaleSourceEditor (SourceFileEditor):
def __init__(self, path: Path, temp: Path, version: str):
super().__init__(path, temp)
+ self.version = version
+
+ def onEnter(self) -> None:
+ super().onEnter()
self.writer.write(f"""
/*
This part of the file was generated on {datetime.date.today()} from the
- Common Locale Data Repository v{version}
+ Common Locale Data Repository v{self.version}
http://www.unicode.org/cldr/
@@ -535,89 +539,56 @@ def main(out, err):
locale_keys = sorted(locale_map.keys(), key=LocaleKeySorter(reader.defaultMap()))
try:
- writer = LocaleDataWriter(qtsrcdir.joinpath('src/corelib/text/qlocale_data_p.h'),
- qtsrcdir, reader.cldrVersion)
- except IOError as e:
- err.write(f'Failed to open files to transcribe locale data: {e}')
- return 1
-
- try:
- writer.likelySubtags(reader.likelyMap())
- writer.localeIndex(reader.languageIndices(tuple(k[0] for k in locale_map)))
- writer.localeData(locale_map, locale_keys)
- writer.writer.write('\n')
- writer.languageNames(reader.languages)
- writer.scriptNames(reader.scripts)
- writer.territoryNames(reader.territories)
- # TODO: merge the next three into the previous three
- writer.languageCodes(reader.languages)
- writer.scriptCodes(reader.scripts)
- writer.territoryCodes(reader.territories)
- except Error as e:
- writer.cleanup()
+ with LocaleDataWriter(qtsrcdir.joinpath('src/corelib/text/qlocale_data_p.h'),
+ qtsrcdir, reader.cldrVersion) as writer:
+ writer.likelySubtags(reader.likelyMap())
+ writer.localeIndex(reader.languageIndices(tuple(k[0] for k in locale_map)))
+ writer.localeData(locale_map, locale_keys)
+ writer.writer.write('\n')
+ writer.languageNames(reader.languages)
+ writer.scriptNames(reader.scripts)
+ writer.territoryNames(reader.territories)
+ # TODO: merge the next three into the previous three
+ writer.languageCodes(reader.languages)
+ writer.scriptCodes(reader.scripts)
+ writer.territoryCodes(reader.territories)
+ except Exception as e:
err.write(f'\nError updating locale data: {e}\n')
return 1
- writer.close()
-
# Generate calendar data
for calendar, stem in calendars.items():
try:
- writer = CalendarDataWriter(
- qtsrcdir.joinpath(f'src/corelib/time/q{stem}calendar_data_p.h'),
- qtsrcdir, reader.cldrVersion)
- except IOError as e:
- err.write(f'Failed to open files to transcribe {calendar} data {e}')
- return 1
-
- try:
- writer.write(calendar, locale_map, locale_keys)
- except Error as e:
- writer.cleanup()
+ with CalendarDataWriter(
+ qtsrcdir.joinpath(f'src/corelib/time/q{stem}calendar_data_p.h'),
+ qtsrcdir, reader.cldrVersion) as writer:
+ writer.write(calendar, locale_map, locale_keys)
+ except Exception as e:
err.write(f'\nError updating {calendar} locale data: {e}\n')
- return 1
-
- writer.close()
# qlocale.h
try:
- writer = LocaleHeaderWriter(qtsrcdir.joinpath('src/corelib/text/qlocale.h'),
- qtsrcdir, reader.dupes)
- except IOError as e:
- err.write(f'Failed to open files to transcribe qlocale.h: {e}')
- return 1
-
- try:
- writer.languages(reader.languages)
- writer.scripts(reader.scripts)
- writer.territories(reader.territories)
- except Error as e:
- writer.cleanup()
+ with LocaleHeaderWriter(qtsrcdir.joinpath('src/corelib/text/qlocale.h'),
+ qtsrcdir, reader.dupes) as writer:
+ writer.languages(reader.languages)
+ writer.scripts(reader.scripts)
+ writer.territories(reader.territories)
+ except Exception as e:
err.write(f'\nError updating qlocale.h: {e}\n')
- return 1
-
- writer.close()
# qlocale.qdoc
try:
- writer = Transcriber(qtsrcdir.joinpath('src/corelib/text/qlocale.qdoc'), qtsrcdir)
- except IOError as e:
- err.write(f'Failed to open files to transcribe qlocale.qdoc: {e}')
- return 1
-
- DOCSTRING = " QLocale's data is based on Common Locale Data Repository "
- try:
- for line in writer.reader:
- if DOCSTRING in line:
- writer.writer.write(f'{DOCSTRING}v{reader.cldrVersion}.\n')
- else:
- writer.writer.write(line)
- except Error as e:
- writer.cleanup()
- err.write(f'\nError updating qlocale.qdoc: {e}\n')
+ with Transcriber(qtsrcdir.joinpath('src/corelib/text/qlocale.qdoc'), qtsrcdir) as qdoc:
+ DOCSTRING = " QLocale's data is based on Common Locale Data Repository "
+ for line in qdoc.reader:
+ if DOCSTRING in line:
+ qdoc.writer.write(f'{DOCSTRING}v{reader.cldrVersion}.\n')
+ else:
+ qdoc.writer.write(line)
+ except Exception as e:
+ err.write(f'\nError updating qlocale.h: {e}\n')
return 1
- writer.close()
return 0
if __name__ == "__main__":