Skip to content

17th February 2022




  • New: Add tutorial on how to use asyncio.

    Roguelynn tutorial

  • New: Version overriding now supports constrains.

    Before you had to pin specific versions, which is not maintainable, now you can use constrains

    asgiref = ">=3.2.10"
  • New: Show outdated packages.

    pdm update --dry-run --unconstrained

Pydantic Factories


  • New: Resolve the 307 error.

    Probably you've introduced an ending / to the endpoint, so instead of asking for /my/endpoint you tried to do /my/endpoint/.



  • Correction: Update the tmpdir_factory type hints.

    You should now use TempPathFactory instead of TempdirFactory

  • Correction: Use pytest-freezegun globally.

    Most of the tests work with frozen time, so it's better to freeze it by default and unfreeze it on the ones that actually need time to move.

    To do that set in your tests/ a globally used fixture:

        from freezegun.api import FrozenDateTimeFactory
    def frozen_time() -> Generator['FrozenDateTimeFactory', None, None]:
        """Freeze all tests time"""
        with freezegun.freeze_time() as freeze:
            yield freeze
  • New: Ignore a warning of a specific package.

    In the pyproject.toml

    filterwarnings = [
      # Until is merged

Python Snippets

  • New: How to raise a warning.

    Warning messages are typically issued in situations where it is useful to alert the user of some condition in a program, where that condition (normally) doesn’t warrant raising an exception and terminating the program. For example, one might want to issue a warning when a program uses an obsolete module.

    import warnings
    def f():
        warnings.warn('Message', DeprecationWarning)

    To test the function with pytest you can use pytest.warns:

    import warnings
    import pytest
    def test_warning():
        with pytest.warns(UserWarning, match='my warning'):
            warnings.warn("my warning", UserWarning)
  • New: Parse XML file with beautifulsoup.

    You need both beautifulsoup4 and lxml:

    bs = BeautifulSoup(requests.get(url), "lxml")
  • New: Get a traceback from an exception.

    import traceback
    traceback_str = ''.join(traceback.format_tb(e.__traceback__))


Continuous Integration


  • New: Deprecate flakeheaven in favour of flakeheaven.

    It's a fork maintained by the community, instead of an absent code dictator.