davidlatwe / montydb

Monty, Mongo tinified. MongoDB implemented in Python !

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

`bytes` type unsupported

strayge opened this issue · comments

Issue

Cannot store bytes as values.

Env

Windows 10
Python 3.8.1
MontyDB 2.3.6

Actual error

>>> from montydb import MontyClient
>>> col = MontyClient(":memory:").db.test
>>> col.insert_one({'data': b'some bytes'})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\user\.virtualenvs\name\lib\site-packages\montydb\collection.py", line 139, in insert_one
    result = self._storage.write_one(self, document)
  File "C:\Users\user\.virtualenvs\name\lib\site-packages\montydb\storage\__init__.py", line 45, in delegate
    return getattr(delegator, attr)(*args, **kwargs)
  File "C:\Users\user\.virtualenvs\name\lib\site-packages\montydb\storage\memory.py", line 120, in write_one
    self._col[b_id] = self._encode_doc(doc, check_keys)
  File "C:\Users\user\.virtualenvs\name\lib\site-packages\montydb\storage\__init__.py", line 183, in _encode_doc
    return bson.document_encode(
  File "C:\Users\user\.virtualenvs\name\lib\site-packages\montydb\types\_bson.py", line 236, in document_encode
    for s in _encoder.iterencode(doc):
  File "C:\Program Files\Python38\lib\json\encoder.py", line 431, in _iterencode
    yield from _iterencode_dict(o, _current_indent_level)
  File "C:\Program Files\Python38\lib\json\encoder.py", line 405, in _iterencode_dict
    yield from chunks
  File "C:\Program Files\Python38\lib\json\encoder.py", line 438, in _iterencode
    o = _default(o)
  File "C:\Users\user\.virtualenvs\name\lib\site-packages\montydb\types\_bson.py", line 222, in default
    return NoBSON.JSONEncoder.default(self, obj)
  File "C:\Program Files\Python38\lib\json\encoder.py", line 179, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type bytes is not JSON serializable

Same with PyMongo

>>> from pymongo import MongoClient
>>> col = MongoClient('127.0.0.1').tests.test1
>>> col.insert_one({'data': b'some bytes'})
<pymongo.results.InsertOneResult object at 0x000002BBB52BC7C0>
>>> next(col.find())
{'_id': ObjectId('60bdaa528ff3727b58f514f7'), 'data': b'some bytes'}

Thanks, will look into this later today.

Fixed and released 2.3.7