exporter-ng: dictionary fixes
This commit is contained in:
parent
bafe448aa2
commit
c0bb7d5aa0
1 changed files with 41 additions and 14 deletions
|
@ -150,12 +150,11 @@ class SlackUser:
|
|||
|
||||
@classmethod
|
||||
def from_dict(cls, data: Dict) -> 'SlackUser':
|
||||
profile = data.get("profile", {})
|
||||
return cls(
|
||||
id=data["id"],
|
||||
name=data.get("name", ""),
|
||||
real_name=profile.get("real_name"),
|
||||
display_name=profile.get("display_name"),
|
||||
real_name=data.get("real_name"),
|
||||
display_name=data.get("display_name"),
|
||||
is_admin=data.get("is_admin", False),
|
||||
is_owner=data.get("is_owner", False),
|
||||
is_primary_owner=data.get("is_primary_owner", False),
|
||||
|
@ -195,15 +194,18 @@ class SlackUser:
|
|||
class SlackChannel:
|
||||
"""Reprezentacja kanału Slack"""
|
||||
|
||||
def __init__(self, data: Dict):
|
||||
def __init__(self, data: Dict, users: Dict[str, SlackUser]):
|
||||
self.id = data["id"]
|
||||
self.name = data.get("name", "")
|
||||
self.is_private = data.get("is_private", False)
|
||||
self.is_im = data.get("is_im", False)
|
||||
self.is_mpim = data.get("is_mpim", False)
|
||||
self.is_group = data.get("is_group", False)
|
||||
self.creator_id = data.get("creator")
|
||||
self.user_id = data.get("user")
|
||||
self._creator_id = data.get("creator_id")
|
||||
self._user_id = data.get("user_id")
|
||||
self.user = users[self._user_id].get_display_name() if self._user_id and self._user_id in users else "(nieznany)"
|
||||
self._mpim_users = self._list_mpim({u.name: u for u in users.values()}) if self.is_mpim else []
|
||||
self.label = self._create_label(users)
|
||||
|
||||
@property
|
||||
def type(self) -> str:
|
||||
|
@ -216,7 +218,24 @@ class SlackChannel:
|
|||
else:
|
||||
return "channel"
|
||||
|
||||
def format(self, users: Dict[str, SlackUser]) -> str:
|
||||
@property
|
||||
def short_label(self) -> str:
|
||||
if self.is_im:
|
||||
return f"(DM) {self.user}"
|
||||
elif self.is_mpim:
|
||||
return f"(MPDM) {', '.join(self._mpim_users)}"
|
||||
return self.name
|
||||
|
||||
def _list_mpim(self, users: Dict[str, SlackUser]) -> List[str]:
|
||||
result = []
|
||||
for part in self.name.split("-"):
|
||||
name = users.get(part)
|
||||
if name:
|
||||
result.append(name.get_display_name())
|
||||
return result
|
||||
|
||||
|
||||
def _create_label(self, users: Dict[str, SlackUser]) -> str:
|
||||
"""Formatuje informacje o kanale"""
|
||||
parts = [f"[{self.id}]"]
|
||||
|
||||
|
@ -228,10 +247,10 @@ class SlackChannel:
|
|||
|
||||
parts.append(self.type)
|
||||
|
||||
if self.creator_id and self.creator_id in users:
|
||||
parts.append(f"created by {users[self.creator_id].name}")
|
||||
elif self.user_id and self.user_id in users:
|
||||
parts.append(f"with {users[self.user_id].name}")
|
||||
if self._creator_id and self._creator_id in users:
|
||||
parts.append(f"created by {users[self._creator_id].get_display_name()}")
|
||||
elif self._user_id and self._user_id in users:
|
||||
parts.append(f"with {users[self._user_id].get_display_name()}")
|
||||
|
||||
return " ".join(parts)
|
||||
|
||||
|
@ -322,13 +341,15 @@ class SlackExporter:
|
|||
|
||||
def _load_users(self) -> Dict[str, SlackUser]:
|
||||
"""Ładuje użytkowników"""
|
||||
users_data = self.api.get_users()
|
||||
# users_data = self.api.get_users()
|
||||
users_data = json.load(open("out/user_list.json", "r", encoding="utf-8"))
|
||||
return {u["id"]: SlackUser.from_dict(u) for u in users_data}
|
||||
|
||||
def _load_channels(self) -> List[SlackChannel]:
|
||||
"""Ładuje kanały"""
|
||||
channels_data = self.api.get_channels()
|
||||
return [SlackChannel(ch) for ch in channels_data]
|
||||
# channels_data = self.api.get_channels()
|
||||
channels_data = json.load(open("out/channel_list.json", "r", encoding="utf-8"))
|
||||
return [SlackChannel(ch, self.users) for ch in channels_data]
|
||||
|
||||
def _save_data(self, data: Any, filename: str, as_json: bool = False):
|
||||
"""Zapisuje dane do pliku"""
|
||||
|
@ -346,6 +367,12 @@ class SlackExporter:
|
|||
else:
|
||||
f.write(data)
|
||||
|
||||
def export_channels(self, channels: List[str]):
|
||||
with open(os.path.join(self.output_dir, "channels.txt"), "w", encoding="utf-8") as f:
|
||||
for channel in channels:
|
||||
f.write(str(channel) + "\n")
|
||||
pass
|
||||
|
||||
def export_channel_list(self, as_json: bool = False):
|
||||
"""Eksportuje listę kanałów"""
|
||||
if as_json:
|
Loading…
Add table
Add a link
Reference in a new issue