Changes to be committed:
new file: Docker/.dockerfile
new file: Docker/.env.example
new file: Docker/.gitignore
new file: Docker/requirements.txt#
deleted: test_app.py
This commit is contained in:
18
Docker/.dockerfile
Normal file
18
Docker/.dockerfile
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
FROM python:3.12-slim
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Установка зависимостей
|
||||||
|
COPY requirements.txt .
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
# Копируем код
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# Переменные окружения (можно переопределить при запуске)
|
||||||
|
ENV TELEGRAM_TOKEN=""
|
||||||
|
ENV DERPIBOORU_TOKEN=""
|
||||||
|
ENV CHANNEL_ID=""
|
||||||
|
ENV FILTER_ID=56027
|
||||||
|
|
||||||
|
CMD ["python", "app.py"]
|
||||||
4
Docker/.env.example
Normal file
4
Docker/.env.example
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
TELEGRAM_TOKEN=your-telegram-token-here
|
||||||
|
DERPIBOORU_TOKEN=your-derpibooru-token-here
|
||||||
|
CHANNEL_ID=-1002010407572
|
||||||
|
FILTER_ID=56027
|
||||||
5
Docker/.gitignore
vendored
Normal file
5
Docker/.gitignore
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
venv/
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
sent_images.json
|
||||||
|
bot.log
|
||||||
2
Docker/requirements.txt
Normal file
2
Docker/requirements.txt
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
python-telegram-bot==20.5
|
||||||
|
aiohttp==3.9.5
|
||||||
42
test_app.py
42
test_app.py
@@ -1,42 +0,0 @@
|
|||||||
import pytest
|
|
||||||
import asyncio
|
|
||||||
from aioresponses import aioresponses
|
|
||||||
from app import fetch_image, DERPYBOORU_API_SEARCH, DERPIBOORU_TOKEN
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
|
||||||
async def test_fetch_image_found():
|
|
||||||
# Мокаем API-ответ с одним изображением
|
|
||||||
tags = ["safe", "pony"]
|
|
||||||
with aioresponses() as m:
|
|
||||||
m.get(
|
|
||||||
f"{DERPYBOORU_API_SEARCH}",
|
|
||||||
payload={
|
|
||||||
"images": [
|
|
||||||
{
|
|
||||||
"representations": {"full": "https://test.img/full.png"},
|
|
||||||
"uploader": "tester",
|
|
||||||
"view_url": "https://derpibooru.org/images/1",
|
|
||||||
"tags": ["pony", "cute"]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
)
|
|
||||||
async with asyncio.get_event_loop().run_until_complete:
|
|
||||||
result = await fetch_image(tags)
|
|
||||||
assert result is not None
|
|
||||||
url, author, source, img_tags = result
|
|
||||||
assert url == "https://test.img/full.png"
|
|
||||||
assert author == "tester"
|
|
||||||
assert source == "https://derpibooru.org/images/1"
|
|
||||||
assert "pony" in img_tags
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
|
||||||
async def test_fetch_image_not_found():
|
|
||||||
tags = ["nonexistenttag123"]
|
|
||||||
with aioresponses() as m:
|
|
||||||
m.get(
|
|
||||||
f"{DERPYBOORU_API_SEARCH}",
|
|
||||||
payload={"images": []}
|
|
||||||
)
|
|
||||||
result = await fetch_image(tags)
|
|
||||||
assert result is None
|
|
||||||
Reference in New Issue
Block a user