Skip to content

Commit

Permalink
* Added force_update: bool = False parameter to Client class gett…
Browse files Browse the repository at this point in the history
…ers. When set to True locally cached values will be refreshed from tdlib
  • Loading branch information
pylakey committed Aug 7, 2021
1 parent f53c8f2 commit ca024f4
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 49 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

### 0.8.3 - Minor fixes

#### Added

* Added `force_update: bool = False` parameter to `Client` class getters. When set to True locally cached values will be refreshed from tdlib

#### Updated

* Fixed an error when `Client.get_supergroup` and `Client.get_supergroup_full_info` returned `BasicGroup` and `BasicGroupFullInfo` instead of
Expand Down
54 changes: 30 additions & 24 deletions aiotdlib/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -855,56 +855,62 @@ async def get_main_list_chats(self, limit: int = 25) -> list[Chat]:
"""
return await self.cache.get_main_list_chats(limit)

async def get_chat(self, chat_id: int) -> Chat:
async def get_chat(self, chat_id: int, *, force_update: bool = False) -> Chat:
"""
Returns information about a chat by its identifier, this is an offline request if the current user is not a bot
"""
return await self.cache.get_chat(chat_id)
return await self.cache.get_chat(chat_id, force_update=force_update)

async def get_user(self, user_id: int) -> User:
return await self.cache.get_user(user_id)
async def get_user(self, user_id: int, *, force_update: bool = False) -> User:
return await self.cache.get_user(user_id, force_update=force_update)

async def get_user_full_info(self, user_id: int) -> UserFullInfo:
return await self.cache.get_user_full_info(user_id)
async def get_user_full_info(self, user_id: int, *, force_update: bool = False) -> UserFullInfo:
return await self.cache.get_user_full_info(user_id, force_update=force_update)

async def get_basic_group(self, basic_group_id: int) -> BasicGroup:
return await self.cache.get_basic_group(basic_group_id)
async def get_basic_group(self, basic_group_id: int, *, force_update: bool = False) -> BasicGroup:
return await self.cache.get_basic_group(basic_group_id, force_update=force_update)

async def get_basic_group_full_info(self, basic_group_id: int) -> BasicGroupFullInfo:
return await self.cache.get_basic_group_full_info(basic_group_id)
async def get_basic_group_full_info(self, basic_group_id: int, *, force_update: bool = False) -> BasicGroupFullInfo:
return await self.cache.get_basic_group_full_info(basic_group_id, force_update=force_update)

async def get_supergroup(self, supergroup_id: int) -> Supergroup:
return await self.cache.get_supergroup(supergroup_id)
async def get_supergroup(self, supergroup_id: int, *, force_update: bool = False) -> Supergroup:
return await self.cache.get_supergroup(supergroup_id, force_update=force_update)

async def get_supergroup_full_info(self, supergroup_id: int) -> SupergroupFullInfo:
return await self.cache.get_supergroup_full_info(supergroup_id)
async def get_supergroup_full_info(self, supergroup_id: int, *, force_update: bool = False) -> SupergroupFullInfo:
return await self.cache.get_supergroup_full_info(supergroup_id, force_update=force_update)

async def get_secret_chat(self, secret_chat_id: int) -> SecretChat:
return await self.cache.get_secret_chat(secret_chat_id)
async def get_secret_chat(self, secret_chat_id: int, *, force_update: bool = False) -> SecretChat:
return await self.cache.get_secret_chat(secret_chat_id, force_update=force_update)

async def get_chat_info(self, chat: Union[int, Chat], *, full: bool = False) -> Optional[ChatInfo]:
async def get_chat_info(
self,
chat: Union[int, Chat],
*,
full: bool = False,
force_update: bool = False
) -> Optional[ChatInfo]:
chat = await self.get_chat(chat) if isinstance(chat, int) else chat

if isinstance(chat.type_, ChatTypePrivate):
if full:
return await self.get_user_full_info(chat.type_.user_id)
return await self.get_user_full_info(chat.type_.user_id, force_update=force_update)
else:
return await self.get_user(chat.type_.user_id)
return await self.get_user(chat.type_.user_id, force_update=force_update)

if isinstance(chat.type_, ChatTypeBasicGroup):
if full:
return await self.get_basic_group_full_info(chat.type_.basic_group_id)
return await self.get_basic_group_full_info(chat.type_.basic_group_id, force_update=force_update)
else:
return await self.get_basic_group(chat.type_.basic_group_id)
return await self.get_basic_group(chat.type_.basic_group_id, force_update=force_update)

if isinstance(chat.type_, ChatTypeSupergroup):
if full:
return await self.get_supergroup_full_info(chat.type_.supergroup_id)
return await self.get_supergroup_full_info(chat.type_.supergroup_id, force_update=force_update)
else:
return await self.get_supergroup(chat.type_.supergroup_id)
return await self.get_supergroup(chat.type_.supergroup_id, force_update=force_update)

if isinstance(chat.type_, ChatTypeSecret):
return await self.get_secret_chat(chat.type_.secret_chat_id)
return await self.get_secret_chat(chat.type_.secret_chat_id, force_update=force_update)

raise ValueError(f'Unknown chat.type {chat.type_.__class__.__qualname__}')

Expand Down
50 changes: 25 additions & 25 deletions aiotdlib/client_cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -261,77 +261,77 @@ async def get_main_list_chats(self, limit: int = 25) -> list[Chat]:

return [self.chats.get(oc.chat_id) for oc in self.main_chats_list[:limit]]

async def get_chat(self, chat_id: int) -> Chat:
async def get_chat(self, chat_id: int, *, force_update: bool = True) -> Chat:
chat = self.chats.get(chat_id)

if not bool(chat):
if not bool(chat) or force_update:
chat = await self.client.api.get_chat(chat_id)
self.__set_chat_positions(chat, chat.positions)
self.chats[chat_id] = chat

self.chats[chat_id] = chat
self.__set_chat_positions(chat, chat.positions)
return chat

async def get_user(self, user_id: int) -> User:
async def get_user(self, user_id: int, *, force_update: bool = True) -> User:
user = self.users.get(user_id)

if not bool(user):
if not bool(user) or force_update:
user = await self.client.api.get_user(user_id)
self.users[user_id] = user

self.users[user_id] = user
return user

async def get_user_full_info(self, user_id: int) -> UserFullInfo:
async def get_user_full_info(self, user_id: int, *, force_update: bool = True) -> UserFullInfo:
user_full_info = self.users_full_info.get(user_id)

if not bool(user_full_info):
if not bool(user_full_info) or force_update:
user_full_info = await self.client.api.get_user_full_info(user_id)
self.users_full_info[user_id] = user_full_info

self.users_full_info[user_id] = user_full_info
return user_full_info

async def get_basic_group(self, basic_group_id: int) -> BasicGroup:
async def get_basic_group(self, basic_group_id: int, *, force_update: bool = True) -> BasicGroup:
basic_group = self.basic_groups.get(basic_group_id)

if not bool(basic_group):
if not bool(basic_group) or force_update:
basic_group = await self.client.api.get_basic_group(basic_group_id)
self.basic_groups[basic_group_id] = basic_group

self.basic_groups[basic_group_id] = basic_group
return basic_group

async def get_basic_group_full_info(self, basic_group_id: int) -> BasicGroupFullInfo:
async def get_basic_group_full_info(self, basic_group_id: int, *, force_update: bool = True) -> BasicGroupFullInfo:
basic_group_full_info = self.basic_groups_full_info.get(basic_group_id)

if not bool(basic_group_full_info):
if not bool(basic_group_full_info) or force_update:
basic_group_full_info = await self.client.api.get_basic_group_full_info(basic_group_id)
self.basic_groups_full_info[basic_group_id] = basic_group_full_info

self.basic_groups_full_info[basic_group_id] = basic_group_full_info
return basic_group_full_info

async def get_supergroup(self, supergroup_id: int) -> Supergroup:
async def get_supergroup(self, supergroup_id: int, *, force_update: bool = True) -> Supergroup:
supergroup = self.supergroups.get(supergroup_id)

if not bool(supergroup):
if not bool(supergroup) or force_update:
supergroup = await self.client.api.get_supergroup(supergroup_id)
self.supergroups[supergroup_id] = supergroup

self.supergroups[supergroup_id] = supergroup
return supergroup

async def get_supergroup_full_info(self, supergroup_id: int) -> SupergroupFullInfo:
async def get_supergroup_full_info(self, supergroup_id: int, *, force_update: bool = True) -> SupergroupFullInfo:
supergroup_full_info = self.supergroups_full_info.get(supergroup_id)

if not bool(supergroup_full_info):
if not bool(supergroup_full_info) or force_update:
supergroup_full_info = await self.client.api.get_supergroup_full_info(supergroup_id)
self.supergroups_full_info[supergroup_id] = supergroup_full_info

self.supergroups_full_info[supergroup_id] = supergroup_full_info
return supergroup_full_info

async def get_secret_chat(self, secret_chat_id: int) -> SecretChat:
async def get_secret_chat(self, secret_chat_id: int, *, force_update: bool = True) -> SecretChat:
secret_chat = self.secret_chats.get(secret_chat_id)

if not bool(secret_chat):
if not bool(secret_chat) or force_update:
secret_chat = await self.client.api.get_secret_chat(secret_chat_id)
self.secret_chats[secret_chat_id] = secret_chat

self.secret_chats[secret_chat_id] = secret_chat
return secret_chat

def __set_chat_positions(self, chat: Chat, positions: list[ChatPosition]):
Expand Down

0 comments on commit ca024f4

Please sign in to comment.