FactoryBoy / factory_boy

A test fixtures replacement for Python

Home Page:https://factoryboy.readthedocs.io/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

LazySelfAttribute

KrzysztofMadejski opened this issue · comments

The problem

Reference other attribute, but modify it easily, ie.

 owner = LazySelfAttribute(".ownership_chain", lambda chain: chain[-1].seller)

Proposed solution

Merge LazyAttribute and SelfAttribute.

class LazySelfAttribute(SelfAttribute):
    def __init__(self, attribute_name, function, default=_UNSPECIFIED):
        super().__init__(attribute_name, default)
        self.function = function

    def evaluate(self, instance, step, extra):
        value = super().evaluate(instance, step, extra)
        return self.function(value)

It has been working great for me.