##// END OF EJS Templates
config: move env expansion to common code for EE usage
super-admin -
r4822:c733abbf default
parent child Browse files
Show More
@@ -85,3 +85,38 b' def load_pyramid_environment(global_conf'
85 85
86 86 if vcs_server_enabled:
87 87 connect_vcs(vcs_server_uri, utils.get_vcs_server_protocol(settings))
88
89
90 def get_rc_env_settings(prefix='ENV_{}'):
91 return {'ENV_{}'.format(key): value for key, value in os.environ.items()}
92
93
94 def substitute_values(mapping, substitutions):
95 result = {}
96
97 try:
98 for key, value in mapping.items():
99 # initialize without substitution first
100 result[key] = value
101
102 # Note: Cannot use regular replacements, since they would clash
103 # with the implementation of ConfigParser. Using "format" instead.
104 try:
105 result[key] = value.format(**substitutions)
106 except KeyError as e:
107 env_var = '{}'.format(e.args[0])
108
109 msg = 'Failed to substitute: `{key}={{{var}}}` with environment entry. ' \
110 'Make sure your environment has {var} set, or remove this ' \
111 'variable from config file'.format(key=key, var=env_var)
112
113 if env_var.startswith('ENV_'):
114 raise ValueError(msg)
115 else:
116 log.warning(msg)
117
118 except ValueError as e:
119 log.warning('Failed to substitute ENV variable: %s', e)
120 result = mapping
121
122 return result No newline at end of file
@@ -38,7 +38,7 b' from pyramid.renderers import render_to_'
38 38 from rhodecode.model import meta
39 39 from rhodecode.config import patches
40 40 from rhodecode.config import utils as config_utils
41 from rhodecode.config.environment import load_pyramid_environment
41 from rhodecode.config.environment import load_pyramid_environment, substitute_values, get_rc_env_settings
42 42
43 43 import rhodecode.events
44 44 from rhodecode.lib.middleware.vcs import VCSMiddleware
@@ -93,6 +93,9 b' def make_pyramid_app(global_config, **se'
93 93 start_time = time.time()
94 94 log.info('Pyramid app config starting')
95 95
96 global_config = substitute_values(global_config, get_rc_env_settings())
97 settings = substitute_values(settings, get_rc_env_settings())
98
96 99 # init and bootstrap StatsdClient
97 100 StatsdClient.setup(settings)
98 101
@@ -100,11 +103,6 b' def make_pyramid_app(global_config, **se'
100 103 if debug:
101 104 enable_debug()
102 105
103 environ = {'ENV_{}'.format(key): value for key, value in os.environ.items()}
104
105 global_config = _substitute_values(global_config, environ)
106 settings = _substitute_values(settings, environ)
107
108 106 sanitize_settings_and_apply_defaults(global_config, settings)
109 107
110 108 config = Configurator(settings=settings)
@@ -761,34 +759,3 b' def _string_setting(settings, name, defa'
761 759 value = value.lower()
762 760 settings[name] = value
763 761 return settings[name]
764
765
766 def _substitute_values(mapping, substitutions):
767 result = {}
768
769 try:
770 for key, value in mapping.items():
771 # initialize without substitution first
772 result[key] = value
773
774 # Note: Cannot use regular replacements, since they would clash
775 # with the implementation of ConfigParser. Using "format" instead.
776 try:
777 result[key] = value.format(**substitutions)
778 except KeyError as e:
779 env_var = '{}'.format(e.args[0])
780
781 msg = 'Failed to substitute: `{key}={{{var}}}` with environment entry. ' \
782 'Make sure your environment has {var} set, or remove this ' \
783 'variable from config file'.format(key=key, var=env_var)
784
785 if env_var.startswith('ENV_'):
786 raise ValueError(msg)
787 else:
788 log.warning(msg)
789
790 except ValueError as e:
791 log.warning('Failed to substitute ENV variable: %s', e)
792 result = mapping
793
794 return result
General Comments 0
You need to be logged in to leave comments. Login now