mirror of
https://github.com/aiogram/aiogram.git
synced 2025-12-08 17:13:56 +00:00
Small refactoring of telegram api server
This commit is contained in:
parent
0e35b6f55e
commit
a46cd6d001
6 changed files with 43 additions and 26 deletions
3
.github/workflows/docs.yml
vendored
3
.github/workflows/docs.yml
vendored
|
|
@ -19,6 +19,9 @@ jobs:
|
|||
python -m pip install --upgrade pip
|
||||
pip install poetry
|
||||
poetry install
|
||||
- name: Run tests
|
||||
run: |
|
||||
poetry pytest tests
|
||||
- name: Build docs
|
||||
run: |
|
||||
poetry run mkdocs build
|
||||
|
|
|
|||
2
Makefile
2
Makefile
|
|
@ -79,7 +79,7 @@ lint: isort black flake8 mypy
|
|||
|
||||
.PHONY: test
|
||||
test:
|
||||
$(py) pytest --cov=aiogram --cov-config .coveragerc tests/ -sq
|
||||
$(py) pytest --cov=aiogram --cov-config .coveragerc tests/
|
||||
|
||||
|
||||
# =================================================================================================
|
||||
|
|
|
|||
|
|
@ -4,38 +4,21 @@ import datetime
|
|||
import json
|
||||
from typing import Any, Callable, Optional, TypeVar, Union
|
||||
|
||||
from pydantic.dataclasses import dataclass
|
||||
|
||||
from aiogram.api.methods import Response, TelegramMethod
|
||||
from ...methods import Response, TelegramMethod
|
||||
from ..telegram import PRODUCTION, TelegramAPIServer
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
|
||||
@dataclass
|
||||
class TelegramAPIServer:
|
||||
base: str
|
||||
file: str
|
||||
|
||||
def api_url(self, token: str, method: str) -> str:
|
||||
return self.base.format(token=token, method=method)
|
||||
|
||||
def file_url(self, token: str, path: str) -> str:
|
||||
return self.file.format(token=token, path=path)
|
||||
|
||||
|
||||
PRODUCTION = TelegramAPIServer(
|
||||
base="https://api.telegram.org/bot{token}/{method}",
|
||||
file="https://api.telegram.org/file/bot{token}/{path}",
|
||||
)
|
||||
|
||||
|
||||
class BaseSession(abc.ABC):
|
||||
def __init__(
|
||||
self,
|
||||
api: TelegramAPIServer = PRODUCTION,
|
||||
api: Optional[TelegramAPIServer] = None,
|
||||
json_loads: Optional[Callable] = None,
|
||||
json_dumps: Optional[Callable] = None,
|
||||
):
|
||||
if api is None:
|
||||
api = PRODUCTION
|
||||
if json_loads is None:
|
||||
json_loads = json.loads
|
||||
if json_dumps is None:
|
||||
|
|
|
|||
19
aiogram/api/client/telegram.py
Normal file
19
aiogram/api/client/telegram.py
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
from pydantic.dataclasses import dataclass
|
||||
|
||||
|
||||
@dataclass
|
||||
class TelegramAPIServer:
|
||||
base: str
|
||||
file: str
|
||||
|
||||
def api_url(self, token: str, method: str) -> str:
|
||||
return self.base.format(token=token, method=method)
|
||||
|
||||
def file_url(self, token: str, path: str) -> str:
|
||||
return self.file.format(token=token, path=path)
|
||||
|
||||
|
||||
PRODUCTION = TelegramAPIServer(
|
||||
base="https://api.telegram.org/bot{token}/{method}",
|
||||
file="https://api.telegram.org/file/bot{token}/{path}",
|
||||
)
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
from aiogram.api.client.session.base import PRODUCTION
|
||||
from aiogram.api.client.telegram import PRODUCTION
|
||||
|
||||
|
||||
class TestAPIServer:
|
||||
|
|
@ -2,11 +2,11 @@ import datetime
|
|||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
from asynctest import CoroutineMock
|
||||
|
||||
from aiogram.api.client.session.base import BaseSession
|
||||
from aiogram.api.client.telegram import PRODUCTION, TelegramAPIServer
|
||||
from aiogram.api.methods import GetMe, Response
|
||||
from aiogram.utils.mixins import DataMixin
|
||||
from asynctest import CoroutineMock
|
||||
|
||||
|
||||
class TestBaseSession(DataMixin):
|
||||
|
|
@ -17,6 +17,18 @@ class TestBaseSession(DataMixin):
|
|||
def teardown(self):
|
||||
BaseSession.__abstractmethods__ = self["__abstractmethods__"]
|
||||
|
||||
def test_init_api(self):
|
||||
session = BaseSession()
|
||||
assert session.api == PRODUCTION
|
||||
|
||||
def test_init_custom_api(self):
|
||||
api = TelegramAPIServer(
|
||||
base="http://example.com/{token}/{method}",
|
||||
file="http://example.com/{token}/file/{path{",
|
||||
)
|
||||
session = BaseSession(api=api)
|
||||
assert session.api == api
|
||||
|
||||
def test_sync_close(self):
|
||||
session = BaseSession()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue