Mutations¶
Warning
Please, make sure you've covered Reference / Basics first.
Mutations are conversions which update the data in-place. Here is the list of supported mutations:
c.Mut.set_item(name, value)
-d[name] = value
but as conversionsc.Mut.set_attr(name, value)
-setattr(obj, name, value)
c.Mut.del_item(index)
-d.pop(index)
c.Mut.del_item(index, if_exists=True)
-d.pop(index, None)
c.Mut.del_attr(index)
-delattr(obj, index)
c.Mut.del_attr(index, if_exists=True)
- same, but if the attr existsc.Mut.custom(any_conversion)
and they cannot be used outside of the below methods.
c.iter_mut¶
c.iter_mut(*mutations)
mutates each element of a sequence and returns an
iterator of mutated objects.
from convtools import conversion as c
input_data = [{"a": 1, "b": 2}]
converter = (
c.iter_mut(
c.Mut.set_item("c", c.item("a") + c.item("b")),
c.Mut.del_item("a"),
c.Mut.del_item("d", if_exists=True),
c.Mut.custom(c.this.call_method("update", c.input_arg("extra"))),
)
.as_type(list)
.gen_converter(debug=True)
)
assert converter(input_data, extra={"d": 4}) == [{"b": 2, "c": 3, "d": 4}]
def iter_mut__(extra, data_):
for item__ in data_:
item__["c"] = item__["a"] + item__["b"]
item__.pop("a")
item__.pop("d", None)
item__.update(extra)
yield item__
def converter(data_, *, extra):
try:
return list(iter_mut__(extra, data_))
except __exceptions_to_dump_sources:
__convtools__code_storage.dump_sources()
raise
c.tap¶
c.tap(*mutations)
and tap
conversion method mutate a single object.
from convtools import conversion as c
input_data = [{"a": 1, "b": 2}]
converter = c.list_comp(
c.tap(
c.Mut.set_item("c", c.item("a") + c.item("b")),
c.Mut.del_item("a"),
c.Mut.custom(c.this.call_method("update", c.input_arg("data"))),
)
).gen_converter(debug=True)
assert converter(input_data, data={"d": 4}) == [{"b": 2, "c": 3, "d": 4}]
def tap__(data, data_):
data_["c"] = data_["a"] + data_["b"]
data_.pop("a")
data_.update(data)
return data_
def converter(data_, *, data):
try:
return [tap__(data, i) for i in data_]
except __exceptions_to_dump_sources:
__convtools__code_storage.dump_sources()
raise