Never make 'body' required. (#718)

diff --git a/googleapiclient/discovery.py b/googleapiclient/discovery.py
index 7d895bb..3359593 100644
--- a/googleapiclient/discovery.py
+++ b/googleapiclient/discovery.py
@@ -96,7 +96,6 @@
 BODY_PARAMETER_DEFAULT_VALUE = {
     'description': 'The request body.',
     'type': 'object',
-    'required': True,
 }
 MEDIA_BODY_PARAMETER_DEFAULT_VALUE = {
     'description': ('The filename of the media request body, or an instance '
@@ -494,9 +493,6 @@
   if http_method in HTTP_PAYLOAD_METHODS and 'request' in method_desc:
     body = BODY_PARAMETER_DEFAULT_VALUE.copy()
     body.update(method_desc['request'])
-    # Make body optional for requests with no parameters.
-    if not _methodProperties(method_desc, schema, 'request'):
-      body['required'] = False
     parameters['body'] = body
 
   return parameters
@@ -505,10 +501,8 @@
 def _fix_up_media_upload(method_desc, root_desc, path_url, parameters):
   """Adds 'media_body' and 'media_mime_type' parameters if supported by method.
 
-  SIDE EFFECTS: If the method supports media upload and has a required body,
-  sets body to be optional (required=False) instead. Also, if there is a
-  'mediaUpload' in the method description, adds 'media_upload' key to
-  parameters.
+  SIDE EFFECTS: If there is a 'mediaUpload' in the method description, adds
+  'media_upload' key to parameters.
 
   Args:
     method_desc: Dictionary with metadata describing an API method. Value comes
@@ -541,8 +535,6 @@
     media_path_url = _media_path_url_from_info(root_desc, path_url)
     parameters['media_body'] = MEDIA_BODY_PARAMETER_DEFAULT_VALUE.copy()
     parameters['media_mime_type'] = MEDIA_MIME_TYPE_PARAMETER_DEFAULT_VALUE.copy()
-    if 'body' in parameters:
-      parameters['body']['required'] = False
 
   return accept, max_size, media_path_url
 
diff --git a/tests/test_discovery.py b/tests/test_discovery.py
index a6635a3..b41051a 100644
--- a/tests/test_discovery.py
+++ b/tests/test_discovery.py
@@ -162,7 +162,6 @@
     body = {
         'description': 'The request body.',
         'type': 'object',
-        'required': True,
         '$ref': 'Animal',
     }
     self.assertEqual(parameters['body'], body)
@@ -206,7 +205,6 @@
     body = {
         'description': 'The request body.',
         'type': 'object',
-        'required': True,
         '$ref': 'Request',
         'key1': 'value1',
         'key2': 'value2',
@@ -219,7 +217,6 @@
     method_desc = {'request': {'$ref': 'Request'}}
 
     parameters = _fix_up_parameters(method_desc, {}, 'POST', dummy_schema)
-    self.assertFalse(parameters['body']['required'])
 
   def _base_fix_up_method_description_test(
       self, method_desc, initial_parameters, final_parameters,
@@ -267,7 +264,7 @@
   def test_fix_up_media_upload_with_initial_valid_minimal(self):
     valid_method_desc = {'mediaUpload': {'accept': []}}
     initial_parameters = {'body': {}}
-    final_parameters = {'body': {'required': False},
+    final_parameters = {'body': {},
                         'media_body': MEDIA_BODY_PARAMETER_DEFAULT_VALUE,
                         'media_mime_type': MEDIA_MIME_TYPE_PARAMETER_DEFAULT_VALUE}
     self._base_fix_up_method_description_test(
@@ -277,7 +274,7 @@
   def test_fix_up_media_upload_with_initial_valid_full(self):
     valid_method_desc = {'mediaUpload': {'accept': ['*/*'], 'maxSize': '10GB'}}
     initial_parameters = {'body': {}}
-    final_parameters = {'body': {'required': False},
+    final_parameters = {'body': {},
                         'media_body': MEDIA_BODY_PARAMETER_DEFAULT_VALUE,
                         'media_mime_type': MEDIA_MIME_TYPE_PARAMETER_DEFAULT_VALUE}
     ten_gb = 10 * 2**30