exporter-ng: dictionary fixes

This commit is contained in:
Piotr Dec 2025-04-30 12:26:21 +02:00
parent bafe448aa2
commit c0bb7d5aa0
No known key found for this signature in database
GPG key ID: D3B5A5D0150D147A

View file

@ -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: