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
|
@classmethod
|
||||||
def from_dict(cls, data: Dict) -> 'SlackUser':
|
def from_dict(cls, data: Dict) -> 'SlackUser':
|
||||||
profile = data.get("profile", {})
|
|
||||||
return cls(
|
return cls(
|
||||||
id=data["id"],
|
id=data["id"],
|
||||||
name=data.get("name", ""),
|
name=data.get("name", ""),
|
||||||
real_name=profile.get("real_name"),
|
real_name=data.get("real_name"),
|
||||||
display_name=profile.get("display_name"),
|
display_name=data.get("display_name"),
|
||||||
is_admin=data.get("is_admin", False),
|
is_admin=data.get("is_admin", False),
|
||||||
is_owner=data.get("is_owner", False),
|
is_owner=data.get("is_owner", False),
|
||||||
is_primary_owner=data.get("is_primary_owner", False),
|
is_primary_owner=data.get("is_primary_owner", False),
|
||||||
|
@ -195,15 +194,18 @@ class SlackUser:
|
||||||
class SlackChannel:
|
class SlackChannel:
|
||||||
"""Reprezentacja kanału Slack"""
|
"""Reprezentacja kanału Slack"""
|
||||||
|
|
||||||
def __init__(self, data: Dict):
|
def __init__(self, data: Dict, users: Dict[str, SlackUser]):
|
||||||
self.id = data["id"]
|
self.id = data["id"]
|
||||||
self.name = data.get("name", "")
|
self.name = data.get("name", "")
|
||||||
self.is_private = data.get("is_private", False)
|
self.is_private = data.get("is_private", False)
|
||||||
self.is_im = data.get("is_im", False)
|
self.is_im = data.get("is_im", False)
|
||||||
self.is_mpim = data.get("is_mpim", False)
|
self.is_mpim = data.get("is_mpim", False)
|
||||||
self.is_group = data.get("is_group", False)
|
self.is_group = data.get("is_group", False)
|
||||||
self.creator_id = data.get("creator")
|
self._creator_id = data.get("creator_id")
|
||||||
self.user_id = data.get("user")
|
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
|
@property
|
||||||
def type(self) -> str:
|
def type(self) -> str:
|
||||||
|
@ -216,7 +218,24 @@ class SlackChannel:
|
||||||
else:
|
else:
|
||||||
return "channel"
|
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"""
|
"""Formatuje informacje o kanale"""
|
||||||
parts = [f"[{self.id}]"]
|
parts = [f"[{self.id}]"]
|
||||||
|
|
||||||
|
@ -228,10 +247,10 @@ class SlackChannel:
|
||||||
|
|
||||||
parts.append(self.type)
|
parts.append(self.type)
|
||||||
|
|
||||||
if self.creator_id and self.creator_id in users:
|
if self._creator_id and self._creator_id in users:
|
||||||
parts.append(f"created by {users[self.creator_id].name}")
|
parts.append(f"created by {users[self._creator_id].get_display_name()}")
|
||||||
elif self.user_id and self.user_id in users:
|
elif self._user_id and self._user_id in users:
|
||||||
parts.append(f"with {users[self.user_id].name}")
|
parts.append(f"with {users[self._user_id].get_display_name()}")
|
||||||
|
|
||||||
return " ".join(parts)
|
return " ".join(parts)
|
||||||
|
|
||||||
|
@ -322,13 +341,15 @@ class SlackExporter:
|
||||||
|
|
||||||
def _load_users(self) -> Dict[str, SlackUser]:
|
def _load_users(self) -> Dict[str, SlackUser]:
|
||||||
"""Ładuje użytkowników"""
|
"""Ł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}
|
return {u["id"]: SlackUser.from_dict(u) for u in users_data}
|
||||||
|
|
||||||
def _load_channels(self) -> List[SlackChannel]:
|
def _load_channels(self) -> List[SlackChannel]:
|
||||||
"""Ładuje kanały"""
|
"""Ładuje kanały"""
|
||||||
channels_data = self.api.get_channels()
|
# channels_data = self.api.get_channels()
|
||||||
return [SlackChannel(ch) for ch in channels_data]
|
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):
|
def _save_data(self, data: Any, filename: str, as_json: bool = False):
|
||||||
"""Zapisuje dane do pliku"""
|
"""Zapisuje dane do pliku"""
|
||||||
|
@ -346,6 +367,12 @@ class SlackExporter:
|
||||||
else:
|
else:
|
||||||
f.write(data)
|
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):
|
def export_channel_list(self, as_json: bool = False):
|
||||||
"""Eksportuje listę kanałów"""
|
"""Eksportuje listę kanałów"""
|
||||||
if as_json:
|
if as_json:
|
Loading…
Add table
Add a link
Reference in a new issue