mirror of
https://github.com/pyrogram/pyrogram
synced 2025-08-22 18:07:21 +00:00
Merge branch 'master' into docs
# Conflicts: # compiler/api/compiler.py # compiler/docs/compiler.py
This commit is contained in:
commit
b9fa1e414d
@ -49,7 +49,7 @@ Features
|
||||
`MTProto Mobile Protocol v2.0`_ and the mechanisms needed for establishing
|
||||
a reliable connection.
|
||||
|
||||
- **Updated**: Pyrogram makes use of the latest Telegram API version, currently `Layer 74`_.
|
||||
- **Updated**: Pyrogram makes use of the latest Telegram API version, currently `Layer 75`_.
|
||||
|
||||
- **Documented**: Pyrogram API public methods are documented and resemble the well
|
||||
established Telegram Bot API, thus offering a familiar look to Bot developers.
|
||||
@ -148,7 +148,7 @@ License
|
||||
|
||||
.. _`MTProto Mobile Protocol v2.0`: https://core.telegram.org/mtproto
|
||||
|
||||
.. _`Layer 74`: compiler/api/source/main_api.tl
|
||||
.. _`Layer 75`: compiler/api/source/main_api.tl
|
||||
|
||||
.. _`your own`: https://github.com/pyrogram/pyrogram/wiki/Getting-Started#api-keys
|
||||
|
||||
@ -191,7 +191,7 @@ License
|
||||
<br><br><br>
|
||||
<a href="compiler/api/source/main_api.tl">
|
||||
<img src="https://www.pyrogram.ml/images/scheme.svg"
|
||||
alt="Scheme Layer 74">
|
||||
alt="Scheme Layer 75">
|
||||
</a>
|
||||
<a href="https://core.telegram.org/mtproto">
|
||||
<img src="https://www.pyrogram.ml/images/mtproto.svg"
|
||||
@ -207,7 +207,7 @@ License
|
||||
|
||||
.. |scheme| image:: https://www.pyrogram.ml/images/scheme.svg
|
||||
:target: compiler/api/source/main_api.tl
|
||||
:alt: Scheme Layer 74
|
||||
:alt: Scheme Layer 75
|
||||
|
||||
.. |mtproto| image:: https://www.pyrogram.ml/images/mtproto.svg
|
||||
:target: https://core.telegram.org/mtproto
|
||||
|
@ -129,15 +129,15 @@ def start():
|
||||
shutil.rmtree("{}/types".format(DESTINATION), ignore_errors=True)
|
||||
shutil.rmtree("{}/functions".format(DESTINATION), ignore_errors=True)
|
||||
|
||||
with open("{}/source/auth_key.tl".format(HOME)) as auth, \
|
||||
open("{}/source/sys_msgs.tl".format(HOME)) as system, \
|
||||
open("{}/source/main_api.tl".format(HOME)) as api:
|
||||
with open("{}/source/auth_key.tl".format(HOME), encoding="utf-8") as auth, \
|
||||
open("{}/source/sys_msgs.tl".format(HOME), encoding="utf-8") as system, \
|
||||
open("{}/source/main_api.tl".format(HOME), encoding="utf-8") as api:
|
||||
schema = (auth.read() + system.read() + api.read()).splitlines()
|
||||
|
||||
with open("{}/template/class.txt".format(HOME)) as f:
|
||||
with open("{}/template/class.txt".format(HOME), encoding="utf-8") as f:
|
||||
template = f.read()
|
||||
|
||||
with open(NOTICE_PATH) as f:
|
||||
with open(NOTICE_PATH, encoding="utf-8") as f:
|
||||
notice = []
|
||||
|
||||
for line in f.readlines():
|
||||
@ -234,10 +234,10 @@ def start():
|
||||
init = "{}/__init__.py".format(path)
|
||||
|
||||
if not os.path.exists(init):
|
||||
with open(init, "w") as f:
|
||||
with open(init, "w", encoding="utf-8") as f:
|
||||
f.write(notice + "\n\n")
|
||||
|
||||
with open(init, "a") as f:
|
||||
with open(init, "a", encoding="utf-8") as f:
|
||||
f.write("from .{} import {}\n".format(snek(c.name), capit(c.name)))
|
||||
|
||||
sorted_args = sort_args(c.args)
|
||||
@ -370,7 +370,7 @@ def start():
|
||||
read_types += "\n "
|
||||
read_types += "{} = Object.read(b)\n ".format(arg_name)
|
||||
|
||||
with open("{}/{}.py".format(path, snek(c.name)), "w") as f:
|
||||
with open("{}/{}.py".format(path, snek(c.name)), "w", encoding="utf-8") as f:
|
||||
f.write(
|
||||
template.format(
|
||||
notice=notice,
|
||||
@ -387,7 +387,7 @@ def start():
|
||||
)
|
||||
)
|
||||
|
||||
with open("{}/all.py".format(DESTINATION), "w") as f:
|
||||
with open("{}/all.py".format(DESTINATION), "w", encoding="utf-8") as f:
|
||||
f.write(notice + "\n\n")
|
||||
f.write("layer = {}\n\n".format(layer))
|
||||
f.write("objects = {")
|
||||
@ -409,7 +409,7 @@ def start():
|
||||
f.write("\n}\n")
|
||||
|
||||
for k, v in namespaces.items():
|
||||
with open("{}/{}/__init__.py".format(DESTINATION, k), "a") as f:
|
||||
with open("{}/{}/__init__.py".format(DESTINATION, k), "a", encoding="utf-8") as f:
|
||||
f.write("from . import {}\n".format(", ".join([i for i in v])) if v else "")
|
||||
|
||||
|
||||
|
@ -44,7 +44,7 @@ def generate(source_path, base):
|
||||
if not i.startswith("__"):
|
||||
build("/".join([path, i]), level=level + 1)
|
||||
except NotADirectoryError:
|
||||
with open(path + "/" + i) as f:
|
||||
with open(path + "/" + i, encoding="utf-8") as f:
|
||||
p = ast.parse(f.read())
|
||||
|
||||
for node in ast.walk(p):
|
||||
@ -59,7 +59,7 @@ def generate(source_path, base):
|
||||
|
||||
os.makedirs(os.path.dirname(destination + "/" + full_path), exist_ok=True)
|
||||
|
||||
with open(destination + "/" + full_path, "w") as f:
|
||||
with open(destination + "/" + full_path, "w", encoding="utf-8") as f:
|
||||
f.write(
|
||||
page_template.format(
|
||||
title=name,
|
||||
@ -94,7 +94,7 @@ def generate(source_path, base):
|
||||
inner_path = base + "/index" + ".rst"
|
||||
module = "pyrogram.api.{}".format(base)
|
||||
|
||||
with open(destination + "/" + inner_path, "w") as f:
|
||||
with open(destination + "/" + inner_path, "w", encoding="utf-8") as f:
|
||||
if k == base:
|
||||
f.write(":tocdepth: 1\n\n")
|
||||
|
||||
@ -114,10 +114,10 @@ def start():
|
||||
global page_template
|
||||
global toctree
|
||||
|
||||
with open(home + "/template/page.txt") as f:
|
||||
with open(home + "/template/page.txt", encoding="utf-8") as f:
|
||||
page_template = f.read()
|
||||
|
||||
with open(home + "/template/toctree.txt") as f:
|
||||
with open(home + "/template/toctree.txt", encoding="utf-8") as f:
|
||||
toctree = f.read()
|
||||
|
||||
generate(types_path, types_base)
|
||||
|
@ -43,7 +43,7 @@ def start():
|
||||
|
||||
files = [i for i in os.listdir("{}/source".format(home))]
|
||||
|
||||
with open(notice_path) as f:
|
||||
with open(notice_path, encoding="utf-8") as f:
|
||||
notice = []
|
||||
|
||||
for line in f.readlines():
|
||||
@ -51,7 +51,7 @@ def start():
|
||||
|
||||
notice = "\n".join(notice)
|
||||
|
||||
with open("{}/all.py".format(dest), "w") as f_all:
|
||||
with open("{}/all.py".format(dest), "w", encoding="utf-8") as f_all:
|
||||
f_all.write(notice + "\n\n")
|
||||
f_all.write("count = {count}\n\n")
|
||||
f_all.write("exceptions = {\n")
|
||||
@ -66,14 +66,14 @@ def start():
|
||||
init = "{}/__init__.py".format(dest)
|
||||
|
||||
if not os.path.exists(init):
|
||||
with open(init, "w") as f_init:
|
||||
with open(init, "w", encoding="utf-8") as f_init:
|
||||
f_init.write(notice + "\n\n")
|
||||
|
||||
with open(init, "a") as f_init:
|
||||
with open(init, "a", encoding="utf-8") as f_init:
|
||||
f_init.write("from .{}_{} import *\n".format(name.lower(), code))
|
||||
|
||||
with open("{}/source/{}".format(home, i)) as f_csv, \
|
||||
open("{}/{}_{}.py".format(dest, name.lower(), code), "w") as f_class:
|
||||
with open("{}/source/{}".format(home, i), encoding="utf-8") as f_csv, \
|
||||
open("{}/{}_{}.py".format(dest, name.lower(), code), "w", encoding="utf-8") as f_class:
|
||||
reader = csv.reader(f_csv, delimiter="\t")
|
||||
|
||||
super_class = caml(name)
|
||||
@ -98,10 +98,10 @@ def start():
|
||||
|
||||
sub_classes.append((sub_class, id, message))
|
||||
|
||||
with open("{}/template/class.txt".format(home), "r") as f_class_template:
|
||||
with open("{}/template/class.txt".format(home), "r", encoding="utf-8") as f_class_template:
|
||||
class_template = f_class_template.read()
|
||||
|
||||
with open("{}/template/sub_class.txt".format(home), "r") as f_sub_class_template:
|
||||
with open("{}/template/sub_class.txt".format(home), "r", encoding="utf-8") as f_sub_class_template:
|
||||
sub_class_template = f_sub_class_template.read()
|
||||
|
||||
class_template = class_template.format(
|
||||
@ -123,10 +123,10 @@ def start():
|
||||
|
||||
f_all.write("}\n")
|
||||
|
||||
with open("{}/all.py".format(dest)) as f:
|
||||
with open("{}/all.py".format(dest), encoding="utf-8") as f:
|
||||
content = f.read()
|
||||
|
||||
with open("{}/all.py".format(dest), "w") as f:
|
||||
with open("{}/all.py".format(dest), "w", encoding="utf-8") as f:
|
||||
f.write(re.sub("{count}", str(count), content))
|
||||
|
||||
print("Compiling Errors: [100%]")
|
||||
|
@ -16,9 +16,9 @@
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with Pyrogram. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
__copyright__ = "Copyright (C) 2017-2018 Dan Tès <https://github.com/delivrance>"
|
||||
__copyright__ = "Copyright (C) 2017-2018 Dan Tès <https://github.com/delivrance>".encode(errors="replace").decode()
|
||||
__license__ = "GNU Lesser General Public License v3 or later (LGPLv3+)"
|
||||
__version__ = "0.4.0"
|
||||
__version__ = "0.4.2"
|
||||
|
||||
from .api.errors import Error
|
||||
from .client import ChatAction
|
||||
|
@ -42,7 +42,7 @@ class Error(Exception):
|
||||
|
||||
# TODO: Proper log unknown errors
|
||||
if self.CODE == 520:
|
||||
with open("unknown_errors.txt", "a") as f:
|
||||
with open("unknown_errors.txt", "a", encoding="utf-8") as f:
|
||||
f.write("{}\t{}\t{}\n".format(x.error_code, x.error_message, query_type))
|
||||
|
||||
@staticmethod
|
||||
|
@ -311,7 +311,7 @@ class Client:
|
||||
|
||||
def load_session(self, session_name):
|
||||
try:
|
||||
with open("{}.session".format(session_name)) as f:
|
||||
with open("{}.session".format(session_name), encoding="utf-8") as f:
|
||||
s = json.load(f)
|
||||
except FileNotFoundError:
|
||||
self.dc_id = 1
|
||||
@ -326,7 +326,7 @@ class Client:
|
||||
auth_key = base64.b64encode(self.auth_key).decode()
|
||||
auth_key = [auth_key[i: i + 43] for i in range(0, len(auth_key), 43)]
|
||||
|
||||
with open("{}.session".format(self.session_name), "w") as f:
|
||||
with open("{}.session".format(self.session_name), "w", encoding="utf-8") as f:
|
||||
json.dump(
|
||||
dict(
|
||||
dc_id=self.dc_id,
|
||||
@ -604,10 +604,10 @@ class Client:
|
||||
file=file,
|
||||
ttl_seconds=ttl_seconds
|
||||
),
|
||||
**self.markdown.parse(caption),
|
||||
silent=disable_notification or None,
|
||||
reply_to_msg_id=reply_to_message_id,
|
||||
random_id=self.rnd_id()
|
||||
random_id=self.rnd_id(),
|
||||
**self.markdown.parse(caption)
|
||||
)
|
||||
)
|
||||
except FilePartMissing as e:
|
||||
@ -682,10 +682,10 @@ class Client:
|
||||
types.DocumentAttributeFilename(os.path.basename(audio))
|
||||
]
|
||||
),
|
||||
**self.markdown.parse(caption),
|
||||
silent=disable_notification or None,
|
||||
reply_to_msg_id=reply_to_message_id,
|
||||
random_id=self.rnd_id()
|
||||
random_id=self.rnd_id(),
|
||||
**self.markdown.parse(caption)
|
||||
)
|
||||
)
|
||||
except FilePartMissing as e:
|
||||
@ -741,10 +741,10 @@ class Client:
|
||||
types.DocumentAttributeFilename(os.path.basename(document))
|
||||
]
|
||||
),
|
||||
**self.markdown.parse(caption),
|
||||
silent=disable_notification or None,
|
||||
reply_to_msg_id=reply_to_message_id,
|
||||
random_id=self.rnd_id()
|
||||
random_id=self.rnd_id(),
|
||||
**self.markdown.parse(caption)
|
||||
)
|
||||
)
|
||||
except FilePartMissing as e:
|
||||
@ -816,10 +816,10 @@ class Client:
|
||||
)
|
||||
]
|
||||
),
|
||||
**self.markdown.parse(caption),
|
||||
silent=disable_notification or None,
|
||||
reply_to_msg_id=reply_to_message_id,
|
||||
random_id=self.rnd_id()
|
||||
random_id=self.rnd_id(),
|
||||
**self.markdown.parse(caption)
|
||||
)
|
||||
)
|
||||
except FilePartMissing as e:
|
||||
@ -882,10 +882,10 @@ class Client:
|
||||
)
|
||||
]
|
||||
),
|
||||
**self.markdown.parse(caption),
|
||||
silent=disable_notification or None,
|
||||
reply_to_msg_id=reply_to_message_id,
|
||||
random_id=self.rnd_id()
|
||||
random_id=self.rnd_id(),
|
||||
**self.markdown.parse(caption)
|
||||
)
|
||||
)
|
||||
except FilePartMissing as e:
|
||||
|
31
setup.cfg
31
setup.cfg
@ -1,31 +0,0 @@
|
||||
[metadata]
|
||||
name = Pyrogram
|
||||
version = attr: pyrogram.__version__
|
||||
description = Telegram MTProto API Client Library for Python
|
||||
url = https://github.com/pyrogram/pyrogram
|
||||
author = Dan Tès
|
||||
author_email = admin@pyrogram.ml
|
||||
license = LGPLv3+
|
||||
keywords = telegram mtproto api client library python
|
||||
classifiers =
|
||||
Development Status :: 3 - Alpha
|
||||
Intended Audience :: Developers
|
||||
License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)
|
||||
Operating System :: OS Independent
|
||||
Programming Language :: Python
|
||||
Programming Language :: Python :: 3
|
||||
Programming Language :: Python :: 3.3
|
||||
Programming Language :: Python :: 3.4
|
||||
Programming Language :: Python :: 3.5
|
||||
Programming Language :: Python :: 3.6
|
||||
Topic :: Internet
|
||||
Topic :: Communications :: Chat
|
||||
Topic :: Software Development :: Libraries
|
||||
Topic :: Software Development :: Libraries :: Python Modules
|
||||
|
||||
[options]
|
||||
packages = find:
|
||||
zip_safe = False
|
||||
setup_requires = pyaes; pysocks
|
||||
install_requires = pyaes; pysocks
|
||||
include_package_data = True
|
39
setup.py
39
setup.py
@ -19,7 +19,7 @@
|
||||
import re
|
||||
from sys import argv
|
||||
|
||||
from setuptools import setup
|
||||
from setuptools import setup, find_packages
|
||||
|
||||
from compiler.api import compiler as api_compiler
|
||||
from compiler.error import compiler as error_compiler
|
||||
@ -31,9 +31,42 @@ if len(argv) > 1 and argv[1] != "sdist":
|
||||
error_compiler.start()
|
||||
# docs_compiler.start()
|
||||
|
||||
with open("pyrogram/__init__.py", encoding="utf-8") as f:
|
||||
version = re.findall(r"__version__ = \"(.+)\"", f.read())[0]
|
||||
|
||||
# PyPI doesn't like raw html
|
||||
with open("README.rst", encoding="UTF-8") as f:
|
||||
with open("README.rst", encoding="utf-8") as f:
|
||||
readme = re.sub(r"\.\. \|.+\| raw:: html(?:\s{4}.+)+\n\n", "", f.read())
|
||||
readme = re.sub(r"\|header\|", "|logo|\n\n|description|\n\n|scheme| |mtproto|", readme)
|
||||
|
||||
setup(long_description=readme)
|
||||
setup(
|
||||
name="Pyrogram",
|
||||
version=version,
|
||||
description="Telegram MTProto API Client Library for Python",
|
||||
url="https://github.com/pyrogram/pyrogram",
|
||||
author="Dan Tès",
|
||||
author_email="admin@pyrogram.ml",
|
||||
license="LGPLv3+",
|
||||
keywords="telegram mtproto api client library python",
|
||||
long_description=readme,
|
||||
classifiers=[
|
||||
"Development Status :: 3 - Alpha",
|
||||
"Intended Audience :: Developers",
|
||||
"License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)",
|
||||
"Operating System :: OS Independent",
|
||||
"Programming Language :: Python",
|
||||
"Programming Language :: Python :: 3",
|
||||
"Programming Language :: Python :: 3.3",
|
||||
"Programming Language :: Python :: 3.4",
|
||||
"Programming Language :: Python :: 3.5",
|
||||
"Programming Language :: Python :: 3.6",
|
||||
"Topic :: Internet",
|
||||
"Topic :: Communications :: Chat",
|
||||
"Topic :: Software Development :: Libraries",
|
||||
"Topic :: Software Development :: Libraries :: Python Modules"
|
||||
],
|
||||
packages=find_packages(),
|
||||
zip_safe=False,
|
||||
install_requires=["pyaes", "pysocks"],
|
||||
include_package_data=True,
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user