docs: def process_object(self, obj):
          """Process current object and push it to the ElasticSearch."""
          document = self.document_class(meta={'id': self.generate_id(obj)})
  
          for field in document._doc_type.mapping:  # pylint: disable=protected-access
              if field in ['users_with_permissions', 'groups_with_permissions', 'public_permission']:
                  continue  # These fields are handled separately
  
              try:
                  # use get_X_value function
                  get_value_function = getattr(self, 'get_{}_value'.format(field), None)
                  if get_value_function:
                      setattr(document, field, get_value_function(obj))  # pylint: disable=not-callable
                      continue
  
                  # use `mapping` dict
                  if field in self.mapping:
                      if callable(self.mapping[field]):
                          setattr(document, field, self.mapping[field](obj))
                          continue
  
                      try:
                          object_attr = dict_dot(obj, self.mapping[field])
                      except (KeyError, AttributeError):
                          object_attr = None
  
                      if callable(object_attr):
                          # use method on object
                          setattr(document, field, object_attr(obj))
                      else:
                          # use attribute on object
                          setattr(document, field, object_attr)
                      continue
  
                  # get value from the object
                  try:
                      object_value = dict_dot(obj, field)
                      setattr(document, field, object_value)
                      continue
                  except KeyError:
                      pass
  
                  raise AttributeError("Cannot determine mapping for field {}".format(field))
  
              except Exception:  # pylint: disable=broad-except
                  logger.exception(
                      "Error occurred while setting value of field '%s' in '%s' Elasticsearch index.",
                      field, self.__class__.__name__,
                      extra={'object_type': self.object_type, 'obj_id': obj.pk}
                  )
  
          permissions = self.get_permissions(obj)
          document.users_with_permissions = permissions['users']
          document.groups_with_permissions = permissions['groups']
          document.public_permission = permissions['public']
  
          self.push_queue.append(document)