in geneve/solver/__init__.py [0:0]
def __call__(self, join_doc, environment):
history = self.get_history(environment)
if self.join_field_parts:
value = join_doc
for part in self.join_field_parts:
value = value[part]
if self.cardinality:
history[value] = None
return {"value": value}
if not self.cardinality or len(history) < self.cardinality:
value = self.solve(self.max_attempts + 1, environment)
if not value["left_attempts"]:
raise ConflictError(f"attempts exausted: {self.max_attempts}", self.field)
del value["left_attempts"]
if self.cardinality:
history[value["value"]] = None
else:
value = {"value": random.choice(list(history)[: self.cardinality])}
return value