Skip to content

Commit

Permalink
Warn when deprecated settings are used.
Browse files Browse the repository at this point in the history
  • Loading branch information
thedrow committed Sep 17, 2020
1 parent e8b3e84 commit 4b9ad92
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 0 deletions.
5 changes: 5 additions & 0 deletions celery/app/log.py
Expand Up @@ -9,12 +9,14 @@
import logging
import os
import sys
import warnings
from logging.handlers import WatchedFileHandler

from kombu.utils.encoding import set_default_encoding_file

from celery import signals
from celery._state import get_current_task
from celery.exceptions import CDeprecationWarning, CPendingDeprecationWarning
from celery.local import class_property
from celery.platforms import isatty
from celery.utils.log import (ColorFormatter, LoggingProxy, get_logger,
Expand Down Expand Up @@ -70,6 +72,9 @@ def setup(self, loglevel=None, logfile=None, redirect_stdouts=False,
CELERY_LOG_LEVEL=str(loglevel) if loglevel else '',
CELERY_LOG_FILE=str(logfile) if logfile else '',
)
warnings.filterwarnings('always', category=CDeprecationWarning)
warnings.filterwarnings('always', category=CPendingDeprecationWarning)
logging.captureWarnings(True)
return handled

def redirect_stdouts(self, loglevel=None, name='celery.redirected'):
Expand Down
20 changes: 20 additions & 0 deletions celery/app/utils.py
Expand Up @@ -77,6 +77,11 @@ class Settings(ConfigurationView):
"""

def __init__(self, *args, deprecated_settings=None, **kwargs):
super().__init__(*args, **kwargs)

self.deprecated_settings = deprecated_settings

@property
def broker_read_url(self):
return (
Expand Down Expand Up @@ -190,6 +195,20 @@ def humanize(self, with_defaults=False, censored=True):
f'{key}: {pretty(value, width=50)}'
for key, value in self.table(with_defaults, censored).items())

def maybe_warn_deprecated_settings(self):
# TODO: Remove this method in Celery 6.0
if self.deprecated_settings:
from celery.utils import deprecated
from celery.app.defaults import _TO_NEW_KEY
for setting in self.deprecated_settings:
deprecated.warn(description=f'The {setting!r} setting',
removal='6.0.0',
alternative=f'Use the {_TO_NEW_KEY[setting]} instead')

return True

return False


def _new_key_to_old(key, convert=_TO_OLD_KEY.get):
return convert(key, key)
Expand Down Expand Up @@ -263,6 +282,7 @@ def detect_settings(conf, preconf=None, ignore_keys=None, prefix=None,
return Settings(
preconf, [conf, defaults],
(_old_key_to_new, _new_key_to_old),
deprecated_settings=is_in_old,
prefix=prefix,
)

Expand Down
8 changes: 8 additions & 0 deletions celery/apps/worker.py
Expand Up @@ -140,6 +140,14 @@ def on_start(self):
if not self._custom_logging and self.redirect_stdouts:
app.log.redirect_stdouts(self.redirect_stdouts_level)

# TODO: Remove the following code in Celery 6.0
if app.conf.maybe_warn_deprecated_settings():
logger.warning(
"Please run `celery upgrade settings path/to/settings.py` "
"to avoid these warnings and to allow a smoother upgrade "
"to Celery 6.0."
)

def emit_banner(self):
# Dump configuration to screen so we have some basic information
# for when users sends bug reports.
Expand Down

0 comments on commit 4b9ad92

Please sign in to comment.