def read_list_items(context, list_title, url): """Read list items example""" request = ClientRequest(context) options = RequestOptions("{0}/web/lists/getbyTitle('{1}')/items".format(url, list_title)) options.set_header('Accept', 'application/json; odata=nometadata') print("Retrieving list items from List {0}".format(list_title)) response = request.execute_request_direct(options) data = json.loads(response.content) for item in data['value']: print("Item title: {0}".format(item["Title"]))
def open_binary(ctx, server_relative_url): try: from urllib import quote # Python 2.X except ImportError: from urllib.parse import quote # Python 3+ server_relative_url = quote(server_relative_url) url = "{0}web/getfilebyserverrelativeurl('{1}')/\$value".format( ctx.service_root_url, server_relative_url) request = RequestOptions(url) request.method = HttpMethod.Get response = ctx.execute_request_direct(request) return response
def delete_list_item(context, list_title, item_id, url): """Delete list item example""" request = ClientRequest(context) options = RequestOptions( "{0}/web/lists/getbyTitle('{1}')/items({2})".format(url, list_title, item_id)) options.set_header('Accept', 'application/json; odata=nometadata') # JSON Light nometadata mode! options.set_header('IF-MATCH', '*') options.set_header('X-HTTP-Method', 'DELETE') options.data = {'Title': 'New Task (updated)'} options.method = HttpMethod.Post print("Deleting list item...") request.execute_request_direct(options) print("Task has been successfully [deleted]")
def request_form_digest(self): """Request Form Digest""" request = RequestOptions(self.service_root_url + "contextinfo") self.authenticate_request(request) request.set_headers(self.json_format.build_http_headers()) response = requests.post(url=request.url, headers=request.headers, auth=request.auth, proxies=self.proxy) self.pending_request.validate_response(response) payload = response.json() if self.json_format.metadata == ODataMetadataLevel.Verbose: payload = payload['d']['GetContextWebInformation'] self.contextWebInformation = ContextWebInformation() self.contextWebInformation.from_json(payload)
def __iter__(self): for _object in self.__data: yield _object while self.__next_query_url: # create a request with the __next_query_url request = RequestOptions(self.__next_query_url) request.set_headers(self.context.json_format.build_http_headers()) response = self.context.execute_request_direct(request) # process the response payload = self.context.pending_request.process_response_json( response) self.__next_query_url = payload["next"] child_client_objects = [] # add the new objects to the collection before yielding the results for properties in payload["collection"]: child_client_object = self.create_typed_object( properties, self.item_type) self.add_child(child_client_object) child_client_objects.append(child_client_object) for child_client_object in child_client_objects: yield child_client_object
def create_list_item(context, list_title, url): """Create list item example""" request = ClientRequest(context) options = RequestOptions("{0}/web/lists/getbyTitle('{1}')/items".format(url, list_title)) options.set_header('Accept', 'application/json; odata=nometadata') # JSON Light nometadata mode! options.data = {'Title': 'New Task'} options.method = HttpMethod.Post print("Creating list item...") response = request.execute_request_direct(options) item = json.loads(response.content) print("Task {0} has been successfully [created]".format(item['Title'])) return item
def save_binary(ctx, server_relative_url, content): try: from urllib import quote # Python 2.X except ImportError: from urllib.parse import quote # Python 3+ server_relative_url = quote(server_relative_url) url = "{0}web/getfilebyserverrelativeurl('{1}')/\$value".format( ctx.service_root_url, server_relative_url) request = RequestOptions(url) request.method = HttpMethod.Post request.set_header('X-HTTP-Method', 'PUT') request.data = content response = ctx.execute_request_direct(request) return response
def execute_request(self, url): request = RequestOptions("{0}/{1}".format(self.__service_root_url, url)) return self.execute_request_direct(request)
def build_request(self, query): request = RequestOptions(query.url) # set json format headers request.set_headers(self.context.json_format.build_http_headers()) if isinstance(self.context.json_format, JsonLightFormat): # set custom method headers if query.action_type == ActionType.DeleteEntity: request.set_header("X-HTTP-Method", "DELETE") request.set_header("IF-MATCH", '*') elif query.action_type == ActionType.UpdateEntity: request.set_header("X-HTTP-Method", "MERGE") request.set_header("IF-MATCH", '*') # set method if not (query.action_type == ActionType.ReadEntity or query.action_type == ActionType.GetMethod): request.method = HttpMethod.Post else: if query.action_type == ActionType.CreateEntity: request.method = HttpMethod.Post elif query.action_type == ActionType.UpdateEntity: request.method = HttpMethod.Patch elif query.action_type == ActionType.DeleteEntity: request.method = HttpMethod.Delete # set request payload if query.payload is not None: request.data = ODataEncoder(self.context.json_format).default(query.payload) return request
from spoklient.runtime.auth.authentication_context import AuthenticationContext from spoklient.runtime.client_request import ClientRequest from spoklient.runtime.utilities.request_options import RequestOptions from settings import settings import json from spoklient.sharepoint.client_context import ClientContext if __name__ == '__main__': context_auth = AuthenticationContext(url=settings['url']) if context_auth.acquire_token_for_user( username=settings['user_credentials']['username'], password=settings['user_credentials']['password']): """Read Web client object""" ctx = ClientContext(settings['url'], context_auth) request = ClientRequest(ctx) options = RequestOptions("{0}/_api/web/".format(settings['url'])) options.set_header('Accept', 'application/json') options.set_header('Content-Type', 'application/json') data = ctx.execute_request_direct(options) s = json.loads(data.content) web_title = s['Title'] print("Web title: {0}".format(web_title)) else: print(context_auth.get_last_error())