class_docstr: Create a context manager from a pre-execution callback and a
  post-execution callback.
  
  Parameters
  ----------
  pre : (...) -> any, optional
      A pre-execution callback. This will be passed ``*args`` and
      ``**kwargs``.
  post : (...) -> any, optional
      A post-execution callback. This will be passed ``*args`` and
      ``**kwargs``.
  
  Notes
  -----
  The enter value of this context manager will be the result of calling
  ``pre(*args, **kwargs)``
  
  Examples
  --------
  >>> def pre(where):
  ...     print('entering %s block' % where)
  >>> def post(where):
  ...     print('exiting %s block' % where)
  >>> manager = CallbackManager(pre, post)
  >>> with manager('example'):
  ...    print('inside example block')
  entering example block
  inside example block
  exiting example block
  
  These are reusable with different args:
  >>> with manager('another'):
  ...     print('inside another block')
  entering another block
  inside another block
  exiting another block
code: def __enter__(self):
      return self.pre()
  
file_path: zipline/zipline/utils/context_tricks.py
label_desc: Use image node_id 3 for calling the CallbackManager obj's underlying member method code with example usage: obj.__enter__() and returns: self