|
8 | 8 | from concurrent.futures import Future, ThreadPoolExecutor, wait
|
9 | 9 | from copy import deepcopy
|
10 | 10 | from datetime import datetime
|
| 11 | +from pprint import pprint |
11 | 12 | from typing import (
|
12 | 13 | Any,
|
13 | 14 | Callable,
|
|
33 | 34 | Composition,
|
34 | 35 | EditPropagateMode,
|
35 | 36 | Event,
|
| 37 | + Person, |
36 | 38 | PrivateComposition,
|
37 | 39 | RealmEmojiData,
|
38 | 40 | RealmUser,
|
@@ -150,6 +152,7 @@ def __init__(self, controller: Any) -> None:
|
150 | 152 | ("update_display_settings", self._handle_update_display_settings_event),
|
151 | 153 | ("user_settings", self._handle_user_settings_event),
|
152 | 154 | ("realm_emoji", self._handle_update_emoji_event),
|
| 155 | + ("realm_user", self._handle_realm_user_event), |
153 | 156 | ]
|
154 | 157 | )
|
155 | 158 |
|
@@ -1747,6 +1750,41 @@ def _handle_update_display_settings_event(self, event: Event) -> None:
|
1747 | 1750 | view.message_view.log[msg_pos] = msg_w_list[0]
|
1748 | 1751 | self.controller.update_screen()
|
1749 | 1752 |
|
| 1753 | + def update_realm_user(self, updated_details: Person) -> None: |
| 1754 | + """ |
| 1755 | + This function is to update details of other realm_users |
| 1756 | + when a realm_user event takes place |
| 1757 | + """ |
| 1758 | + for realm_user in self.initial_data["realm_users"]: |
| 1759 | + if realm_user["user_id"] == updated_details["user_id"]: |
| 1760 | + index_of_realm_user = self.initial_data["realm_users"].index(realm_user) |
| 1761 | + temp_realm_index = index_of_realm_user |
| 1762 | + self.initial_data["realm_users"][index_of_realm_user].update( |
| 1763 | + updated_details |
| 1764 | + ) |
| 1765 | + break |
| 1766 | + |
| 1767 | + def _handle_realm_user_event(self, event: Event) -> None: |
| 1768 | + """ |
| 1769 | + Handle change to user(s) metadata (Eg: full_name, timezone, etc.) |
| 1770 | + """ |
| 1771 | + assert event["type"] == "realm_user" |
| 1772 | + if event["op"] == "update": |
| 1773 | + pprint(event) |
| 1774 | + if "person" in event: |
| 1775 | + updated_details = event["person"] |
| 1776 | + # Role is not present under self.initial_data, |
| 1777 | + # but exists only under self.initial_data["realm_users"] |
| 1778 | + if event["person"].get("role"): |
| 1779 | + self.update_realm_user(updated_details) |
| 1780 | + else: |
| 1781 | + # check if the event contains details of current user or some other user in the org |
| 1782 | + if updated_details["user_id"] == self.user_id: |
| 1783 | + self.initial_data.update(updated_details) |
| 1784 | + self.update_realm_user(updated_details) |
| 1785 | + else: |
| 1786 | + self.update_realm_user(updated_details) |
| 1787 | + |
1750 | 1788 | def _register_desired_events(self, *, fetch_data: bool = False) -> str:
|
1751 | 1789 | fetch_types = None if not fetch_data else self.initial_data_to_fetch
|
1752 | 1790 | event_types = list(self.event_actions)
|
|
0 commit comments