Warn when running Cookiecutter with incompatible python version

master
James Curtin 5 years ago committed by James Curtin
parent 1e34130ad5
commit 154e24909d
  1. 0
      hooks/__init__.py
  2. 45
      hooks/pre_gen_project.py
  3. 19
      hooks/utils.py

@ -2,37 +2,42 @@ import logging
import re import re
import sys import sys
LOGGER = logging.getLogger() # Provide ability to import from the `hooks` directory
MODULE_REGEX = r"^[_a-zA-Z][_a-zA-Z0-9]+$" sys.path.append("..")
class bcolors:
WARNING = "\033[93m"
ENDC = "\033[0m"
BOLD = "\033[1m"
def colorize(escape_code, text): logging.basicConfig()
code = getattr(bcolors, escape_code) LOGGER = logging.getLogger(__name__)
return f"{code}{text}{bcolors.ENDC}" MODULE_REGEX = r"^[_a-zA-Z][_a-zA-Z0-9]+$"
def log_warning(module_name): def check_python_version():
python_major_version = sys.version_info[0]
python_minor_version = sys.version_info[1]
# Must remain compatible with Python 2 to provide useful error message.
warning = ( warning = (
f"\n{colorize('WARNING', 'WARNING:')} {colorize('BOLD', module_name)}" "\nWARNING: You are running cookiecutter using "
" is not a valid Python module name!\n" "Python {}.{}, but a version >= Python 3.6+ is required.\n"
"See https://www.python.org/dev/peps/pep-0008/#package-and-module-names" "Either install a more recent version of Python, or use the Docker instructions.\n"
" for naming standards.\n" ).format(python_major_version, python_minor_version)
) if (python_major_version == 2) or (
LOGGER.warning(warning) python_major_version == 3 and python_minor_version < 6
):
LOGGER.warning(warning)
sys.exit(1)
def validate_python_module_name(): def validate_python_module_name():
module_name = "{{ cookiecutter.app_name }}" module_name = "{{ cookiecutter.app_name }}"
if not re.match(MODULE_REGEX, module_name): if not re.match(MODULE_REGEX, module_name):
log_warning(module_name) log_module_name_warning(module_name, LOGGER)
sys.exit(1) sys.exit(1)
if __name__ == "__main__": if __name__ == "__main__":
check_python_version()
# Import after validating Python version to prevent confusing SyntaxError
# for users with incompatible Python versions.
from hooks.utils import log_module_name_warning
validate_python_module_name() validate_python_module_name()

@ -0,0 +1,19 @@
class bcolors:
WARNING = "\033[93m"
ENDC = "\033[0m"
BOLD = "\033[1m"
def colorize(escape_code, text):
code = getattr(bcolors, escape_code)
return f"{code}{text}{bcolors.ENDC}"
def log_module_name_warning(module_name, logger):
warning = (
f"\n{colorize('WARNING', 'WARNING:')} {colorize('BOLD', module_name)}"
" is not a valid Python module name!\n"
"See https://www.python.org/dev/peps/pep-0008/#package-and-module-names"
" for naming standards.\n"
)
logger.warning(warning)
Loading…
Cancel
Save