diff --git a/gns3server/run.py b/gns3server/run.py index 32467d45a..c58bd6e92 100644 --- a/gns3server/run.py +++ b/gns3server/run.py @@ -235,9 +235,9 @@ def run(): return log.info("HTTP authentication is enabled with username '{}'".format(user)) - # we only support Python 3 version >= 3.8 - if sys.version_info < (3, 8, 0): - raise SystemExit("Python 3.8 or higher is required") + # we only support Python 3 version >= 3.9 + if sys.version_info < (3, 9, 0): + raise SystemExit("Python 3.9 or higher is required") user_log.info("Running with Python {major}.{minor}.{micro} and has PID {pid}".format(major=sys.version_info[0], minor=sys.version_info[1], micro=sys.version_info[2], pid=os.getpid())) diff --git a/gns3server/utils/asyncio/__init__.py b/gns3server/utils/asyncio/__init__.py index efc32d066..7e464373c 100644 --- a/gns3server/utils/asyncio/__init__.py +++ b/gns3server/utils/asyncio/__init__.py @@ -91,25 +91,16 @@ async def wait_for_process_termination(process, timeout=10): In theory this can be implemented by just: await asyncio.wait_for(self._iou_process.wait(), timeout=100) - But it's broken before Python 3.4: - http://bugs.python.org/issue23140 - :param process: An asyncio subprocess :param timeout: Timeout in seconds """ - if sys.version_info >= (3, 5): - try: - await asyncio.wait_for(process.wait(), timeout=timeout) - except ProcessLookupError: + while timeout > 0: + if process.returncode is not None: return - else: - while timeout > 0: - if process.returncode is not None: - return - await asyncio.sleep(0.1) - timeout -= 0.1 - raise asyncio.TimeoutError() + await asyncio.sleep(0.1) + timeout -= 0.1 + raise asyncio.TimeoutError() async def _check_process(process, termination_callback): diff --git a/gns3server/utils/asyncio/pool.py b/gns3server/utils/asyncio/pool.py index 22750eadf..444863295 100644 --- a/gns3server/utils/asyncio/pool.py +++ b/gns3server/utils/asyncio/pool.py @@ -40,10 +40,7 @@ class Pool(): while len(self._tasks) > 0 or len(pending) > 0: while len(self._tasks) > 0 and len(pending) < self._concurrency: task, args, kwargs = self._tasks.pop(0) - if sys.version_info >= (3, 7): - t = asyncio.create_task(task(*args, **kwargs)) - else: - t = asyncio.get_event_loop().create_task(task(*args, **kwargs)) + t = asyncio.create_task(task(*args, **kwargs)) pending.add(t) (done, pending) = await asyncio.wait(pending, return_when=asyncio.FIRST_COMPLETED) for task in done: diff --git a/setup.py b/setup.py index 5685ce694..2cc398f69 100644 --- a/setup.py +++ b/setup.py @@ -21,8 +21,8 @@ from setuptools import setup, find_packages from setuptools.command.test import test as TestCommand # we only support Python 3 version >= 3.8 -if len(sys.argv) >= 2 and sys.argv[1] == "install" and sys.version_info < (3, 8): - raise SystemExit("Python 3.8 or higher is required") +if len(sys.argv) >= 2 and sys.argv[1] == "install" and sys.version_info < (3, 9): + raise SystemExit("Python 3.9 or higher is required") class PyTest(TestCommand): @@ -78,7 +78,6 @@ setup( "Operating System :: Microsoft :: Windows", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11",