Looks for a model taht matches the given dictionary constraints. If it is not found, a new
    model of the given type is created and saved to the database, then returned.

def find_or_create(self, constructor, props, *, comp=None):
    """Looks for a model taht matches the given dictionary constraints. If it is not found, a new
    model of the given type is created and saved to the database, then returned.
    """
    model = self.find_model(constructor, comp or props)
    if model is None:
      model = constructor(**props)
      self.insert_model(model)
    return model