from uuid import UUID from pydantic import BaseModel class SessionCache(BaseModel): session_id: UUID set_interface: list[int] | None = None confirm_interface: list[int] | None = None set_key_entry: list[int] | None = None confirm_key_entry: list[int] | None = None username: str | None = None customer_id: UUID def deduce_passcode(self, attrs_per_key, confirm_key_entry: list[int]) -> list[int]: set_key_entry = self.set_key_entry assert (len(set_key_entry) == len(confirm_key_entry)) set_interface = self.set_interface confirm_interface = self.confirm_interface set_key_vals = [set_interface[key * attrs_per_key:(key + 1) * attrs_per_key] for key in set_key_entry] confirm_key_vals = [confirm_interface[key * attrs_per_key:(key + 1) * attrs_per_key] for key in confirm_key_entry] passcode = [] for idx in range(len(set_key_entry)): set_key = set(set_key_vals[idx]) confirm_key = set(confirm_key_vals[idx]) intersection = list(set_key.intersection(confirm_key)) assert (len(intersection) == 1) passcode.append(intersection[0]) return passcode