Example #1
0
    def iter_context_objects(self):
        """Returns an iterator over all objects for the combined
        application and context cache.
        """
        use_gevent = is_gevent_enabled()
        use_context = is_context_enabled()

        if use_gevent:
            tid = greenlet_get_ident()
        elif use_context:
            tid = context_get_ident()
        else:
            tid = thread_get_ident()

        objects = self._cache.get(tid)
        if objects is None:
            if len(self._cache) > _MAX_CONTEXT_OBJECT_CACHE:
                self._cache.clear()
            objects = self._global[:]
            objects.extend(getattr(self._thread_context, 'stack', ()))

            if use_gevent:
                objects.extend(getattr(self._greenlet_context, 'stack', ()))

            if use_context:
                objects.extend(self._context_stack.get([]))

            objects.sort(reverse=True)
            objects = [x[1] for x in objects]
            self._cache[tid] = objects
        return iter(objects)
Example #2
0
 def pop_thread(self):
     self._thread_context_lock.acquire()
     try:
         self._cache.pop(thread_get_ident(), None)
         stack = getattr(self._thread_context, 'stack', None)
         assert stack, 'no objects on stack'
         return stack.pop()[1]
     finally:
         self._thread_context_lock.release()
Example #3
0
 def pop_thread(self):
     self._thread_context_lock.acquire()
     try:
         self._cache.pop(thread_get_ident(), None)
         stack = getattr(self._thread_context, 'stack', None)
         assert stack, 'no objects on stack'
         return stack.pop()[1]
     finally:
         self._thread_context_lock.release()
Example #4
0
 def push_thread(self, obj):
     self._thread_context_lock.acquire()
     try:
         self._cache.pop(thread_get_ident(), None)
         item = (self._stackop(), obj)
         stack = getattr(self._thread_context, 'stack', None)
         if stack is None:
             self._thread_context.stack = [item]
         else:
             stack.append(item)
     finally:
         self._thread_context_lock.release()
Example #5
0
 def push_thread(self, obj):
     self._thread_context_lock.acquire()
     try:
         self._cache.pop(thread_get_ident(), None)
         item = (self._stackop(), obj)
         stack = getattr(self._thread_context, 'stack', None)
         if stack is None:
             self._thread_context.stack = [item]
         else:
             stack.append(item)
     finally:
         self._thread_context_lock.release()
Example #6
0
 def iter_context_objects(self):
     """Returns an iterator over all objects for the combined
     application and context cache.
     """
     use_gevent = is_gevent_enabled()
     tid = greenlet_get_ident() if use_gevent else thread_get_ident()
     objects = self._cache.get(tid)
     if objects is None:
         if len(self._cache) > _MAX_CONTEXT_OBJECT_CACHE:
             self._cache.clear()
         objects = self._global[:]
         objects.extend(getattr(self._thread_context, 'stack', ()))
         if use_gevent:
             objects.extend(getattr(self._greenlet_context, 'stack', ()))
         objects.sort(reverse=True)
         objects = [x[1] for x in objects]
         self._cache[tid] = objects
     return iter(objects)
Example #7
0
 def thread(self):
     """The ident of the thread.  This is evaluated late and means that
     if the log record is passed to another thread, :meth:`pull_information`
     was called in the old thread.
     """
     return thread_get_ident()
Example #8
0
 def thread(self):
     """The ident of the thread.  This is evaluated late and means that
     if the log record is passed to another thread, :meth:`pull_information`
     was called in the old thread.
     """
     return thread_get_ident()