2
0
mirror of https://github.com/pyrogram/pyrogram synced 2025-08-28 12:57:52 +00:00

Fix FileData namedtuple using Python 3.7+ features

This commit is contained in:
Dan 2019-06-07 18:48:34 +02:00
parent 89e6f4137b
commit c65e210c03
5 changed files with 55 additions and 20 deletions

View File

@ -877,7 +877,7 @@ class Client(Methods, BaseClient):
temp_file_path = self.get_file( temp_file_path = self.get_file(
media_type=data.media_type, media_type=data.media_type,
dc_id=data.dc_id, dc_id=data.dc_id,
file_id=data.file_id, document_id=data.document_id,
access_hash=data.access_hash, access_hash=data.access_hash,
thumb_size=data.thumb_size, thumb_size=data.thumb_size,
peer_id=data.peer_id, peer_id=data.peer_id,
@ -1520,7 +1520,7 @@ class Client(Methods, BaseClient):
self, self,
media_type: int, media_type: int,
dc_id: int, dc_id: int,
file_id: int, document_id: int,
access_hash: int, access_hash: int,
thumb_size: str, thumb_size: str,
peer_id: int, peer_id: int,
@ -1580,21 +1580,21 @@ class Client(Methods, BaseClient):
) )
elif media_type in (0, 2): elif media_type in (0, 2):
location = types.InputPhotoFileLocation( location = types.InputPhotoFileLocation(
id=file_id, id=document_id,
access_hash=access_hash, access_hash=access_hash,
file_reference=b"", file_reference=b"",
thumb_size=thumb_size thumb_size=thumb_size
) )
elif media_type == 14: elif media_type == 14:
location = types.InputDocumentFileLocation( location = types.InputDocumentFileLocation(
id=file_id, id=document_id,
access_hash=access_hash, access_hash=access_hash,
file_reference=b"", file_reference=b"",
thumb_size=thumb_size thumb_size=thumb_size
) )
else: else:
location = types.InputDocumentFileLocation( location = types.InputDocumentFileLocation(
id=file_id, id=document_id,
access_hash=access_hash, access_hash=access_hash,
file_reference=b"", file_reference=b"",
thumb_size="" thumb_size=""

View File

@ -20,3 +20,5 @@ from .base_client import BaseClient
from .dispatcher import Dispatcher from .dispatcher import Dispatcher
from .emoji import Emoji from .emoji import Emoji
from .syncer import Syncer from .syncer import Syncer
from .file_data import FileData

View File

@ -19,7 +19,6 @@
import os import os
import platform import platform
import re import re
from collections import namedtuple
from queue import Queue from queue import Queue
from threading import Lock from threading import Lock
@ -84,10 +83,6 @@ class BaseClient:
mime_types_to_extensions[mime_type] = " ".join(extensions) mime_types_to_extensions[mime_type] = " ".join(extensions)
fields = ("media_type", "dc_id", "file_id", "access_hash", "thumb_size", "peer_id", "volume_id", "local_id",
"is_big", "file_size", "mime_type", "file_name", "date")
FileData = namedtuple("FileData", fields, defaults=(None,) * len(fields))
def __init__(self): def __init__(self):
self.is_bot = None self.is_bot = None
self.dc_id = None self.dc_id = None

View File

@ -0,0 +1,38 @@
# Pyrogram - Telegram MTProto API Client Library for Python
# Copyright (C) 2017-2019 Dan Tès <https://github.com/delivrance>
#
# This file is part of Pyrogram.
#
# Pyrogram is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Pyrogram is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
class FileData:
def __init__(
self, *, media_type: int = None, dc_id: int = None, document_id: int = None, access_hash: int = None,
thumb_size: str = None, peer_id: int = None, volume_id: int = None, local_id: int = None, is_big: bool = None,
file_size: int = None, mime_type: str = None, file_name: str = None, date: int = None
):
self.media_type = media_type
self.dc_id = dc_id
self.document_id = document_id
self.access_hash = access_hash
self.thumb_size = thumb_size
self.peer_id = peer_id
self.volume_id = volume_id
self.local_id = local_id
self.is_big = is_big
self.file_size = file_size
self.mime_type = mime_type
self.file_name = file_name
self.date = date

View File

@ -22,7 +22,7 @@ from threading import Event
from typing import Union from typing import Union
import pyrogram import pyrogram
from pyrogram.client.ext import BaseClient, utils from pyrogram.client.ext import BaseClient, FileData, utils
from pyrogram.errors import FileIdInvalid from pyrogram.errors import FileIdInvalid
@ -110,7 +110,7 @@ class DownloadMedia(BaseClient):
mime_type = getattr(media, "mime_type", None) mime_type = getattr(media, "mime_type", None)
date = getattr(media, "date", None) date = getattr(media, "date", None)
data = self.FileData( data = FileData(
file_name=file_name, file_name=file_name,
file_size=file_size, file_size=file_size,
mime_type=mime_type, mime_type=mime_type,
@ -118,7 +118,7 @@ class DownloadMedia(BaseClient):
) )
def get_existing_attributes() -> dict: def get_existing_attributes() -> dict:
return dict(filter(lambda x: x[1] is not None, data._asdict().items())) return dict(filter(lambda x: x[1] is not None, data.__dict__.items()))
try: try:
decoded = utils.decode(file_id_str) decoded = utils.decode(file_id_str)
@ -128,7 +128,7 @@ class DownloadMedia(BaseClient):
unpacked = struct.unpack("<iiqqib", decoded) unpacked = struct.unpack("<iiqqib", decoded)
dc_id, peer_id, volume_id, local_id, is_big = unpacked[1:] dc_id, peer_id, volume_id, local_id, is_big = unpacked[1:]
data = self.FileData( data = FileData(
**get_existing_attributes(), **get_existing_attributes(),
media_type=media_type, media_type=media_type,
dc_id=dc_id, dc_id=dc_id,
@ -139,25 +139,25 @@ class DownloadMedia(BaseClient):
) )
elif media_type in (0, 2, 14): elif media_type in (0, 2, 14):
unpacked = struct.unpack("<iiqqc", decoded) unpacked = struct.unpack("<iiqqc", decoded)
dc_id, file_id, access_hash, thumb_size = unpacked[1:] dc_id, document_id, access_hash, thumb_size = unpacked[1:]
data = self.FileData( data = FileData(
**get_existing_attributes(), **get_existing_attributes(),
media_type=media_type, media_type=media_type,
dc_id=dc_id, dc_id=dc_id,
file_id=file_id, document_id=document_id,
access_hash=access_hash, access_hash=access_hash,
thumb_size=thumb_size.decode() thumb_size=thumb_size.decode()
) )
elif media_type in (3, 4, 5, 8, 9, 10, 13): elif media_type in (3, 4, 5, 8, 9, 10, 13):
unpacked = struct.unpack("<iiqq", decoded) unpacked = struct.unpack("<iiqq", decoded)
dc_id, file_id, access_hash = unpacked[1:] dc_id, document_id, access_hash = unpacked[1:]
data = self.FileData( data = FileData(
**get_existing_attributes(), **get_existing_attributes(),
media_type=media_type, media_type=media_type,
dc_id=dc_id, dc_id=dc_id,
file_id=file_id, document_id=document_id,
access_hash=access_hash access_hash=access_hash
) )
else: else: