Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b7f2760

Browse files
Merge pull request googleapis#105 from eljobe/master
Add a new_batch_http_request(callback=None) method to services.
2 parents 80da1ef + 860836f commit b7f2760

File tree

3 files changed

+28
-0
lines changed

3 files changed

+28
-0
lines changed

googleapiclient/discovery.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
from googleapiclient.errors import UnacceptableMimeTypeError
5757
from googleapiclient.errors import UnknownApiNameOrVersion
5858
from googleapiclient.errors import UnknownFileType
59+
from googleapiclient.http import BatchHttpRequest
5960
from googleapiclient.http import HttpRequest
6061
from googleapiclient.http import MediaFileUpload
6162
from googleapiclient.http import MediaUpload
@@ -950,6 +951,14 @@ def _set_service_methods(self):
950951
self._add_next_methods(self._resourceDesc, self._schema)
951952

952953
def _add_basic_methods(self, resourceDesc, rootDesc, schema):
954+
# If this is the root Resource, add a new_batch_http_request() method.
955+
if resourceDesc == rootDesc:
956+
batch_uri = '%s%s' % (
957+
rootDesc['rootUrl'], rootDesc.get('batchPath', 'batch'))
958+
def new_batch_http_request(callback=None):
959+
return BatchHttpRequest(callback=callback, batch_uri=batch_uri)
960+
self._set_dynamic_attr('new_batch_http_request', new_batch_http_request)
961+
953962
# Add basic methods to Resource
954963
if 'methods' in resourceDesc:
955964
for methodName, methodDesc in six.iteritems(resourceDesc['methods']):

tests/data/zoo.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"version": "v1",
55
"description": "Zoo API used for testing",
66
"basePath": "/zoo/",
7+
"batchPath": "batchZoo",
78
"rootUrl": "https://www.googleapis.com/",
89
"servicePath": "zoo/v1/",
910
"rpcPath": "/rpc",

tests/test_discovery.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
from googleapiclient.errors import MediaUploadSizeError
5656
from googleapiclient.errors import ResumableUploadError
5757
from googleapiclient.errors import UnacceptableMimeTypeError
58+
from googleapiclient.http import BatchHttpRequest
5859
from googleapiclient.http import HttpMock
5960
from googleapiclient.http import HttpMockSequence
6061
from googleapiclient.http import MediaFileUpload
@@ -514,6 +515,22 @@ def test_patch(self):
514515

515516
self.assertEqual(request.method, 'PATCH')
516517

518+
def test_batch_request_from_discovery(self):
519+
self.http = HttpMock(datafile('zoo.json'), {'status': '200'})
520+
# zoo defines a batchPath
521+
zoo = build('zoo', 'v1', http=self.http)
522+
batch_request = zoo.new_batch_http_request()
523+
self.assertEqual(batch_request._batch_uri,
524+
"https://www.googleapis.com/batchZoo")
525+
526+
def test_batch_request_from_default(self):
527+
self.http = HttpMock(datafile('plus.json'), {'status': '200'})
528+
# plus does not define a batchPath
529+
plus = build('plus', 'v1', http=self.http)
530+
batch_request = plus.new_batch_http_request()
531+
self.assertEqual(batch_request._batch_uri,
532+
"https://www.googleapis.com/batch")
533+
517534
def test_tunnel_patch(self):
518535
http = HttpMockSequence([
519536
({'status': '200'}, open(datafile('zoo.json'), 'rb').read()),
@@ -1066,6 +1083,7 @@ def test_pickle(self):
10661083
'load',
10671084
'loadNoTemplate',
10681085
'my',
1086+
'new_batch_http_request',
10691087
'query',
10701088
'scopedAnimals']
10711089

0 commit comments

Comments
 (0)