MCPcopy
hub / github.com/celery/celery / detect_settings

Function detect_settings

celery/app/utils.py:232–286  ·  view source on GitHub ↗
(conf, preconf=None, ignore_keys=None, prefix=None,
                    all_keys=None, old_keys=None)

Source from the content-addressed store, hash-verified

230
231
232def detect_settings(conf, preconf=None, ignore_keys=None, prefix=None,
233 all_keys=None, old_keys=None):
234 preconf = {} if not preconf else preconf
235 ignore_keys = set() if not ignore_keys else ignore_keys
236 all_keys = SETTING_KEYS if not all_keys else all_keys
237 old_keys = _OLD_SETTING_KEYS if not old_keys else old_keys
238
239 source = conf
240 if conf is None:
241 source, conf = preconf, {}
242 have = set(source.keys()) - ignore_keys
243 is_in_new = have.intersection(all_keys)
244 is_in_old = have.intersection(old_keys)
245
246 info = None
247 if is_in_new:
248 # have new setting names
249 info, left = _settings_info, is_in_old
250 if is_in_old and len(is_in_old) > len(is_in_new):
251 # Majority of the settings are old.
252 info, left = _old_settings_info, is_in_new
253 if is_in_old:
254 # have old setting names, or a majority of the names are old.
255 if not info:
256 info, left = _old_settings_info, is_in_new
257 if is_in_new and len(is_in_new) > len(is_in_old):
258 # Majority of the settings are new
259 info, left = _settings_info, is_in_old
260 else:
261 # no settings, just use new format.
262 info, left = _settings_info, is_in_old
263
264 if prefix:
265 # always use new format if prefix is used.
266 info, left = _settings_info, set()
267
268 # only raise error for keys that the user didn't provide two keys
269 # for (e.g., both ``result_expires`` and ``CELERY_TASK_RESULT_EXPIRES``).
270 really_left = {key for key in left if info.convert[key] not in have}
271 if really_left:
272 # user is mixing old/new, or new/old settings, give renaming
273 # suggestions.
274 raise ImproperlyConfigured(info.mix_error.format(renames='\n'.join(
275 FMT_REPLACE_SETTING.format(replace=key, with_=info.convert[key])
276 for key in sorted(really_left)
277 )))
278
279 preconf = {info.convert.get(k, k): v for k, v in preconf.items()}
280 defaults = dict(deepcopy(info.defaults), **preconf)
281 return Settings(
282 preconf, [conf, defaults],
283 (_old_key_to_new, _new_key_to_old),
284 deprecated_settings=is_in_old,
285 prefix=prefix,
286 )
287
288
289class AppPickler:

Callers 1

_load_configMethod · 0.85

Calls 7

SettingsClass · 0.85
keysMethod · 0.80
formatMethod · 0.45
joinMethod · 0.45
getMethod · 0.45
itemsMethod · 0.45

Tested by

no test coverage detected