code: def _GetFieldAttributes(field):
    
    if not isinstance(field, messages.Field):
      raise TypeError('Field %r to be copied not a ProtoRPC field.' % (field,))
  
    positional_args = []
    kwargs = {
        'required': field.required,
        'repeated': field.repeated,
        'variant': field.variant,
        'default': field._Field__default,  # pylint: disable=protected-access
    }
  
    if isinstance(field, messages.MessageField):
      # Message fields can't have a default
      kwargs.pop('default')
      if not isinstance(field, message_types.DateTimeField):
        positional_args.insert(0, field.message_type)
    elif isinstance(field, messages.EnumField):
      positional_args.insert(0, field.type)
  
    return positional_args, kwargs
docs: Decomposes field into the needed arguments to pass to the constructor.
  
    This can be used to create copies of the field or to compare if two fields
    are "equal" (since __eq__ is not implemented on messages.Field).
  
    Args:
      field: A ProtoRPC message field (potentially to be copied).
  
    Raises:
      TypeError: If the field is not an instance of messages.Field.
  
    Returns:
      A pair of relevant arguments to be passed to the constructor for the field
        type. The first element is a list of positional arguments for the
        constructor and the second is a dictionary of keyword arguments.