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' ] = dict ( )
45+ kwargs [ 'headers' ]. update ({ 'middleware_control' : json . dumps ( middleware_control )})
4346
44- return request
47+ return func ( * args , ** kwargs )
4548
4649 return wrapper
4750
@@ -81,16 +84,34 @@ def __init__(self, **kwargs):
8184 """
8285 self .graph_session = self .get_graph_session (** kwargs )
8386
87+ @collect_options
8488 def get (self , url : str , ** kwargs ):
8589 r"""Sends a GET request. Returns :class:`Response` object.
8690 :param url: URL for the new :class:`Request` object.
8791 :param \*\*kwargs: Optional arguments that ``request`` takes.
8892 :rtype: requests.Response
8993 """
90- prepared_request = self .prepare_request ('GET' , self ._graph_url (url ), ** kwargs )
91- return self .graph_session .send (prepared_request )
94+ return self .graph_session .get (self ._graph_url (url ), ** kwargs )
95+
96+ def options (self , url , ** kwargs ):
97+ r"""Sends a OPTIONS request. Returns :class:`Response` object.
98+ :param url: URL for the new :class:`Request` object.
99+ :param \*\*kwargs: Optional arguments that ``request`` takes.
100+ :rtype: requests.Response
101+ """
102+
103+ return self .graph_session .options (self ._graph_url (url ), ** kwargs )
92104
93- def post (self , url , ** kwargs ):
105+ def head (self , url , ** kwargs ):
106+ r"""Sends a HEAD request. Returns :class:`Response` object.
107+ :param url: URL for the new :class:`Request` object.
108+ :param \*\*kwargs: Optional arguments that ``request`` takes.
109+ :rtype: requests.Response
110+ """
111+
112+ return self .graph_session .head (self ._graph_url (url ), ** kwargs )
113+
114+ def post (self , url , data = None , json = None , ** kwargs ):
94115 r"""Sends a POST request. Returns :class:`Response` object.
95116 :param url: URL for the new :class:`Request` object.
96117 :param data: (optional) Dictionary, list of tuples, bytes, or file-like
@@ -99,8 +120,7 @@ def post(self, url, **kwargs):
99120 :param \*\*kwargs: Optional arguments that ``request`` takes.
100121 :rtype: requests.Response
101122 """
102- prepared_request = self .prepare_request ('POST' , self ._graph_url (url ), ** kwargs )
103- return self .graph_session .send (prepared_request )
123+ return self .graph_session .post (self ._graph_url (url ), data = data , json = json , ** kwargs )
104124
105125 def put (self , url , data = None , ** kwargs ):
106126 r"""Sends a PUT request. Returns :class:`Response` object.
@@ -110,8 +130,8 @@ def put(self, url, data=None, **kwargs):
110130 :param \*\*kwargs: Optional arguments that ``request`` takes.
111131 :rtype: requests.Response
112132 """
113- prepared_request = self . prepare_request ( 'PUT' , self . _graph_url ( url ), ** kwargs )
114- return self .graph_session .send ( prepared_request )
133+
134+ return self .graph_session .put ( self . _graph_url ( url ), data = data , ** kwargs )
115135
116136 def patch (self , url , data = None , ** kwargs ):
117137 r"""Sends a PATCH request. Returns :class:`Response` object.
@@ -121,17 +141,15 @@ def patch(self, url, data=None, **kwargs):
121141 :param \*\*kwargs: Optional arguments that ``request`` takes.
122142 :rtype: requests.Response
123143 """
124- prepared_request = self .prepare_request ('PATCH' , self ._graph_url (url ), ** kwargs )
125- return self .graph_session .send (prepared_request )
144+ return self .graph_session .patch (self ._graph_url (url ), data = data , ** kwargs )
126145
127146 def delete (self , url , ** kwargs ):
128147 r"""Sends a DELETE request. Returns :class:`Response` object.
129148 :param url: URL for the new :class:`Request` object.
130149 :param \*\*kwargs: Optional arguments that ``request`` takes.
131150 :rtype: requests.Response
132151 """
133- prepared_request = self .prepare_request ('DELETE' , self ._graph_url (url ), ** kwargs )
134- return self .graph_session .send (prepared_request )
152+ return self .graph_session .delete (self ._graph_url (url ), ** kwargs )
135153
136154 def _graph_url (self , url : str ) -> str :
137155 """Appends BASE_URL to user provided path
@@ -140,23 +158,6 @@ def _graph_url(self, url: str) -> str:
140158 """
141159 return self .graph_session .base_url + url if (url [0 ] == '/' ) else url
142160
143- @attach_context
144- def prepare_request (self , method , url , ** kwargs ):
145- req = Request (
146- method ,
147- url ,
148- headers = kwargs .get ('headers' ),
149- files = kwargs .get ('files' ),
150- data = kwargs .get ('data' ),
151- json = kwargs .get ('json' ),
152- params = kwargs .get ('params' ),
153- auth = kwargs .get ('auth' ),
154- cookies = kwargs .get ('cookies' ),
155- hooks = kwargs .get ('hooks' ),
156- )
157- prepared = Session ().prepare_request (req )
158- return prepared
159-
160161 @staticmethod
161162 def get_graph_session (** kwargs ):
162163 """Method to always return a single instance of a HTTP Client"""
0 commit comments