diff options
author | Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io> | 2021-07-12 14:11:39 +0200 |
---|---|---|
committer | Ievgenii Meshcheriakov <ievgenii.meshcheriakov@qt.io> | 2021-07-20 16:51:51 +0200 |
commit | e9519d207e3c38ca779f7dcfc5e5a716ec041590 (patch) | |
tree | 450fc31e0c5fa7e3832c60c22130fd666a97e112 /util/locale_database/qlocalexml2cpp.py | |
parent | 424243ab175eafc1dc9d4fe795f02147d519654d (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-x | util/locale_database/qlocalexml2cpp.py | 107 |
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__": |