Switch to new discovery path parameters.

Reviewed in http://codereview.appspot.com/6374064/.
diff --git a/apiclient/discovery.py b/apiclient/discovery.py
index 84227ae..cf83530 100644
--- a/apiclient/discovery.py
+++ b/apiclient/discovery.py
@@ -208,7 +208,7 @@
 
 def build_from_document(
     service,
-    base,
+    base=None,
     future=None,
     http=None,
     developerKey=None,
@@ -222,6 +222,8 @@
   Args:
     service: string, discovery document.
     base: string, base URI for all HTTP requests, usually the discovery URI.
+      This parameter is no longer used as rootUrl and servicePath are included
+      within the discovery document. (deprecated)
     future: string, discovery document with future capabilities (deprecated).
     http: httplib2.Http, An instance of httplib2.Http or something that acts
       like it that HTTP requests will be made through.
@@ -239,7 +241,7 @@
   future = {}
 
   service = simplejson.loads(service)
-  base = urlparse.urljoin(base, service['basePath'])
+  base = urlparse.urljoin(service['rootUrl'], service['servicePath'])
   schema = Schemas(service)
 
   if model is None:
@@ -363,10 +365,8 @@
     maxSize = 0
     if 'mediaUpload' in methodDesc:
       mediaUpload = methodDesc['mediaUpload']
-      # TODO(jcgregorio) Use URLs from discovery once it is updated.
-      parsed = list(urlparse.urlparse(baseUrl))
-      basePath = parsed[2]
-      mediaPathUrl = '/upload' + basePath + pathUrl
+      mediaPathUrl = (rootDesc['rootUrl'] + 'upload/' + rootDesc['servicePath']
+                      + pathUrl)
       accept = mediaUpload['accept']
       maxSize = _media_size_to_long(mediaUpload.get('maxSize', ''))
 
diff --git a/tests/data/latitude.json b/tests/data/latitude.json
index 99967ef..7717f90 100644
--- a/tests/data/latitude.json
+++ b/tests/data/latitude.json
@@ -13,6 +13,8 @@
  ],
  "protocol": "rest",
  "basePath": "/latitude/v1/",
+ "rootUrl": "https://www.googleapis.com/",
+ "servicePath": "latitude/v1/",
  "auth": {
   "oauth2": {
    "scopes": {
diff --git a/tests/data/plus.json b/tests/data/plus.json
index fdcd30c..36d3ae9 100644
--- a/tests/data/plus.json
+++ b/tests/data/plus.json
@@ -15,6 +15,8 @@
  ],
  "protocol": "rest",
  "basePath": "/plus/v1/",
+ "rootUrl": "https://www.googleapis.com/",
+ "servicePath": "plus/v1/",
  "parameters": {
   "alt": {
    "type": "string",
diff --git a/tests/data/tasks.json b/tests/data/tasks.json
index ed3d61f..ee7be10 100644
--- a/tests/data/tasks.json
+++ b/tests/data/tasks.json
@@ -15,6 +15,8 @@
  ],
  "protocol": "rest",
  "basePath": "/tasks/v1/",
+ "rootUrl": "https://www.googleapis.com/",
+ "servicePath": "tasks/v1/",
  "parameters": {
   "alt": {
    "type": "string",
diff --git a/tests/data/zoo.json b/tests/data/zoo.json
index 0df7f7b..4c23584 100644
--- a/tests/data/zoo.json
+++ b/tests/data/zoo.json
@@ -4,6 +4,8 @@
  "version": "v1",
  "description": "Zoo API used for Apiary testing",
  "basePath": "/zoo/",
+ "rootUrl": "https://www.googleapis.com/",
+ "servicePath": "zoo/v1/",
  "rpcPath": "/rpc",
  "parameters": {
   "alt": {
diff --git a/tests/test_discovery.py b/tests/test_discovery.py
index bec272c..b1656c4 100644
--- a/tests/test_discovery.py
+++ b/tests/test_discovery.py
@@ -85,7 +85,7 @@
 
     base = "https://www.example.com/"
     plus = build_from_document(discovery, base=base)
-    self.assertEquals(base + "plus/v1/", plus._baseUrl)
+    self.assertEquals("https://www.googleapis.com/plus/v1/", plus._baseUrl)
 
 
 class DiscoveryFromHttp(unittest.TestCase):
@@ -282,7 +282,7 @@
     self.assertTrue(getattr(zoo, 'animals'))
     request = zoo.global_().print_().assert_(max_results="5")
     parsed = urlparse.urlparse(request.uri)
-    self.assertEqual(parsed[2], '/zoo/global/print/assert')
+    self.assertEqual(parsed[2], '/zoo/v1/global/print/assert')
 
   def test_top_level_functions(self):
     self.http = HttpMock(datafile('zoo.json'), {'status': '200'})
@@ -330,7 +330,7 @@
     self.assertEquals('image/png', request.headers['content-type'])
     self.assertEquals('PNG', request.body[1:4])
     self.assertEqual(
-        'https://www.googleapis.com/upload/zoo/animals?uploadType=media&alt=json',
+        'https://www.googleapis.com/upload/zoo/v1/animals?uploadType=media&alt=json',
         request.uri)
 
   def test_multipart_media_raise_correct_exceptions(self):
@@ -358,7 +358,7 @@
         'multipart/related'))
     self.assertEquals('--==', request.body[0:4])
     self.assertEqual(
-        'https://www.googleapis.com/upload/zoo/animals?uploadType=multipart&alt=json',
+        'https://www.googleapis.com/upload/zoo/v1/animals?uploadType=multipart&alt=json',
         request.uri)
 
   def test_media_capable_method_without_media(self):
@@ -476,7 +476,7 @@
     media_upload = MediaFileUpload(datafile('small.png'), resumable=True)
     request = zoo.animals().insert(media_body=media_upload, body=None)
     self.assertEqual(
-        'https://www.googleapis.com/upload/zoo/animals?uploadType=resumable&alt=json',
+        'https://www.googleapis.com/upload/zoo/v1/animals?uploadType=resumable&alt=json',
         request.uri)
 
     http = HttpMockSequence([