Is all of this locale/encoding testing necessary (or even sufficient)?
```python import json import locale import os def get_default_encoding(): """ TODO XXX: ??? """ default_encoding = locale.getdefaultlocale()[1] if default_encoding.startswith("UTF-"): return default_encoding else: return "UTF-8" def dumpf(obj, path, *args, **kwargs): with open( os.fspath(path), "w", encoding=kwargs.pop("encoding", get_default_encoding()), ) as file_: return json.dump(obj, file_, *args, **kwargs) def loadf(path, *args, **kwargs): with open( os.fspath(path), "r", encoding=kwargs.pop("encoding", get_default_encoding()), ) as file_: return json.load(file_, *args, **kwargs) import pathlib import unittest class TestJsonLoadfAndDumpf(unittest.TestCase): def setUp(self): self.locales = ["", "C", "en_US.UTF-8", "japanese"] self.encodings = [None, "UTF-8", "UTF-16", "UTF-32"] data = dict( obj=dict(a=dict(b=[1, 2, 3])), encoding=None, path=pathlib.Path(".") / "test_loadf_and_dumpf.json", ) if os.path.isfile(data["path"]): os.unlink(data["path"]) self.data = data self.previous_locale = locale.getlocale() def tearDown(self): locale.setlocale(locale.LC_ALL, self.previous_locale) def test_get_default_encoding(self): for localestr in self.locales: locale.setlocale(locale.LC_ALL, localestr) output = get_default_encoding() assert output.startswith("UTF-") def test_dumpf_and_loadf(self): data = self.data for localestr in self.locales: locale.setlocale(locale.LC_ALL, localestr) for encoding in self.encodings: dumpf_output = dumpf( data["obj"], data["path"], encoding=encoding ) loadf_output = loadf(data["path"], encoding=encoding) assert loadf_output == data["obj"] ``` On Wed, Sep 16, 2020 at 8:30 PM Christopher Barker <python...@gmail.com> wrote: > On Wed, Sep 16, 2020 at 2:53 PM Wes Turner <wes.tur...@gmail.com> wrote: > >> So I was not correct: dump does not default to UTF-8 (and does not accept >> an encoding= parameter) >> >> >>> I think dumpf() should use UTF-8, and that's it. If anyone really wants >>> something else, they can get it by providing an open text file object. >>> >> >> Why would we impose UTF-8 when the spec says UTF-8, UTF-16, or UTF-32? >> > > The idea was that the encoding was one of the motivators to doing this in > the first place. But I suppose as long as utf-8 is the default, and only > the three "official" ones are allowed, then yeah, we could add an encoding > keyword argument. > > -CHB > > > -- > Christopher Barker, PhD > > Python Language Consulting > - Teaching > - Scientific Software Development > - Desktop GUI and Web Development > - wxPython, numpy, scipy, Cython >
_______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/G72K6AGXLVMBQAZYECK6N5VGBYDD3RYL/ Code of Conduct: http://python.org/psf/codeofconduct/