Some fixes and speed improvments (#439)

* Use raw string for re pattern

* Trim trailing whitespaces from docstrings and code

* Use isinstance() instead of type() for typechecking

* Remove unused imports
This commit is contained in:
Alisson Lauffer 2020-07-12 01:43:30 -03:00 committed by GitHub
parent 5261e9550e
commit 531069b1e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 28 additions and 43 deletions

View File

@ -26,7 +26,7 @@ NOTICE_PATH = "NOTICE"
SECTION_RE = re.compile(r"---(\w+)---") SECTION_RE = re.compile(r"---(\w+)---")
LAYER_RE = re.compile(r"//\sLAYER\s(\d+)") LAYER_RE = re.compile(r"//\sLAYER\s(\d+)")
COMBINATOR_RE = re.compile(r"^([\w.]+)#([0-9a-f]+)\s(?:.*)=\s([\w<>.]+);(?: // Docs: (.+))?$", re.MULTILINE) COMBINATOR_RE = re.compile(r"^([\w.]+)#([0-9a-f]+)\s(?:.*)=\s([\w<>.]+);(?: // Docs: (.+))?$", re.MULTILINE)
ARGS_RE = re.compile("[^{](\w+):([\w?!.<>#]+)") ARGS_RE = re.compile(r"[^{](\w+):([\w?!.<>#]+)")
FLAGS_RE = re.compile(r"flags\.(\d+)\?") FLAGS_RE = re.compile(r"flags\.(\d+)\?")
FLAGS_RE_2 = re.compile(r"flags\.(\d+)\?([\w<>.]+)") FLAGS_RE_2 = re.compile(r"flags\.(\d+)\?([\w<>.]+)")
FLAGS_RE_3 = re.compile(r"flags:#") FLAGS_RE_3 = re.compile(r"flags:#")

View File

@ -2,7 +2,7 @@
- Install requirements. - Install requirements.
- Install `pandoc` and `latexmk`. - Install `pandoc` and `latexmk`.
- HTML: `make html` - HTML: `make html`
- PDF: `make latexpdf` - PDF: `make latexpdf`
TODO: Explain better TODO: Explain better

View File

@ -1649,7 +1649,7 @@ class Client(Methods, BaseClient):
try: try:
return self.storage.get_peer_by_id(peer_id) return self.storage.get_peer_by_id(peer_id)
except KeyError: except KeyError:
if type(peer_id) is str: if isinstance(peer_id, str):
if peer_id in ("self", "me"): if peer_id in ("self", "me"):
return types.InputPeerSelf() return types.InputPeerSelf()

View File

@ -214,7 +214,7 @@ class Filters:
from_scheduled = create(lambda _, m: bool(m.from_scheduled), "FromScheduledFilter") from_scheduled = create(lambda _, m: bool(m.from_scheduled), "FromScheduledFilter")
"""Filter new automatically sent messages that were previously scheduled.""" """Filter new automatically sent messages that were previously scheduled."""
# Messages from linked channels are forwarded automatically by Telegram and have no sender (from_user is None). # Messages from linked channels are forwarded automatically by Telegram and have no sender (from_user is None).
linked_channel = create(lambda _, m: bool(m.forward_from_chat and not m.from_user), "LinkedChannelFilter") linked_channel = create(lambda _, m: bool(m.forward_from_chat and not m.from_user), "LinkedChannelFilter")
"""Filter messages that are automatically forwarded from the linked channel to the group chat.""" """Filter messages that are automatically forwarded from the linked channel to the group chat."""
@ -277,11 +277,11 @@ class Filters:
return False return False
commands = commands if type(commands) is list else [commands] commands = commands if isinstance(commands, list) else [commands]
commands = {c if case_sensitive else c.lower() for c in commands} commands = {c if case_sensitive else c.lower() for c in commands}
prefixes = [] if prefixes is None else prefixes prefixes = [] if prefixes is None else prefixes
prefixes = prefixes if type(prefixes) is list else [prefixes] prefixes = prefixes if isinstance(prefixes, list) else [prefixes]
prefixes = set(prefixes) if prefixes else {""} prefixes = set(prefixes) if prefixes else {""}
return create( return create(
@ -345,11 +345,11 @@ class Filters:
""" """
def __init__(self, users: int or str or list = None): def __init__(self, users: int or str or list = None):
users = [] if users is None else users if type(users) is list else [users] users = [] if users is None else users if isinstance(users, list) else [users]
super().__init__( super().__init__(
"me" if u in ["me", "self"] "me" if u in ["me", "self"]
else u.lower().strip("@") if type(u) is str else u.lower().strip("@") if isinstance(u, str)
else u for u in users else u for u in users
) )
@ -376,11 +376,11 @@ class Filters:
""" """
def __init__(self, chats: int or str or list = None): def __init__(self, chats: int or str or list = None):
chats = [] if chats is None else chats if type(chats) is list else [chats] chats = [] if chats is None else chats if isinstance(chats, list) else [chats]
super().__init__( super().__init__(
"me" if c in ["me", "self"] "me" if c in ["me", "self"]
else c.lower().strip("@") if type(c) is str else c.lower().strip("@") if isinstance(c, str)
else c for c in chats else c for c in chats
) )

View File

@ -18,7 +18,7 @@
from typing import Union from typing import Union
from pyrogram.api import functions, types from pyrogram.api import functions
from pyrogram.client.ext import BaseClient from pyrogram.client.ext import BaseClient

View File

@ -17,12 +17,10 @@
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>. # along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
import logging import logging
import time
from typing import Union, List from typing import Union, List
import pyrogram import pyrogram
from pyrogram.api import functions, types from pyrogram.api import functions, types
from pyrogram.errors import FloodWait
from ...ext import BaseClient from ...ext import BaseClient
log = logging.getLogger(__name__) log = logging.getLogger(__name__)

View File

@ -17,12 +17,10 @@
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>. # along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
import logging import logging
import time
from typing import List from typing import List
import pyrogram import pyrogram
from pyrogram.api import functions, types from pyrogram.api import functions, types
from pyrogram.errors import FloodWait
from ...ext import BaseClient, utils from ...ext import BaseClient, utils
log = logging.getLogger(__name__) log = logging.getLogger(__name__)

View File

@ -41,7 +41,7 @@ class SetChatPhoto(BaseClient):
photo (``str``): photo (``str``):
New chat photo. You can pass a :obj:`Photo` file_id or a file path to upload a new photo from your local New chat photo. You can pass a :obj:`Photo` file_id or a file path to upload a new photo from your local
machine. machine.
file_ref (``str``, *optional*): file_ref (``str``, *optional*):
A valid file reference obtained by a recently fetched media message. A valid file reference obtained by a recently fetched media message.
To be used in combination with a file id in case a file reference is needed. To be used in combination with a file id in case a file reference is needed.

View File

@ -29,7 +29,7 @@ class UpdateChatUsername(BaseClient):
username: Union[str, None] username: Union[str, None]
) -> bool: ) -> bool:
"""Update a channel or a supergroup username. """Update a channel or a supergroup username.
To update your own username (for users only, not bots) you can use :meth:`~Client.update_username`. To update your own username (for users only, not bots) you can use :meth:`~Client.update_username`.
Parameters: Parameters:

View File

@ -17,13 +17,11 @@
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>. # along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
import logging import logging
import time
from typing import Union, List from typing import Union, List
import pyrogram import pyrogram
from pyrogram.api import functions from pyrogram.api import functions
from pyrogram.client.ext import utils from pyrogram.client.ext import utils
from pyrogram.errors import FloodWait
from ...ext import BaseClient from ...ext import BaseClient
log = logging.getLogger(__name__) log = logging.getLogger(__name__)

View File

@ -17,12 +17,10 @@
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>. # along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
import logging import logging
import time
from typing import Union, Iterable, List from typing import Union, Iterable, List
import pyrogram import pyrogram
from pyrogram.api import functions, types from pyrogram.api import functions, types
from pyrogram.errors import FloodWait
from ...ext import BaseClient, utils from ...ext import BaseClient, utils
log = logging.getLogger(__name__) log = logging.getLogger(__name__)

View File

@ -35,7 +35,7 @@ class GetCommonChats(BaseClient):
Returns: Returns:
List of :obj:`Chat`: On success, a list of the common chats is returned. List of :obj:`Chat`: On success, a list of the common chats is returned.
Raises: Raises:
ValueError: If the user_id doesn't belong to a user. ValueError: If the user_id doesn't belong to a user.
@ -58,5 +58,5 @@ class GetCommonChats(BaseClient):
) )
return pyrogram.List([pyrogram.Chat._parse_chat(self, x) for x in r.chats]) return pyrogram.List([pyrogram.Chat._parse_chat(self, x) for x in r.chats])
raise ValueError('The user_id "{}" doesn\'t belong to a user'.format(user_id)) raise ValueError('The user_id "{}" doesn\'t belong to a user'.format(user_id))

View File

@ -28,13 +28,13 @@ class UpdateProfile(BaseClient):
bio: str = None bio: str = None
) -> bool: ) -> bool:
"""Update your profile details such as first name, last name and bio. """Update your profile details such as first name, last name and bio.
You can omit the parameters you don't want to change. You can omit the parameters you don't want to change.
Parameters: Parameters:
first_name (``str``, *optional*): first_name (``str``, *optional*):
The new first name. The new first name.
last_name (``str``, *optional*): last_name (``str``, *optional*):
The new last name. The new last name.
Pass "" (empty string) to remove it. Pass "" (empty string) to remove it.
@ -42,19 +42,19 @@ class UpdateProfile(BaseClient):
bio (``str``, *optional*): bio (``str``, *optional*):
The new bio, also known as "about". Max 70 characters. The new bio, also known as "about". Max 70 characters.
Pass "" (empty string) to remove it. Pass "" (empty string) to remove it.
Returns: Returns:
``bool``: True on success. ``bool``: True on success.
Example: Example:
.. code-block:: python .. code-block:: python
# Update your first name only # Update your first name only
app.update_profile(first_name="Pyrogram") app.update_profile(first_name="Pyrogram")
# Update first name and bio # Update first name and bio
app.update_profile(first_name="Pyrogram", bio="https://docs.pyrogram.org/") app.update_profile(first_name="Pyrogram", bio="https://docs.pyrogram.org/")
# Remove the last name # Remove the last name
app.update_profile(last_name="") app.update_profile(last_name="")
""" """

View File

@ -28,7 +28,7 @@ class UpdateUsername(BaseClient):
username: Union[str, None] username: Union[str, None]
) -> bool: ) -> bool:
"""Update your own username. """Update your own username.
This method only works for users, not bots. Bot usernames must be changed via Bot Support or by recreating This method only works for users, not bots. Bot usernames must be changed via Bot Support or by recreating
them from scratch using BotFather. To update a channel or supergroup username you can use them from scratch using BotFather. To update a channel or supergroup username you can use
:meth:`~Client.update_chat_username`. :meth:`~Client.update_chat_username`.

View File

@ -33,7 +33,6 @@
from base64 import b64encode from base64 import b64encode
from struct import pack from struct import pack
from typing import Union
import pyrogram import pyrogram
from pyrogram.api import types from pyrogram.api import types
@ -41,7 +40,6 @@ from pyrogram.client.types.object import Object
from pyrogram.client.types.update import Update from pyrogram.client.types.update import Update
from pyrogram.client.types.user_and_chats import User from pyrogram.client.types.user_and_chats import User
from pyrogram.client.types.messages_and_media import Location from pyrogram.client.types.messages_and_media import Location
from pyrogram.client.ext import utils
class ChosenInlineResult(Object, Update): class ChosenInlineResult(Object, Update):

View File

@ -16,14 +16,9 @@
# You should have received a copy of the GNU Lesser General Public License # You should have received a copy of the GNU Lesser General Public License
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>. # along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
from struct import pack
from typing import List
import pyrogram import pyrogram
from pyrogram.api import types from pyrogram.api import types
from .thumbnail import Thumbnail
from ..object import Object from ..object import Object
from ...ext.utils import encode_file_id, encode_file_ref
class Dice(Object): class Dice(Object):

View File

@ -2964,7 +2964,7 @@ class Message(Object, Update):
chat_id=message.chat.id, chat_id=message.chat.id,
message_id=message_id, message_id=message_id,
) )
Example: Example:
.. code-block:: python .. code-block:: python
@ -3074,7 +3074,7 @@ class Message(Object, Update):
Parameters: Parameters:
option (``int``): option (``int``):
Index of the poll option you want to vote for (0 to 9). Index of the poll option you want to vote for (0 to 9).
Returns: Returns:
:obj:`Poll`: On success, the poll with the chosen option is returned. :obj:`Poll`: On success, the poll with the chosen option is returned.

View File

@ -23,7 +23,7 @@ from pyrogram.api.core import Message, MsgContainer, TLObject
from .msg_id import MsgId from .msg_id import MsgId
from .seq_no import SeqNo from .seq_no import SeqNo
not_content_related = [Ping, HttpWait, MsgsAck, MsgContainer] not_content_related = (Ping, HttpWait, MsgsAck, MsgContainer)
class MsgFactory: class MsgFactory:
@ -34,6 +34,6 @@ class MsgFactory:
return Message( return Message(
body, body,
MsgId(), MsgId(),
self.seq_no(type(body) not in not_content_related), self.seq_no(not isinstance(body, not_content_related)),
len(body) len(body)
) )