def test_bit_op(): # type: () -> None unset = operation.Unset() add_ = operation.BitAnd(123) assert_equal(add_._merge(unset).value, 0) or_ = operation.BitOr(321) assert_equal(or_._merge(unset).value, 321) xor = operation.BitOr(321) assert_equal(xor._merge(unset).value, 321)
def set(self, key_or_attrs, value=None, unset=False): """ 在当前对象此字段上赋值 :param key_or_attrs: 字段名,或者一个包含 字段名 / 值的 dict :type key_or_attrs: string_types or dict :param value: 字段值 :param unset: :return: 当前对象,供链式调用 """ if isinstance(key_or_attrs, dict) and value is None: attrs = key_or_attrs keys = attrs.keys() for k in keys: if isinstance(attrs[k], LocalProxy): attrs[k] = attrs[k]._get_current_object() else: key = key_or_attrs if isinstance(value, LocalProxy): value = value._get_current_object() attrs = {key: utils.decode(key, value)} if unset: for k in attrs.keys(): attrs[k] = operation.Unset() self.validate(attrs) self._merge_metadata(attrs) keys = list(attrs.keys()) for k in keys: v = attrs[k] # TODO: Relation if not isinstance(v, operation.BaseOp): v = operation.Set(v) self._attributes[k] = v._apply(self._attributes.get(k), self, k) if self._attributes[k] == operation._UNSET: del self._attributes[k] self._changes[k] = v._merge(self._changes.get(k)) return self
def set(self, key_or_attrs, value=None, unset=False): """ 在当前对象此字段上赋值 :param key_or_attrs: 字段名,或者一个包含 字段名 / 值的 dict :type key_or_attrs: basestring or dict :param value: 字段值 :param unset: :return: 当前对象,供链式调用 """ if isinstance(key_or_attrs, dict) and value is None: attrs = key_or_attrs keys = attrs.keys() for k in keys: if isinstance(attrs[k], LocalProxy): attrs[k] = attrs[k]._get_current_object() else: key = key_or_attrs if isinstance(value, LocalProxy): value = value._get_current_object() attrs = {key: utils.decode(key, value)} if unset: for k in attrs.keys(): attrs[k] = operation.Unset() self.validate(attrs) self._merge_magic_field(attrs) keys = attrs.keys() for k in keys: v = attrs[k] # TODO: Relation if not isinstance(v, operation.BaseOp): v = operation.Set(v) current_changes = self._op_set_queue[-1] current_changes[k] = v._merge(current_changes.get(k)) self._rebuild_attribute(k) return self
def test_unset(): # type: () -> None s = operation.Unset() assert s._apply(operation.Set(10)) == operation._UNSET
def test_unset(): s = operation.Unset() assert s._apply(operation.Set(10)) == operation._UNSET