From bf4ca06d1190691f3db3d288a16117a54aebee63 Mon Sep 17 00:00:00 2001 From: Flora Thiebaut Date: Fri, 12 Dec 2025 09:09:46 +0000 Subject: [PATCH] build: update posthog to the latest version Closes #1086. --- .../data_tasks/task_defs.py | 8 ++-- poetry.lock | 37 ++++++------------- projects/renku_data_service/poetry.lock | 31 +++++----------- projects/renku_data_service/pyproject.toml | 2 +- projects/renku_data_tasks/poetry.lock | 31 +++++----------- projects/renku_data_tasks/pyproject.toml | 2 +- projects/secrets_storage/poetry.lock | 31 +++++----------- projects/secrets_storage/pyproject.toml | 2 +- pyproject.toml | 2 +- 9 files changed, 47 insertions(+), 99 deletions(-) diff --git a/bases/renku_data_services/data_tasks/task_defs.py b/bases/renku_data_services/data_tasks/task_defs.py index cd265fc16..964834aec 100644 --- a/bases/renku_data_services/data_tasks/task_defs.py +++ b/bases/renku_data_services/data_tasks/task_defs.py @@ -45,7 +45,7 @@ async def send_metrics_to_posthog(dm: DependencyManager) -> None: from posthog import Posthog posthog = Posthog( - api_key=dm.config.posthog.api_key, + project_api_key=dm.config.posthog.api_key, host=dm.config.posthog.host, sync_mode=True, super_properties={"environment": dm.config.posthog.environment}, @@ -59,14 +59,14 @@ async def send_metrics_to_posthog(dm: DependencyManager) -> None: async for metric in metrics: try: if metric.event == MetricsEvent.identify_user.value: - posthog.identify( + posthog.set( distinct_id=metric.anonymous_user_id, timestamp=metric.timestamp, properties=metric.metadata_ or {}, # This is sent to avoid duplicate events if multiple instances of data service are running. # Posthog deduplicates events with the same timestamp, distinct_id, event, and uuid fields: # https://github.com/PostHog/posthog/issues/17211#issuecomment-1723136534 - uuid=metric.id.to_uuid4(), + uuid=str(metric.id.to_uuid4()), ) else: posthog.capture( @@ -77,7 +77,7 @@ async def send_metrics_to_posthog(dm: DependencyManager) -> None: # This is sent to avoid duplicate events if multiple instances of data service are running. # Posthog deduplicates events with the same timestamp, distinct_id, event, and uuid fields: # https://github.com/PostHog/posthog/issues/17211#issuecomment-1723136534 - uuid=metric.id.to_uuid4(), + uuid=str(metric.id.to_uuid4()), ) except Exception as e: logger.error(f"Failed to process metrics event {metric.id}: {e}") diff --git a/poetry.lock b/poetry.lock index 84a4e1359..e5d7eb92d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 2.1.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.2 and should not be changed by hand. [[package]] name = "aiofiles" @@ -1436,7 +1436,7 @@ description = "Lightweight in-process concurrent programming" optional = false python-versions = ">=3.9" groups = ["main"] -markers = "python_version < \"3.14\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")" +markers = "python_version == \"3.13\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")" files = [ {file = "greenlet-3.2.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:777c1281aa7c786738683e302db0f55eb4b0077c20f1dc53db8852ffaea0a6b0"}, {file = "greenlet-3.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3059c6f286b53ea4711745146ffe5a5c5ff801f62f6c56949446e0f6461f8157"}, @@ -2392,18 +2392,6 @@ files = [ [package.dependencies] psutil = {version = ">=4.0.0", markers = "sys_platform != \"cygwin\""} -[[package]] -name = "monotonic" -version = "1.6" -description = "An implementation of time.monotonic() for Python 2 & < 3.3" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, - {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, -] - [[package]] name = "more-itertools" version = "10.7.0" @@ -2879,29 +2867,28 @@ files = [ [[package]] name = "posthog" -version = "3.25.0" +version = "7.0.1" description = "Integrate PostHog into any python application." optional = false -python-versions = "*" +python-versions = ">=3.10" groups = ["main"] files = [ - {file = "posthog-3.25.0-py2.py3-none-any.whl", hash = "sha256:85db78c13d1ecb11aed06fad53759c4e8fb3633442c2f3d0336bc0ce8a585d30"}, - {file = "posthog-3.25.0.tar.gz", hash = "sha256:9168f3e7a0a5571b6b1065c41b3c171fbc68bfe72c3ac0bfd6e3d2fcdb7df2ca"}, + {file = "posthog-7.0.1-py3-none-any.whl", hash = "sha256:efe212d8d88a9ba80a20c588eab4baf4b1a5e90e40b551160a5603bb21e96904"}, + {file = "posthog-7.0.1.tar.gz", hash = "sha256:21150562c2630a599c1d7eac94bc5c64eb6f6acbf3ff52ccf1e57345706db05a"}, ] [package.dependencies] backoff = ">=1.10.0" distro = ">=1.5.0" -monotonic = ">=1.5" -python-dateutil = ">2.1" +python-dateutil = ">=2.2" requests = ">=2.7,<3.0" six = ">=1.5" +typing-extensions = ">=4.2.0" [package.extras] -dev = ["black", "django-stubs", "flake8", "flake8-print", "isort", "lxml", "mypy", "mypy-baseline", "pre-commit", "pydantic", "types-mock", "types-python-dateutil", "types-requests", "types-setuptools", "types-six"] +dev = ["django-stubs", "lxml", "mypy", "mypy-baseline", "packaging", "pre-commit", "pydantic", "ruff", "setuptools", "tomli", "tomli_w", "twine", "types-mock", "types-python-dateutil", "types-requests", "types-setuptools", "types-six", "wheel"] langchain = ["langchain (>=0.2.0)"] -sentry = ["django", "sentry-sdk"] -test = ["anthropic", "coverage", "django", "flake8", "freezegun (==1.5.1)", "langchain-anthropic (>=0.2.0)", "langchain-community (>=0.2.0)", "langchain-openai (>=0.2.0)", "langgraph", "mock (>=2.0.0)", "openai", "parameterized (>=0.8.1)", "pydantic", "pylint", "pytest", "pytest-asyncio", "pytest-timeout"] +test = ["anthropic (>=0.72)", "coverage", "django", "freezegun (==1.5.1)", "google-genai", "langchain-anthropic (>=1.0)", "langchain-community (>=0.4)", "langchain-core (>=1.0)", "langchain-openai (>=1.0)", "langgraph (>=1.0)", "mock (>=2.0.0)", "openai (>=2.0)", "parameterized (>=0.8.1)", "pydantic", "pytest", "pytest-asyncio", "pytest-timeout"] [[package]] name = "pre-commit" @@ -4158,7 +4145,7 @@ description = "C version of reader, parser and emitter for ruamel.yaml derived f optional = false python-versions = ">=3.9" groups = ["dev"] -markers = "platform_python_implementation == \"CPython\" and python_version < \"3.14\"" +markers = "platform_python_implementation == \"CPython\" and python_version == \"3.13\"" files = [ {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:11f891336688faf5156a36293a9c362bdc7c88f03a8a027c2c1d8e0bcde998e5"}, {file = "ruamel.yaml.clib-0.2.12-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a606ef75a60ecf3d924613892cc603b154178ee25abb3055db5062da811fd969"}, @@ -5571,4 +5558,4 @@ cffi = ["cffi (>=1.11)"] [metadata] lock-version = "2.1" python-versions = "^3.13" -content-hash = "fe4b80b2de0d983930c20ec5e04a9f2752143a2abc2a59ccdbfb4714b4bdde47" +content-hash = "af24436e25a19bb5af498996ada060e4d139c7a77cffe7bd9c20c1b1e67335ff" diff --git a/projects/renku_data_service/poetry.lock b/projects/renku_data_service/poetry.lock index 329d109b3..533102651 100644 --- a/projects/renku_data_service/poetry.lock +++ b/projects/renku_data_service/poetry.lock @@ -1591,18 +1591,6 @@ dev = ["marshmallow[tests]", "pre-commit (>=3.5,<5.0)", "tox"] docs = ["autodocsumm (==0.2.14)", "furo (==2024.8.6)", "sphinx (==8.1.3)", "sphinx-copybutton (==0.5.2)", "sphinx-issues (==5.0.0)", "sphinxext-opengraph (==0.9.1)"] tests = ["pytest", "simplejson"] -[[package]] -name = "monotonic" -version = "1.6" -description = "An implementation of time.monotonic() for Python 2 & < 3.3" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, - {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, -] - [[package]] name = "multidict" version = "6.4.3" @@ -1801,29 +1789,28 @@ type = ["mypy (>=1.14.1)"] [[package]] name = "posthog" -version = "3.25.0" +version = "7.0.1" description = "Integrate PostHog into any python application." optional = false -python-versions = "*" +python-versions = ">=3.10" groups = ["main"] files = [ - {file = "posthog-3.25.0-py2.py3-none-any.whl", hash = "sha256:85db78c13d1ecb11aed06fad53759c4e8fb3633442c2f3d0336bc0ce8a585d30"}, - {file = "posthog-3.25.0.tar.gz", hash = "sha256:9168f3e7a0a5571b6b1065c41b3c171fbc68bfe72c3ac0bfd6e3d2fcdb7df2ca"}, + {file = "posthog-7.0.1-py3-none-any.whl", hash = "sha256:efe212d8d88a9ba80a20c588eab4baf4b1a5e90e40b551160a5603bb21e96904"}, + {file = "posthog-7.0.1.tar.gz", hash = "sha256:21150562c2630a599c1d7eac94bc5c64eb6f6acbf3ff52ccf1e57345706db05a"}, ] [package.dependencies] backoff = ">=1.10.0" distro = ">=1.5.0" -monotonic = ">=1.5" -python-dateutil = ">2.1" +python-dateutil = ">=2.2" requests = ">=2.7,<3.0" six = ">=1.5" +typing-extensions = ">=4.2.0" [package.extras] -dev = ["black", "django-stubs", "flake8", "flake8-print", "isort", "lxml", "mypy", "mypy-baseline", "pre-commit", "pydantic", "types-mock", "types-python-dateutil", "types-requests", "types-setuptools", "types-six"] +dev = ["django-stubs", "lxml", "mypy", "mypy-baseline", "packaging", "pre-commit", "pydantic", "ruff", "setuptools", "tomli", "tomli_w", "twine", "types-mock", "types-python-dateutil", "types-requests", "types-setuptools", "types-six", "wheel"] langchain = ["langchain (>=0.2.0)"] -sentry = ["django", "sentry-sdk"] -test = ["anthropic", "coverage", "django", "flake8", "freezegun (==1.5.1)", "langchain-anthropic (>=0.2.0)", "langchain-community (>=0.2.0)", "langchain-openai (>=0.2.0)", "langgraph", "mock (>=2.0.0)", "openai", "parameterized (>=0.8.1)", "pydantic", "pylint", "pytest", "pytest-asyncio", "pytest-timeout"] +test = ["anthropic (>=0.72)", "coverage", "django", "freezegun (==1.5.1)", "google-genai", "langchain-anthropic (>=1.0)", "langchain-community (>=0.4)", "langchain-core (>=1.0)", "langchain-openai (>=1.0)", "langgraph (>=1.0)", "mock (>=2.0.0)", "openai (>=2.0)", "parameterized (>=0.8.1)", "pydantic", "pytest", "pytest-asyncio", "pytest-timeout"] [[package]] name = "prometheus-client" @@ -3323,4 +3310,4 @@ propcache = ">=0.2.1" [metadata] lock-version = "2.1" python-versions = "^3.13" -content-hash = "8b0e7b2ac2ccc195ad579ad09502d47ba20cb622c47c067b2998c80d3951a1b7" +content-hash = "ff92c9dceaef1edbce3e0970a08fdd4cf015e3cada90325a583cc9b32ec8e2ac" diff --git a/projects/renku_data_service/pyproject.toml b/projects/renku_data_service/pyproject.toml index 8b4c26fde..283c36d6d 100644 --- a/projects/renku_data_service/pyproject.toml +++ b/projects/renku_data_service/pyproject.toml @@ -83,7 +83,7 @@ werkzeug = "^3.1.3" toml = "^0.10.2" parsy = "^2.1" sanic-ext = "^24.12.0" -posthog = "^3.21.0" +posthog = "^7.0.1" markdown-code-runner = "^2.2.0" [tool.poetry.group.dev.dependencies] diff --git a/projects/renku_data_tasks/poetry.lock b/projects/renku_data_tasks/poetry.lock index 442fc8edb..f530d85c9 100644 --- a/projects/renku_data_tasks/poetry.lock +++ b/projects/renku_data_tasks/poetry.lock @@ -1591,18 +1591,6 @@ dev = ["marshmallow[tests]", "pre-commit (>=3.5,<5.0)", "tox"] docs = ["autodocsumm (==0.2.14)", "furo (==2024.8.6)", "sphinx (==8.1.3)", "sphinx-copybutton (==0.5.2)", "sphinx-issues (==5.0.0)", "sphinxext-opengraph (==0.9.1)"] tests = ["pytest", "simplejson"] -[[package]] -name = "monotonic" -version = "1.6" -description = "An implementation of time.monotonic() for Python 2 & < 3.3" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, - {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, -] - [[package]] name = "multidict" version = "6.4.3" @@ -1801,29 +1789,28 @@ type = ["mypy (>=1.14.1)"] [[package]] name = "posthog" -version = "3.25.0" +version = "7.0.1" description = "Integrate PostHog into any python application." optional = false -python-versions = "*" +python-versions = ">=3.10" groups = ["main"] files = [ - {file = "posthog-3.25.0-py2.py3-none-any.whl", hash = "sha256:85db78c13d1ecb11aed06fad53759c4e8fb3633442c2f3d0336bc0ce8a585d30"}, - {file = "posthog-3.25.0.tar.gz", hash = "sha256:9168f3e7a0a5571b6b1065c41b3c171fbc68bfe72c3ac0bfd6e3d2fcdb7df2ca"}, + {file = "posthog-7.0.1-py3-none-any.whl", hash = "sha256:efe212d8d88a9ba80a20c588eab4baf4b1a5e90e40b551160a5603bb21e96904"}, + {file = "posthog-7.0.1.tar.gz", hash = "sha256:21150562c2630a599c1d7eac94bc5c64eb6f6acbf3ff52ccf1e57345706db05a"}, ] [package.dependencies] backoff = ">=1.10.0" distro = ">=1.5.0" -monotonic = ">=1.5" -python-dateutil = ">2.1" +python-dateutil = ">=2.2" requests = ">=2.7,<3.0" six = ">=1.5" +typing-extensions = ">=4.2.0" [package.extras] -dev = ["black", "django-stubs", "flake8", "flake8-print", "isort", "lxml", "mypy", "mypy-baseline", "pre-commit", "pydantic", "types-mock", "types-python-dateutil", "types-requests", "types-setuptools", "types-six"] +dev = ["django-stubs", "lxml", "mypy", "mypy-baseline", "packaging", "pre-commit", "pydantic", "ruff", "setuptools", "tomli", "tomli_w", "twine", "types-mock", "types-python-dateutil", "types-requests", "types-setuptools", "types-six", "wheel"] langchain = ["langchain (>=0.2.0)"] -sentry = ["django", "sentry-sdk"] -test = ["anthropic", "coverage", "django", "flake8", "freezegun (==1.5.1)", "langchain-anthropic (>=0.2.0)", "langchain-community (>=0.2.0)", "langchain-openai (>=0.2.0)", "langgraph", "mock (>=2.0.0)", "openai", "parameterized (>=0.8.1)", "pydantic", "pylint", "pytest", "pytest-asyncio", "pytest-timeout"] +test = ["anthropic (>=0.72)", "coverage", "django", "freezegun (==1.5.1)", "google-genai", "langchain-anthropic (>=1.0)", "langchain-community (>=0.4)", "langchain-core (>=1.0)", "langchain-openai (>=1.0)", "langgraph (>=1.0)", "mock (>=2.0.0)", "openai (>=2.0)", "parameterized (>=0.8.1)", "pydantic", "pytest", "pytest-asyncio", "pytest-timeout"] [[package]] name = "prometheus-client" @@ -3323,4 +3310,4 @@ propcache = ">=0.2.1" [metadata] lock-version = "2.1" python-versions = "^3.13" -content-hash = "3ff97fe1bee28ff24e8a19331e646a2d66a5800cfef2e02104ea0dbd4fae7404" +content-hash = "1a6130e22bd0421ef4c33fcd723add67afd121735d1c4359b6ae7a6c80c49dfa" diff --git a/projects/renku_data_tasks/pyproject.toml b/projects/renku_data_tasks/pyproject.toml index 6cbc5ff9e..aec279b0e 100644 --- a/projects/renku_data_tasks/pyproject.toml +++ b/projects/renku_data_tasks/pyproject.toml @@ -83,7 +83,7 @@ werkzeug = "^3.1.3" toml = "^0.10.2" parsy = "^2.1" sanic-ext = "^23.12.0" -posthog = "^3.21.0" +posthog = "^7.0.1" markdown-code-runner = "^2.2.0" [tool.poetry.group.dev.dependencies] diff --git a/projects/secrets_storage/poetry.lock b/projects/secrets_storage/poetry.lock index b16dae5c9..dd85d4f53 100644 --- a/projects/secrets_storage/poetry.lock +++ b/projects/secrets_storage/poetry.lock @@ -1596,18 +1596,6 @@ dev = ["marshmallow[tests]", "pre-commit (>=3.5,<5.0)", "tox"] docs = ["autodocsumm (==0.2.14)", "furo (==2024.8.6)", "sphinx (==8.1.3)", "sphinx-copybutton (==0.5.2)", "sphinx-issues (==5.0.0)", "sphinxext-opengraph (==0.9.1)"] tests = ["pytest", "simplejson"] -[[package]] -name = "monotonic" -version = "1.6" -description = "An implementation of time.monotonic() for Python 2 & < 3.3" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "monotonic-1.6-py2.py3-none-any.whl", hash = "sha256:68687e19a14f11f26d140dd5c86f3dba4bf5df58003000ed467e0e2a69bca96c"}, - {file = "monotonic-1.6.tar.gz", hash = "sha256:3a55207bcfed53ddd5c5bae174524062935efed17792e9de2ad0205ce9ad63f7"}, -] - [[package]] name = "multidict" version = "6.4.3" @@ -1806,29 +1794,28 @@ type = ["mypy (>=1.14.1)"] [[package]] name = "posthog" -version = "3.25.0" +version = "7.0.1" description = "Integrate PostHog into any python application." optional = false -python-versions = "*" +python-versions = ">=3.10" groups = ["main"] files = [ - {file = "posthog-3.25.0-py2.py3-none-any.whl", hash = "sha256:85db78c13d1ecb11aed06fad53759c4e8fb3633442c2f3d0336bc0ce8a585d30"}, - {file = "posthog-3.25.0.tar.gz", hash = "sha256:9168f3e7a0a5571b6b1065c41b3c171fbc68bfe72c3ac0bfd6e3d2fcdb7df2ca"}, + {file = "posthog-7.0.1-py3-none-any.whl", hash = "sha256:efe212d8d88a9ba80a20c588eab4baf4b1a5e90e40b551160a5603bb21e96904"}, + {file = "posthog-7.0.1.tar.gz", hash = "sha256:21150562c2630a599c1d7eac94bc5c64eb6f6acbf3ff52ccf1e57345706db05a"}, ] [package.dependencies] backoff = ">=1.10.0" distro = ">=1.5.0" -monotonic = ">=1.5" -python-dateutil = ">2.1" +python-dateutil = ">=2.2" requests = ">=2.7,<3.0" six = ">=1.5" +typing-extensions = ">=4.2.0" [package.extras] -dev = ["black", "django-stubs", "flake8", "flake8-print", "isort", "lxml", "mypy", "mypy-baseline", "pre-commit", "pydantic", "types-mock", "types-python-dateutil", "types-requests", "types-setuptools", "types-six"] +dev = ["django-stubs", "lxml", "mypy", "mypy-baseline", "packaging", "pre-commit", "pydantic", "ruff", "setuptools", "tomli", "tomli_w", "twine", "types-mock", "types-python-dateutil", "types-requests", "types-setuptools", "types-six", "wheel"] langchain = ["langchain (>=0.2.0)"] -sentry = ["django", "sentry-sdk"] -test = ["anthropic", "coverage", "django", "flake8", "freezegun (==1.5.1)", "langchain-anthropic (>=0.2.0)", "langchain-community (>=0.2.0)", "langchain-openai (>=0.2.0)", "langgraph", "mock (>=2.0.0)", "openai", "parameterized (>=0.8.1)", "pydantic", "pylint", "pytest", "pytest-asyncio", "pytest-timeout"] +test = ["anthropic (>=0.72)", "coverage", "django", "freezegun (==1.5.1)", "google-genai", "langchain-anthropic (>=1.0)", "langchain-community (>=0.4)", "langchain-core (>=1.0)", "langchain-openai (>=1.0)", "langgraph (>=1.0)", "mock (>=2.0.0)", "openai (>=2.0)", "parameterized (>=0.8.1)", "pydantic", "pytest", "pytest-asyncio", "pytest-timeout"] [[package]] name = "prometheus-client" @@ -3328,4 +3315,4 @@ propcache = ">=0.2.1" [metadata] lock-version = "2.1" python-versions = "^3.13" -content-hash = "8485ea470b23747241ba91df9771f6302689b14ebbf1c02059d690f28eb99510" +content-hash = "46feda8c874cb0267d4497e5854a52bf946f77c65f94f98261dd1090d91703da" diff --git a/projects/secrets_storage/pyproject.toml b/projects/secrets_storage/pyproject.toml index d37c93a72..87c00b0af 100644 --- a/projects/secrets_storage/pyproject.toml +++ b/projects/secrets_storage/pyproject.toml @@ -83,7 +83,7 @@ toml = "^0.10.2" werkzeug = "^3.1.3" parsy = "^2.1" sanic-ext = "^24.12.0" -posthog = "^3.21.0" +posthog = "^7.0.1" markdown-code-runner = "^2.2.0" [tool.poetry.group.dev.dependencies] diff --git a/pyproject.toml b/pyproject.toml index 6085b1c2c..529c05c14 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -86,7 +86,7 @@ protobuf = "^5.29.3" poetry = "^2.1.1" parsy = "^2.1" sanic-ext = "^24.12.0" -posthog = "^3.21.0" +posthog = "^7.0.1" markdown-code-runner = "^2.2.0" [tool.poetry.group.dev.dependencies]