22# Copyright (c) Microsoft Corporation.
33# Licensed under the MIT License.
44# ------------------------------------
5+ import json
6+
57from requests import Request , Session
68
79from ._client_factory import HTTPClientFactory
2527]
2628
2729
28- def attach_context (func ):
29- """Attaches a request context object to every graph request """
30+ def collect_options (func ):
31+ """Collect middleware options into a middleware control dict and pass it as a header """
3032 def wrapper (* args , ** kwargs ):
33+
3134 middleware_control = dict ()
3235
3336 for option in supported_options :
3437 value = kwargs .pop (option , None )
3538 if value :
3639 middleware_control .update ({option : value })
3740
38- headers = kwargs .get ('headers' , {})
39- request_context = RequestContext (middleware_control , headers )
40-
41- request = func (* args , ** kwargs )
42- request .context = request_context
41+ if 'headers' in kwargs .keys ():
42+ kwargs ['headers' ].update ({'middleware_control' : json .dumps (middleware_control )})
43+ else :
44+ kwargs ['headers' ] = {'middleware_control' : json .dumps (middleware_control )}
4345
44- return request
46+ return func ( * args , ** kwargs )
4547
4648 return wrapper
4749
@@ -81,16 +83,34 @@ def __init__(self, **kwargs):
8183 """
8284 self .graph_session = self .get_graph_session (** kwargs )
8385
86+ @collect_options
8487 def get (self , url : str , ** kwargs ):
8588 r"""Sends a GET request. Returns :class:`Response` object.
8689 :param url: URL for the new :class:`Request` object.
8790 :param \*\*kwargs: Optional arguments that ``request`` takes.
8891 :rtype: requests.Response
8992 """
90- prepared_request = self .prepare_request ('GET' , self ._graph_url (url ), ** kwargs )
91- return self .graph_session .send (prepared_request )
93+ return self .graph_session .get (self ._graph_url (url ), ** kwargs )
94+
95+ def options (self , url , ** kwargs ):
96+ r"""Sends a OPTIONS request. Returns :class:`Response` object.
97+ :param url: URL for the new :class:`Request` object.
98+ :param \*\*kwargs: Optional arguments that ``request`` takes.
99+ :rtype: requests.Response
100+ """
101+
102+ return self .graph_session .options (self ._graph_url (url ), ** kwargs )
92103
93- def post (self , url , ** kwargs ):
104+ def head (self , url , ** kwargs ):
105+ r"""Sends a HEAD request. Returns :class:`Response` object.
106+ :param url: URL for the new :class:`Request` object.
107+ :param \*\*kwargs: Optional arguments that ``request`` takes.
108+ :rtype: requests.Response
109+ """
110+
111+ return self .graph_session .head (self ._graph_url (url ), ** kwargs )
112+
113+ def post (self , url , data = None , json = None , ** kwargs ):
94114 r"""Sends a POST request. Returns :class:`Response` object.
95115 :param url: URL for the new :class:`Request` object.
96116 :param data: (optional) Dictionary, list of tuples, bytes, or file-like
@@ -99,8 +119,7 @@ def post(self, url, **kwargs):
99119 :param \*\*kwargs: Optional arguments that ``request`` takes.
100120 :rtype: requests.Response
101121 """
102- prepared_request = self .prepare_request ('POST' , self ._graph_url (url ), ** kwargs )
103- return self .graph_session .send (prepared_request )
122+ return self .graph_session .post (self ._graph_url (url ), data = data , json = json , ** kwargs )
104123
105124 def put (self , url , data = None , ** kwargs ):
106125 r"""Sends a PUT request. Returns :class:`Response` object.
@@ -110,8 +129,8 @@ def put(self, url, data=None, **kwargs):
110129 :param \*\*kwargs: Optional arguments that ``request`` takes.
111130 :rtype: requests.Response
112131 """
113- prepared_request = self . prepare_request ( 'PUT' , self . _graph_url ( url ), ** kwargs )
114- return self .graph_session .send ( prepared_request )
132+
133+ return self .graph_session .put ( self . _graph_url ( url ), data = data , ** kwargs )
115134
116135 def patch (self , url , data = None , ** kwargs ):
117136 r"""Sends a PATCH request. Returns :class:`Response` object.
@@ -121,17 +140,15 @@ def patch(self, url, data=None, **kwargs):
121140 :param \*\*kwargs: Optional arguments that ``request`` takes.
122141 :rtype: requests.Response
123142 """
124- prepared_request = self .prepare_request ('PATCH' , self ._graph_url (url ), ** kwargs )
125- return self .graph_session .send (prepared_request )
143+ return self .graph_session .patch (self ._graph_url (url ), data = data , ** kwargs )
126144
127145 def delete (self , url , ** kwargs ):
128146 r"""Sends a DELETE request. Returns :class:`Response` object.
129147 :param url: URL for the new :class:`Request` object.
130148 :param \*\*kwargs: Optional arguments that ``request`` takes.
131149 :rtype: requests.Response
132150 """
133- prepared_request = self .prepare_request ('DELETE' , self ._graph_url (url ), ** kwargs )
134- return self .graph_session .send (prepared_request )
151+ return self .graph_session .delete (self ._graph_url (url ), ** kwargs )
135152
136153 def _graph_url (self , url : str ) -> str :
137154 """Appends BASE_URL to user provided path
@@ -140,12 +157,6 @@ def _graph_url(self, url: str) -> str:
140157 """
141158 return self .graph_session .base_url + url if (url [0 ] == '/' ) else url
142159
143- @attach_context
144- def prepare_request (self , method , url , ** kwargs ):
145- req = Request (method , url , ** kwargs )
146- prepared = Session ().prepare_request (req )
147- return prepared
148-
149160 @staticmethod
150161 def get_graph_session (** kwargs ):
151162 """Method to always return a single instance of a HTTP Client"""
0 commit comments