Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Добавить параметр для отключения SSL в конструкторе #233

Merged
merged 1 commit into from
Mar 29, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions API.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
можно отправить на сервер без ожидания
- `requests_per_second: float = 2.0` - максимальная скорость запросов,
которая будет использоваться после переполнения пула
- `ssl: bool = True` - использовать ли проверку SSL-сертификата при HTTP-соединениях с сервером Битрикс.
- `client: aiohttp.ClientSession = None` - использовать для HTTP-вызовов клиента, инициализированного и настроенного пользователем.

Параметры `request_pool_size` и `requests_per_second` установлены согласно ограничениям Битрикс24.
Expand Down
20 changes: 2 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -253,25 +253,9 @@ deals.sort(key = lambda d: int(d['ID']))
Нарушение политики Битриска по скорости запросов влечет за собой штрафы, поэтому мы рекомендуем соблюдать её (параметр `respect_velocity_policy=True`).

### Я получаю ошибку сертификата SSL. Что делать?
Если вы получаете `SSLCertVerificationError` / `CERTIFICATE_VERIFY_FAILED`, попробуйте отключить верификацию сертификата SSL. При инициализации передайте в `BitrixAsync` параметр `client`, где будет инициализированный вами экземпляр `aiohttp.ClientSession`, у которого будет отключена верификация SSL:
Если вы получаете `SSLCertVerificationError` / `CERTIFICATE_VERIFY_FAILED`, попробуйте отключить верификацию сертификата SSL:
```python
import aiohttp
import asyncio

from fast_bitrix24 import BitrixAsync


async def main():
# Инициализировать HTTP-клиента без верификации SSL и передать его в `BitrixAsync`
connector = aiohttp.TCPConnector(ssl=False)
async with aiohttp.ClientSession(connector=connector) as client:
b = BitrixAsync(webhook, client=client)

# Далее ваши вызовы Битрикса
...


asyncio.run(main())
b = BitrixAsync(webhook, ssl=False)
```

## Я использую вашу библиотеку из ноутбуков или из Spyder и получаю ошибки. Что делать?
Expand Down
6 changes: 5 additions & 1 deletion fast_bitrix24/bitrix.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ def __init__(
request_pool_size: int = 50,
requests_per_second: float = 2.0,
client: aiohttp.ClientSession = None,
ssl: bool = True,
):
"""
Создает объект для запросов к Битрикс24.
Expand All @@ -47,16 +48,19 @@ def __init__(
можно отправить на сервер без ожидания
- `requests_per_second: float = 2.0` - максимальная скорость запросов,
которая будет использоваться после переполнения пула
- `ssl: bool = True` - использовать ли проверку SSL-сертификата
при HTTP-соединениях с сервером Битрикс.
- `client: aiohttp.ClientSession = None` - использовать для HTTP-вызовов
объект aiohttp.ClientSession, инициализированнный и настроенный
пользователем.
пользователем. Ожидаеется, что пользователь сам откроет и закроет сессию.
"""

self.srh = ServerRequestHandler(
webhook=webhook,
respect_velocity_policy=respect_velocity_policy,
request_pool_size=request_pool_size,
requests_per_second=requests_per_second,
ssl=ssl,
client=client,
)
self.verbose = verbose
Expand Down
12 changes: 9 additions & 3 deletions fast_bitrix24/srh.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
request_pool_size: int,
requests_per_second: float,
client,
ssl: bool = True,
):
self.webhook = self.standardize_webhook(webhook)
self.respect_velocity_policy = respect_velocity_policy
Expand All @@ -68,6 +69,7 @@
# то будем использовать его клиента
self.client_provided_by_user = bool(client)
self.session = client
self.ssl = ssl

# лимит количества одновременных запросов,
# установленный конструктором или пользователем
Expand Down Expand Up @@ -119,16 +121,20 @@
async def handle_sessions(self):
"""Открывает и закрывает сессию в зависимости от наличия
активных запросов."""

# если клиент был задан пользователем, то ожидаем,
# что пользователь сам откроет и закроет сессию

if self.client_provided_by_user:
yield True
yield

Check warning on line 129 in fast_bitrix24/srh.py

View check run for this annotation

Codecov / codecov/patch

fast_bitrix24/srh.py#L129

Added line #L129 was not covered by tests
return

if not self.active_runs and (not self.session or self.session.closed):
self.session = aiohttp.ClientSession(raise_for_status=True)
self.active_runs += 1

try:
yield True
yield

finally:
self.active_runs -= 1
Expand Down Expand Up @@ -157,7 +163,7 @@
logger.debug(f"Requesting {{'method': {method}, 'params': {params}}}")

async with self.session.post(
url=self.webhook + method, json=params
url=self.webhook + method, json=params, ssl=self.ssl
) as response:
json = await response.json(encoding="utf-8")

Expand Down
2 changes: 1 addition & 1 deletion tests/test_srh.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ async def test_request_attempt():
mock_response.json.return_value = {'time': {'operating': 1000}}

@contextlib.asynccontextmanager
async def mock_post(url, json):
async def mock_post(url, json, ssl):
leshchenko1979 marked this conversation as resolved.
Show resolved Hide resolved
yield mock_response

mock_session = AsyncMock()
Expand Down
Loading