Pārlūkot izejas kodu

Adds self.app.log.already_setup attribute that is global

Ask Solem 11 gadi atpakaļ
vecāks
revīzija
daaa266129

+ 11 - 3
celery/app/log.py

@@ -22,7 +22,7 @@ from kombu.log import NullHandler
 
 from celery import signals
 from celery._state import get_current_task
-from celery.five import string_t
+from celery.five import class_property, string_t
 from celery.utils import isatty
 from celery.utils.log import (
     get_logger, mlevel,
@@ -88,9 +88,9 @@ class Logging(object):
 
     def setup_logging_subsystem(self, loglevel=None, logfile=None,
                                 format=None, colorize=None, **kwargs):
-        if Logging._setup:
+        if self.already_setup:
             return
-        Logging._setup = True
+        self.already_setup = True
         loglevel = mlevel(loglevel or self.loglevel)
         format = format or self.format
         colorize = self.supports_color(colorize, logfile)
@@ -234,3 +234,11 @@ class Logging(object):
 
     def get_default_logger(self, name='celery', **kwargs):
         return get_logger(name)
+
+    @class_property
+    def already_setup(cls):
+        return cls._setup
+
+    @already_setup.setter  # noqa
+    def already_setup(cls, was_setup):
+        cls._setup = was_setup

+ 12 - 7
celery/five.py

@@ -270,13 +270,15 @@ COMPAT_MODULES = {
 
 class class_property(object):
 
-    def __init__(self, fget=None, fset=None):
-        assert fget and isinstance(fget, classmethod)
-        assert isinstance(fset, classmethod) if fset else True
-        self.__get = fget
-        self.__set = fset
-
-        info = fget.__get__(object)  # just need the info attrs.
+    def __init__(self, getter=None, setter=None):
+        if getter is not None and not isinstance(getter, classmethod):
+            getter = classmethod(getter)
+        if setter is not None and not isinstance(setter, classmethod):
+            setter = classmethod(setter)
+        self.__get = getter
+        self.__set = setter
+
+        info = getter.__get__(object)  # just need the info attrs.
         self.__doc__ = info.__doc__
         self.__name__ = info.__name__
         self.__module__ = info.__module__
@@ -291,6 +293,9 @@ class class_property(object):
             return self
         return self.__set.__get__(obj)(value)
 
+    def setter(self, setter):
+        return self.__class__(self.__get, setter)
+
 
 def reclassmethod(method):
     return classmethod(fun_of_method(method))

+ 0 - 1
celery/task/base.py

@@ -66,7 +66,6 @@ class Task(BaseTask):
         locals()[name] = reclassmethod(getattr(BaseTask, name))
 
     @class_property
-    @classmethod
     def request(cls):
         return cls._get_request()
 

+ 2 - 2
celery/tests/app/test_log.py

@@ -122,7 +122,7 @@ class test_default_logger(AppCase):
         self.setup_logger = self.app.log.setup_logger
         self.get_logger = lambda n=None: get_logger(n) if n else logging.root
         signals.setup_logging.receivers[:] = []
-        Logging._setup = False
+        self.app.log.already_setup = False
 
     def test_get_logger_sets_parent(self):
         logger = get_logger('celery.test_get_logger')
@@ -185,7 +185,7 @@ class test_default_logger(AppCase):
             logger = self.setup_logger(loglevel=logging.ERROR, logfile=None,
                                        root=False, colorize=True)
             logger.handlers = []
-            Logging._setup = False
+            self.app.log.already_setup = False
             logger = self.setup_logger(loglevel=logging.ERROR, logfile=None,
                                        root=False, colorize=None)
             self.assertIs(

+ 1 - 1
celery/tests/bin/test_beat.py

@@ -126,7 +126,7 @@ class test_Beat(AppCase):
                 pass
             b = beatapp.Beat(app=self.app)
             b.redirect_stdouts = False
-            b.app.log.__class__._setup = False
+            b.app.log.already_setup = False
             b.setup_logging()
             with self.assertRaises(AttributeError):
                 sys.stdout.logger

+ 1 - 1
celery/tests/bin/test_worker.py

@@ -352,7 +352,7 @@ class test_Worker(WorkerAppCase):
 
         try:
             worker = self.Worker(app=self.app, redirect_stdouts=False)
-            worker.app.log.__class__._setup = False
+            worker.app.log.already_setup = False
             worker.setup_logging()
             self.assertTrue(logging_setup[0])
             with self.assertRaises(AttributeError):