Select a stable user subset without modifying the database.
(
users: List[Dict[str, Any]],
*,
user_ids: Optional[List[str]] = None,
user_count: Optional[int] = None,
)
| 853 | |
| 854 | |
| 855 | def select_users( |
| 856 | users: List[Dict[str, Any]], |
| 857 | *, |
| 858 | user_ids: Optional[List[str]] = None, |
| 859 | user_count: Optional[int] = None, |
| 860 | ) -> List[Dict[str, Any]]: |
| 861 | """Select a stable user subset without modifying the database.""" |
| 862 | if user_ids: |
| 863 | users_by_id = {str(user.get("user_id")): user for user in users} |
| 864 | missing = [user_id for user_id in user_ids if user_id not in users_by_id] |
| 865 | if missing: |
| 866 | raise SystemExit(f"Unknown user id(s): {', '.join(missing)}") |
| 867 | return [users_by_id[user_id] for user_id in user_ids] |
| 868 | |
| 869 | if user_count and user_count > 0: |
| 870 | return sorted(users, key=_user_sort_key)[: min(user_count, len(users))] |
| 871 | |
| 872 | return users |
| 873 | |
| 874 | |
| 875 | def collect_papers_for_day( |