In [8]: from riak import RiakClient
In [9]: c = RiakClient()
In [14]: b = c.bucket_type('maps').bucket('wow')
In [15]: m = b.get('key')
In [16]: m.maps['such'].counters['very'].increment(0)
In [17]: m.to_op()
Out[17]: [('update', ('such', 'map'), None)]
In [18]: m.update()
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-18-4208fc8f76fe> in <module>()
----> 1 m.update()
/lib/python3.4/site-packages/riak/datatypes/datatype.py in update(self, **params)
143
144 params.setdefault('return_body', True)
--> 145 self.bucket._client.update_datatype(self, **params)
146 self.clear()
147
/lib/python3.4/site-packages/riak/client/operations.py in update_datatype(self, datatype, w, dw, pw, return_body, timeout, include_context)
999 return_body=return_body,
1000 timeout=timeout,
-> 1001 include_context=include_context)
1002
1003 @retryable
/lib/python3.4/site-packages/riak/transports/pbc/transport.py in update_datatype(self, datatype, **options)
687 self._encode_dt_options(req, options)
688
--> 689 self._encode_dt_op(type_name, req, op)
690
691 msg_code, resp = self._request(MSG_CODE_DT_UPDATE_REQ, req,
/lib/python3.4/site-packages/riak/transports/pbc/codec.py in _encode_dt_op(self, dtype, req, op)
578 self._encode_set_op(req.op, op)
579 elif dtype == 'map':
--> 580 self._encode_map_op(req.op.map_op, op)
581 else:
582 raise TypeError("Cannot send operation on datatype {!r}".
/lib/python3.4/site-packages/riak/transports/pbc/codec.py in _encode_map_op(self, msg, ops)
605 update.field.name = str_to_bytes(name)
606 update.field.type = ftype
--> 607 self._encode_map_update(dtype, update, op[2])
608
609 def _encode_map_update(self, dtype, msg, op):
/lib/python3.4/site-packages/riak/transports/pbc/codec.py in _encode_map_update(self, dtype, msg, op)
614 self._encode_set_op(msg, op)
615 elif dtype == 'map':
--> 616 self._encode_map_op(msg.map_op, op)
617 elif dtype == 'register':
618 # ('assign', some_str)
/lib/python3.4/site-packages/riak/transports/pbc/codec.py in _encode_map_op(self, msg, ops)
590
591 def _encode_map_op(self, msg, ops):
--> 592 for op in ops:
593 name, dtype = op[1]
594 ftype = MAP_FIELD_TYPES[dtype]
TypeError: 'NoneType' object is not iterable
In [19]: m.modified
Out[19]: True
modified and to_op()must be None.Furthermore, just triggering empty
m.maps['blabla'].counters['blablabla'].valuechanges state ofmto modified. It is a get operation and get operations are idempotent and must not change the state of the underlying object.