Looks for a model that matches the given dictionary constraints. If it is not found, a new
    model of the given type is constructed and returned.

def find_or_build(self, constructor, props):
    """Looks for a model that matches the given dictionary constraints. If it is not found, a new
    model of the given type is constructed and returned.
    """
    model = self.find_model(constructor, props)
    return model or constructor(**props)