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

обновить httpx до 0.28.0 и выше #102

Open
ArtemBalandin81 opened this issue Dec 6, 2024 · 0 comments
Open

обновить httpx до 0.28.0 и выше #102

ArtemBalandin81 opened this issue Dec 6, 2024 · 0 comments
Labels
bug Something isn't working

Comments

@ArtemBalandin81
Copy link
Owner

ArtemBalandin81 commented Dec 6, 2024

Why?

В версии httpx 0.28.0 по сравнению с 0.27.0 (в проекте) были внесены значительные изменения, особенно в класс AsyncClient. Обновление до httpx 0.28.0 вызывает в tests/conftest.py следующую ошибку:

E TypeError: AsyncClient.__init__() got an unexpected keyword argument 'app'

По всей видимости, экземпляр класса Fastapi передается иным образом, чем ранее.

How Does It Work Now?

def start_application():
    app = FastAPI()
    app.include_router(api_router)
    return app

@pytest.fixture(scope="function")
def app() -> Generator[FastAPI, Any, None]:
    """Start app"""
    _app = start_application()
    yield _app

@pytest.fixture(scope="function")
async def async_client(app, async_db: AsyncSession) -> AsyncClient:
    """
    Create a new FastAPI AsyncClient that uses the `async_db` fixture to override
    the `get_session` dependency that is injected into routes.
    """

    def _get_test_db():
        """Utility function to wrap the database session in a generator.

        Yields:
            Iterator[AsyncSession]: An iterator containing one database session.
        """
        try:
            yield async_db
        finally:
            pass

    app.dependency_overrides[get_session] = _get_test_db
    return AsyncClient(app=app, base_url="http://testserver")  # todo - здесь возникает ошибка!!!!

How To Do?

  • почитать документацию httpx 0.28.0
  • Попробовать такое решение:
transport= ASGITransport(app=app)
return AsyncClient(transport=transport, base_url="http://testserver")
...
  • обновить poetry add httpx=0.28.0 или poetry update httpx
  • запустить любой тест, например pytest -k test_unauthorized_tries_task_urls -vs и удостовериться, что он срабатывает, или возникает ошибка.
  • почитать доку и исправить ее
  • запустить все тесты pytest -vs

Important

Важно сохранить идентичность прежней и новой api.

Where?

tests/conftest.py
src/somewhere/somewhere/somewhere.py

@ArtemBalandin81 ArtemBalandin81 added the bug Something isn't working label Dec 6, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant