Is that suggested code? I don't follow.

But if it is, no. personally, I think ANY use of system settings is a bad
idea [*]. But certainly no need to even think about it for JSON.

-CHB

* have we not learned that in the age of the internet the machine the code
happens to be running on has nothing to do with the user of the
applications' needs? Timezones, encodings, number formats, NOTHING.


On Wed, Sep 16, 2020 at 8:45 PM Wes Turner <wes.tur...@gmail.com> wrote:

> 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
>>
>

-- 
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/PKD2CKYJIWXNDMI6GFDFOUPNHDVMCDJP/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to