Skip to content

Commit f490f89

Browse files
Improvements for batch request (support for max items per bulk op), #349 related
1 parent 48e43cf commit f490f89

File tree

5 files changed

+21
-10
lines changed

5 files changed

+21
-10
lines changed

examples/sharepoint/lists_and_items/create_listitems_batch.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55
list_tasks = ctx.web.lists.get_by_title("Tasks")
66

77

8-
task_items = [list_tasks.add_item({"Title": create_unique_name("Task")}) for idx in range(0, 20)]
8+
task_items = [list_tasks.add_item({"Title": create_unique_name("Task")}) for idx in range(0, 99)]
99
ctx.execute_batch()
10-
print(f" {len(task_items)} task items created")
10+
print(" {0} task items created".format(len(task_items)))

examples/sharepoint/lists_and_items/update_items_batch.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@
77

88
# 1. Load existing list items
99
list_tasks = ctx.web.lists.get_by_title("Tasks")
10-
items = list_tasks.items.get().top(50).execute_query()
10+
items = list_tasks.items.get().top(10).execute_query()
1111
# 2. Update list items via Batch mode
1212
for task_id, item in enumerate(items):
1313
task_prefix = str(randint(0, 10000))
14-
item.set_property("Title", f"Task {task_prefix}").update()
14+
item.set_property("Title", "Task {task_prefix}".format(task_prefix=task_prefix)).update()
1515
ctx.execute_batch()
16+
print("{0} items has been updated".format(len(items)))

office365/runtime/compat.py

+2
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,14 @@
1919
from urlparse import urljoin
2020
import pytz as timezone
2121
from email import message_from_string as message_from_bytes_or_string
22+
from __builtin__ import xrange as range_or_xrange
2223
elif is_py3:
2324
from urllib.parse import urlparse
2425
from urllib.parse import quote
2526
from urllib.parse import urljoin
2627
from datetime import timezone
2728
from email import message_from_bytes as message_from_bytes_or_string
29+
from builtins import range as range_or_xrange
2830

2931

3032
def message_as_bytes_or_string(message):

office365/runtime/odata/odata_batch_request.py

-1
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,6 @@ def _deserialize_response(self, raw_response):
114114
"content": None
115115
}
116116
else:
117-
#*headers_raw, content = lines[1:]
118117
headers_raw = lines[1:-1]
119118
content = lines[-1]
120119
content = json.loads(content)

office365/sharepoint/client_context.py

+14-5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from office365.sharepoint.sites.site import Site
1717
from office365.sharepoint.webs.context_web_information import ContextWebInformation
1818
from office365.sharepoint.webs.web import Web
19+
from office365.runtime.compat import range_or_xrange
1920

2021

2122
class ClientContext(ClientRuntimeContext):
@@ -98,18 +99,26 @@ def with_credentials(self, credentials):
9899
self.authentication_context.register_provider(credentials)
99100
return self
100101

101-
def execute_batch(self):
102-
"""Construct and submit a batch request"""
102+
def execute_batch(self, items_per_bulk=100):
103+
"""
104+
Construct and submit a batch request
105+
106+
:param int items_per_bulk: Maximum to be selected for bulk operation
107+
"""
103108
batch_request = ODataBatchRequest(self)
104109

105-
queries = [qry for qry in self.pending_request()]
106-
batch_qry = BatchQuery(self, queries)
110+
all_queries = [qry for qry in self.pending_request()]
111+
# batch_qry = BatchQuery(self, all_queries)
107112

108113
def _prepare_batch_request(request):
109114
self.ensure_form_digest(request)
110115

111116
batch_request.beforeExecute += _prepare_batch_request
112-
batch_request.execute_query(batch_qry)
117+
118+
for i in range_or_xrange(0, len(all_queries), items_per_bulk):
119+
queries = all_queries[i:i + items_per_bulk]
120+
batch_qry = BatchQuery(self, queries)
121+
batch_request.execute_query(batch_qry)
113122

114123
def build_single_request(self, query):
115124
"""

0 commit comments

Comments
 (0)