63 lines
1.5 KiB
Python
Executable file
63 lines
1.5 KiB
Python
Executable file
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
cookiecutter.config
|
|
-------------------
|
|
|
|
Global configuration handling
|
|
"""
|
|
|
|
from __future__ import unicode_literals
|
|
import copy
|
|
import logging
|
|
import os
|
|
import io
|
|
|
|
from .exceptions import ConfigDoesNotExistException
|
|
from .exceptions import InvalidConfiguration
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
DEFAULT_CONFIG = {
|
|
'cookiecutters_dir': os.path.expanduser('~/.cookiecutters/'),
|
|
'default_context': {}
|
|
}
|
|
|
|
|
|
def get_config(config_path):
|
|
"""
|
|
Retrieve the config from the specified path, returning it as a config dict.
|
|
"""
|
|
|
|
if not os.path.exists(config_path):
|
|
raise ConfigDoesNotExistException
|
|
|
|
import yaml
|
|
logger.debug('config_path is {0}'.format(config_path))
|
|
with io.open(config_path, encoding='utf-8') as file_handle:
|
|
try:
|
|
yaml_dict = yaml.safe_load(file_handle)
|
|
except yaml.scanner.ScannerError:
|
|
raise InvalidConfiguration(
|
|
'{0} is no a valid YAML file'.format(config_path))
|
|
|
|
config_dict = copy.copy(DEFAULT_CONFIG)
|
|
config_dict.update(yaml_dict)
|
|
|
|
return config_dict
|
|
|
|
|
|
def get_user_config():
|
|
"""
|
|
Retrieve config from the user's ~/.cookiecutterrc, if it exists.
|
|
Otherwise, return None.
|
|
"""
|
|
|
|
# TODO: test on windows...
|
|
USER_CONFIG_PATH = os.path.expanduser('~/.cookiecutterrc')
|
|
|
|
if os.path.exists(USER_CONFIG_PATH):
|
|
return get_config(USER_CONFIG_PATH)
|
|
return copy.copy(DEFAULT_CONFIG)
|