From dbd3813a1c29e76bef6cccfcb3e403a99f86b629 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Klinkovsk=C3=BD?= <1289205+lahwaacz@users.noreply.github.com> Date: Wed, 24 Apr 2024 19:47:21 +0200 Subject: [PATCH] async_generator is needed only for python<3.10 - the asynccontextmanager object is available in the standard contextlib module since Pyhton 3.7 - the aclosing object is available in the standard contextlib module since Pyhton 3.10 - JupyterHub currently requires Python 3.8 or newer --- jupyterhub/apihandlers/users.py | 7 ++++++- jupyterhub/spawner.py | 6 +++++- jupyterhub/tests/test_services.py | 3 +-- jupyterhub/tests/test_utils.py | 7 ++++++- jupyterhub/utils.py | 6 +++++- requirements.txt | 2 +- 6 files changed, 24 insertions(+), 7 deletions(-) diff --git a/jupyterhub/apihandlers/users.py b/jupyterhub/apihandlers/users.py index a7689513..5a7cf71a 100644 --- a/jupyterhub/apihandlers/users.py +++ b/jupyterhub/apihandlers/users.py @@ -5,9 +5,14 @@ import asyncio import inspect import json +import sys from datetime import timedelta, timezone -from async_generator import aclosing +if sys.version_info >= (3, 10): + from contextlib import aclosing +else: + from async_generator import aclosing + from dateutil.parser import parse as parse_date from sqlalchemy import func, or_ from sqlalchemy.orm import joinedload, raiseload, selectinload # noqa diff --git a/jupyterhub/spawner.py b/jupyterhub/spawner.py index 392d67e8..7cc83576 100644 --- a/jupyterhub/spawner.py +++ b/jupyterhub/spawner.py @@ -18,7 +18,11 @@ from tempfile import mkdtemp from textwrap import dedent from urllib.parse import urlparse -from async_generator import aclosing +if sys.version_info >= (3, 10): + from contextlib import aclosing +else: + from async_generator import aclosing + from sqlalchemy import inspect from tornado.ioloop import PeriodicCallback from traitlets import ( diff --git a/jupyterhub/tests/test_services.py b/jupyterhub/tests/test_services.py index 389b7930..9c41c422 100644 --- a/jupyterhub/tests/test_services.py +++ b/jupyterhub/tests/test_services.py @@ -3,10 +3,9 @@ import os import sys from binascii import hexlify +from contextlib import asynccontextmanager from subprocess import Popen -from async_generator import asynccontextmanager - from ..utils import ( exponential_backoff, maybe_future, diff --git a/jupyterhub/tests/test_utils.py b/jupyterhub/tests/test_utils.py index 8b96fb36..7d17b1dc 100644 --- a/jupyterhub/tests/test_utils.py +++ b/jupyterhub/tests/test_utils.py @@ -1,12 +1,17 @@ """Tests for utilities""" import asyncio +import sys import time from concurrent.futures import ThreadPoolExecutor from unittest.mock import Mock +if sys.version_info >= (3, 10): + from contextlib import aclosing +else: + from async_generator import aclosing + import pytest -from async_generator import aclosing from tornado import gen from tornado.concurrent import run_on_executor from tornado.httpserver import HTTPRequest diff --git a/jupyterhub/utils.py b/jupyterhub/utils.py index 6a9ee8c2..694b1088 100644 --- a/jupyterhub/utils.py +++ b/jupyterhub/utils.py @@ -27,8 +27,12 @@ from hmac import compare_digest from operator import itemgetter from urllib.parse import quote +if sys.version_info >= (3, 10): + from contextlib import aclosing +else: + from async_generator import aclosing + import idna -from async_generator import aclosing from sqlalchemy.exc import SQLAlchemyError from tornado import gen, ioloop, web from tornado.httpclient import AsyncHTTPClient, HTTPError diff --git a/requirements.txt b/requirements.txt index 80b9c469..2a8a28ae 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ alembic>=1.4 -async_generator>=1.9 +async_generator>=1.9; python_version < '3.10' certipy>=0.1.2 idna importlib_metadata>=3.6; python_version < '3.10'