Skip to content

Using RWorkerProcess to send a Python range() object to R results in TypeError: Object of type range is not JSON serializable #42

@jjrob

Description

@jjrob

For example:

>>> from GeoEco.R import RWorkerProcess
>>> with RWorkerProcess() as r:
...     r['x'] = range(1,5)
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "C:\Users\jjr8\AppData\Local\ESRI\conda\envs\arcgispro-py3-denmod2\Lib\site-packages\GeoEco\R\_RWorkerProcess.py", line 1150, in __setitem__
    'data': self._SerializeValueToJSON({'value': value}),
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\jjr8\AppData\Local\ESRI\conda\envs\arcgispro-py3-denmod2\Lib\site-packages\GeoEco\R\_RWorkerProcess.py", line 1080, in _SerializeValueToJSON
    return json.dumps({'value': value}, cls=functools.partial(_CustomJSONEncoder, default_tzinfo=self._TZInfo))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\jjr8\AppData\Local\ESRI\conda\envs\arcgispro-py3-denmod2\Lib\json\__init__.py", line 238, in dumps
    **kw).encode(obj)
          ^^^^^^^^^^^
  File "C:\Users\jjr8\AppData\Local\ESRI\conda\envs\arcgispro-py3-denmod2\Lib\json\encoder.py", line 202, in encode
    chunks = list(chunks)
             ^^^^^^^^^^^^
  File "C:\Users\jjr8\AppData\Local\ESRI\conda\envs\arcgispro-py3-denmod2\Lib\json\encoder.py", line 432, in _iterencode
    yield from _iterencode_dict(o, _current_indent_level)
  File "C:\Users\jjr8\AppData\Local\ESRI\conda\envs\arcgispro-py3-denmod2\Lib\json\encoder.py", line 406, in _iterencode_dict
    yield from chunks
  File "C:\Users\jjr8\AppData\Local\ESRI\conda\envs\arcgispro-py3-denmod2\Lib\json\encoder.py", line 439, in _iterencode
    o = _default(o)
        ^^^^^^^^^^^
  File "C:\Users\jjr8\AppData\Local\ESRI\conda\envs\arcgispro-py3-denmod2\Lib\site-packages\GeoEco\R\_RWorkerProcess.py", line 65, in default
    return super().default(obj)
           ^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\jjr8\AppData\Local\ESRI\conda\envs\arcgispro-py3-denmod2\Lib\json\encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type range is not JSON serializable

We can work around this by calling list() on any range objects that the caller provides.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions