From 95ee518aec1d7e9be3dc0da987ed5a0848cbe975 Mon Sep 17 00:00:00 2001 From: Mary Date: Fri, 16 Dec 2022 14:48:41 +0900 Subject: [PATCH] Replace deprecated distutils.strtobool (#2628) --- sanic/server/loop.py | 4 ++-- setup.py | 25 +++++++++++++++++++++---- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/sanic/server/loop.py b/sanic/server/loop.py index d9be109d..d41e605e 100644 --- a/sanic/server/loop.py +++ b/sanic/server/loop.py @@ -1,11 +1,11 @@ import asyncio import sys -from distutils.util import strtobool from os import getenv from sanic.compat import OS_IS_WINDOWS from sanic.log import error_logger +from sanic.utils import str_to_bool def try_use_uvloop() -> None: @@ -35,7 +35,7 @@ def try_use_uvloop() -> None: ) return - uvloop_install_removed = strtobool(getenv("SANIC_NO_UVLOOP", "no")) + uvloop_install_removed = str_to_bool(getenv("SANIC_NO_UVLOOP", "no")) if uvloop_install_removed: error_logger.info( "You are requesting to run Sanic using uvloop, but the " diff --git a/setup.py b/setup.py index 9ece8cb5..a8bd760a 100644 --- a/setup.py +++ b/setup.py @@ -6,8 +6,6 @@ import os import re import sys -from distutils.util import strtobool - from setuptools import find_packages, setup from setuptools.command.test import test as TestCommand @@ -37,6 +35,25 @@ def open_local(paths, mode="r", encoding="utf8"): return codecs.open(path, mode, encoding) +def str_to_bool(val: str) -> bool: + val = val.lower() + if val in { + "y", + "yes", + "yep", + "yup", + "t", + "true", + "on", + "enable", + "enabled", + "1", + }: + return True + elif val in {"n", "no", "f", "false", "off", "disable", "disabled", "0"}: + return False + else: + raise ValueError(f"Invalid truth value {val}") with open_local(["sanic", "__version__.py"], encoding="latin1") as fp: try: @@ -131,13 +148,13 @@ dev_require = tests_require + [ all_require = list(set(dev_require + docs_require)) -if strtobool(os.environ.get("SANIC_NO_UJSON", "no")): +if str_to_bool(os.environ.get("SANIC_NO_UJSON", "no")): print("Installing without uJSON") requirements.remove(ujson) tests_require.remove(types_ujson) # 'nt' means windows OS -if strtobool(os.environ.get("SANIC_NO_UVLOOP", "no")): +if str_to_bool(os.environ.get("SANIC_NO_UVLOOP", "no")): print("Installing without uvLoop") requirements.remove(uvloop)