Издевательство с помощью fakeredis+python приводит к HTTP 500Python

Программы на Python
Ответить
Anonymous
 Издевательство с помощью fakeredis+python приводит к HTTP 500

Сообщение Anonymous »

У меня есть следующий модуль FastAPI на Python с соответствующим тестом, но я никогда не могу получить ответ HTTP 200 на вызов await redis_service.set_key, который я делаю. Есть какие-нибудь предложения о том, что я могу делать неправильно?
ЭТО СУЩЕСТВУЮЩИЙ КОД (Я МОГУ ЭТО РЕФАКТОРИРОВАТЬ, НО НУЖНЫ РАБОЧИЕ ТЕСТЫ ПЕРЕД ПОПЫТКОЙ РЕФАКТОРА
from fastapi import FastAPI, HTTPException, Depends, Request
from .logs.log_messages import LOG_MESSAGES_INFO
from services.cache.service.cache_service import RedisService

# Define the service name for logging
service_name = "cache-service"

# Initialize the logger
logger = ServiceLogger(
service_name, LOG_MESSAGES_INFO, os.getenv("LOG_FILE_PATH", "api.log")
)

# Create the FastAPI app
app = FastAPI(docs_url="/api", root_path="/plt/cache-service")

redis_url = os.getenv("REDIS_URL", "redis://127.0.0.1:6379")
redis_service = RedisService(redis_url)

# Define the endpoints
@app.post("/redis/set-key/")
async def set_key(request: Request, key_value: KeyValue, namespace: str):
try:
cr_id = request.headers.get("correlationid")
logger.log("info", "MSREDI001", id=cr_id, method="set_key")

# A BREAKPOINT HERE, DOESN'T ALLOW ME TO STEP INTO set_key
# AND DIRECTLY RAISES AN EXCEPTION WITH 500 =
await redis_service.set_key(namespace, key_value.key, key_value.value, key_value.expire)
return {"status": "success"}
except Exception as e:
logger.log("error", "MSREDE004", method="set_key", id=cr_id, error=str(e))
raise HTTPException(status_code=500, detail=str(e))

Связанный тест:
import pytest
from unittest.mock import patch, MagicMock
from fastapi.testclient import TestClient
from pydantic import BaseModel
from services.cache.main import app
from fakeredis import aioredis

client = TestClient(app)

@pytest.fixture
def fake_redis():
fake_redis_instance = aioredis.FakeRedis()
return fake_redis_instance

@patch('services.cache.main.redis_service') # Mock the RedisService
@patch('services.cache.main.logger') # Mock the logger
def test_set_key_success(mock_logger, mock_redis_service, fake_redis):

# Mock model for the key-value pair
class KeyValue(BaseModel):
key: str
value: str
expire: int

mock_redis_service.set_key = MagicMock(side_effect=fake_redis.set)
mock_logger.log = MagicMock() # Mock the logger

key_value = KeyValue(key="test_key", value="test_value", expire=3600)
headers = {"correlationid": "4af44d6c-9e52-4929-9ff7-bbae3414e92f"}

response = client.post("/redis/set-key/", json={
"key": key_value.key,
"value": key_value.value,
"expire": key_value.expire
}, headers=headers, params={"namespace": "test_namespace"})

# Assert
assert response.status_code == 200 # ALWAYS FAILS THIS ASSERT
assert response.json() == {"status": "success"}


Подробнее здесь: https://stackoverflow.com/questions/792 ... n-http-500
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»