docs: def unmarshal_bson(
      obj,
      cls,
      allow_extra_keys=True,
      ctor=None,
  ):
      """ Unmarshal @obj into @cls
  
      Args:
          obj:              dict, A BSON object
          cls:              type, The class to unmarshal into
          allow_extra_keys: bool, False to raise an exception when extra
                            keys are present, True to ignore
          ctor:             None-or-static-method: Use this method as the
                            constructor instead of __init__
      Returns:
          instance of @cls
      Raises:
          ExtraKeysError: If allow_extra_keys == False, and extra keys
                          are present in @obj and not in @cls.__init__
          ValueError:     If @cls.__init__ does not contain a self argument
      """
      return unmarshal_dict(
          obj,
          cls,
          allow_extra_keys,
          ctor=ctor,
      )