Skip to content
Snippets Groups Projects
Commit 154e2490 authored by James Curtin's avatar James Curtin Committed by James Curtin
Browse files

Warn when running Cookiecutter with incompatible python version

parent 1e34130a
No related branches found
No related tags found
No related merge requests found
......@@ -2,37 +2,42 @@ import logging
import re
import sys
LOGGER = logging.getLogger()
MODULE_REGEX = r"^[_a-zA-Z][_a-zA-Z0-9]+$"
class bcolors:
WARNING = "\033[93m"
ENDC = "\033[0m"
BOLD = "\033[1m"
# Provide ability to import from the `hooks` directory
sys.path.append("..")
def colorize(escape_code, text):
code = getattr(bcolors, escape_code)
return f"{code}{text}{bcolors.ENDC}"
logging.basicConfig()
LOGGER = logging.getLogger(__name__)
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 = (
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)
"\nWARNING: You are running cookiecutter using "
"Python {}.{}, but a version >= Python 3.6+ is required.\n"
"Either install a more recent version of Python, or use the Docker instructions.\n"
).format(python_major_version, python_minor_version)
if (python_major_version == 2) or (
python_major_version == 3 and python_minor_version < 6
):
LOGGER.warning(warning)
sys.exit(1)
def validate_python_module_name():
module_name = "{{ cookiecutter.app_name }}"
if not re.match(MODULE_REGEX, module_name):
log_warning(module_name)
log_module_name_warning(module_name, LOGGER)
sys.exit(1)
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()
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)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment