def bulk_create_huddles(users, huddle_user_list): # type: (Dict[text_type, UserProfile], Iterable[Iterable[text_type]]) -> None huddles = {} # type: Dict[text_type, Huddle] huddles_by_id = {} # type: Dict[int, Huddle] huddle_set = set() # type: Set[Tuple[text_type, Tuple[int, ...]]] existing_huddles = set() # type: Set[text_type] for huddle in Huddle.objects.all(): existing_huddles.add(huddle.huddle_hash) for huddle_users in huddle_user_list: user_ids = [users[email].id for email in huddle_users] # type: List[int] huddle_hash = get_huddle_hash(user_ids) if huddle_hash in existing_huddles: continue huddle_set.add((huddle_hash, tuple(sorted(user_ids)))) huddles_to_create = [] # type: List[Huddle] for (huddle_hash, _) in huddle_set: huddles_to_create.append(Huddle(huddle_hash=huddle_hash)) Huddle.objects.bulk_create(huddles_to_create) for huddle in Huddle.objects.all(): huddles[huddle.huddle_hash] = huddle huddles_by_id[huddle.id] = huddle recipients_to_create = [] # type: List[Recipient] for (huddle_hash, _) in huddle_set: recipients_to_create.append( Recipient(type_id=huddles[huddle_hash].id, type=Recipient.HUDDLE)) Recipient.objects.bulk_create(recipients_to_create) huddle_recipients = {} # type: Dict[text_type, Recipient] for recipient in Recipient.objects.filter(type=Recipient.HUDDLE): huddle_recipients[huddles_by_id[ recipient.type_id].huddle_hash] = recipient subscriptions_to_create = [] # type: List[Subscription] for (huddle_hash, huddle_user_ids) in huddle_set: for user_id in huddle_user_ids: subscriptions_to_create.append( Subscription(active=True, user_profile_id=user_id, recipient=huddle_recipients[huddle_hash])) Subscription.objects.bulk_create(subscriptions_to_create)
def bulk_create_huddles(users, huddle_user_list): huddles = {} huddles_by_id = {} huddle_set = set() existing_huddles = set() for huddle in Huddle.objects.all(): existing_huddles.add(huddle.huddle_hash) for huddle_users in huddle_user_list: user_ids = [users[email].id for email in huddle_users] huddle_hash = get_huddle_hash(user_ids) if huddle_hash in existing_huddles: continue huddle_set.add((huddle_hash, tuple(sorted(user_ids)))) huddles_to_create = [] for (huddle_hash, _) in huddle_set: huddles_to_create.append(Huddle(huddle_hash=huddle_hash)) Huddle.objects.bulk_create(huddles_to_create) for huddle in Huddle.objects.all(): huddles[huddle.huddle_hash] = huddle huddles_by_id[huddle.id] = huddle recipients_to_create = [] for (huddle_hash, _) in huddle_set: recipients_to_create.append( Recipient(type_id=huddles[huddle_hash].id, type=Recipient.HUDDLE)) Recipient.objects.bulk_create(recipients_to_create) huddle_recipients = {} for recipient in Recipient.objects.filter(type=Recipient.HUDDLE): huddle_recipients[huddles_by_id[ recipient.type_id].huddle_hash] = recipient subscriptions_to_create = [] for (huddle_hash, huddle_user_ids) in huddle_set: for user_id in huddle_user_ids: subscriptions_to_create.append( Subscription(active=True, user_profile_id=user_id, recipient=huddle_recipients[huddle_hash])) Subscription.objects.bulk_create(subscriptions_to_create)
def build_huddle(huddle_id: int) -> ZerverFieldsT: huddle = Huddle(id=huddle_id, ) return model_to_dict(huddle)