code: def push_scope(self, callback=None):  # noqa
          
  
          if callback is not None:
              with self.push_scope() as scope:
                  callback(scope)
              return None
  
          client, scope = self._stack[-1]
          new_layer = (client, copy.copy(scope))
          self._stack.append(new_layer)
  
          return _ScopeManager(self)
docs: Pushes a new layer on the scope stack. Returns a context manager
          that should be used to pop the scope again.  Alternatively a callback
          can be provided that is executed in the context of the scope.