Skip to content

"Select" fails when PrimaryKey is Buffer object #355

@ichorid

Description

@ichorid

When buffer is used as PrimaryKey, select always fails:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-24-08cbfe0fdb1f> in <module>()
----> 1 q[:]

/home/vader/.pyenv/versions/2.7.14/envs/tribler/lib/python2.7/site-packages/pony/orm/core.pyc in __getitem__(query, key)

/home/vader/.pyenv/versions/2.7.14/envs/tribler/lib/python2.7/site-packages/pony/utils/utils.pyc in cut_traceback(func, *args, **kwargs)
     75             if module_name.startswith('pony.utils') and tb.tb_frame.f_code.co_name == 'throw':
     76                 reraise(exc_type, exc, last_pony_tb)
---> 77             reraise(exc_type, exc, full_tb)
     78         finally:
     79             del exc, full_tb, tb, last_pony_tb

/home/vader/.pyenv/versions/2.7.14/envs/tribler/lib/python2.7/site-packages/pony/utils/utils.pyc in cut_traceback(func, *args, **kwargs)
     58         return func(*args, **kwargs)
     59 
---> 60     try: return func(*args, **kwargs)
     61     except AssertionError: raise
     62     except Exception:

/home/vader/.pyenv/versions/2.7.14/envs/tribler/lib/python2.7/site-packages/pony/orm/core.pyc in __getitem__(query, key)
   5692             stop = key.stop
   5693             if stop is None:
-> 5694                 if not start: return query._fetch()
   5695                 else: throw(TypeError, "Parameter 'stop' of slice object should be specified")
   5696         else: throw(TypeError, 'If you want apply index to query, convert it to list first')

/home/vader/.pyenv/versions/2.7.14/envs/tribler/lib/python2.7/site-packages/pony/orm/core.pyc in _fetch(query, range)
   5345                 entity = translator.expr_type
   5346                 result = entity._fetch_objects(cursor, attr_offsets, for_update=query._for_update,
-> 5347                                                used_attrs=translator.get_used_attrs())
   5348             elif len(translator.row_layout) == 1:
   5349                 func, slice_or_offset, src = translator.row_layout[0]

/home/vader/.pyenv/versions/2.7.14/envs/tribler/lib/python2.7/site-packages/pony/orm/core.pyc in _fetch_objects(entity, cursor, attr_offsets, max_fetch_count, for_update, used_attrs)
   3989             for row in rows:
   3990                 real_entity_subclass, pkval, avdict = entity._parse_row_(row, attr_offsets)
-> 3991                 obj = real_entity_subclass._get_from_identity_map_(pkval, 'loaded', for_update)
   3992                 if obj._status_ in del_statuses: continue
   3993                 obj._db_set_(avdict)

/home/vader/.pyenv/versions/2.7.14/envs/tribler/lib/python2.7/site-packages/pony/orm/core.pyc in _get_from_identity_map_(entity, pkval, status, for_update, undo_funcs, obj_to_init)
   4083         cache_index = cache.indexes[pk_attrs]
   4084         if pkval is None: obj = None
-> 4085         else: obj = cache_index.get(pkval)
   4086 
   4087         if obj is None: pass

TypeError: writable buffers are not hashable

Steps to reproduce:

from pony import orm

db = orm.Database()
class Bla(db.Entity):
    smt = orm.PrimaryKey(buffer, auto=False)
db.bind(provider='sqlite', filename=':memory:')
db.generate_mapping(create_tables=True)
a = Bla(smt=str(0x01)*20)
q = orm.select(p for p in Bla)[:]

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions