2
2
# Copyright (c) Microsoft Corporation.
3
3
# Licensed under the MIT License.
4
4
# ------------------------------------
5
+ import json
6
+
5
7
from requests import Request , Session
6
8
7
9
from ._client_factory import HTTPClientFactory
25
27
]
26
28
27
29
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 """
30
32
def wrapper (* args , ** kwargs ):
33
+
31
34
middleware_control = dict ()
32
35
33
36
for option in supported_options :
34
37
value = kwargs .pop (option , None )
35
38
if value :
36
39
middleware_control .update ({option : value })
37
40
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 )})
43
46
44
- return request
47
+ return func ( * args , ** kwargs )
45
48
46
49
return wrapper
47
50
@@ -81,16 +84,34 @@ def __init__(self, **kwargs):
81
84
"""
82
85
self .graph_session = self .get_graph_session (** kwargs )
83
86
87
+ @collect_options
84
88
def get (self , url : str , ** kwargs ):
85
89
r"""Sends a GET request. Returns :class:`Response` object.
86
90
:param url: URL for the new :class:`Request` object.
87
91
:param \*\*kwargs: Optional arguments that ``request`` takes.
88
92
:rtype: requests.Response
89
93
"""
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 )
92
104
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 ):
94
115
r"""Sends a POST request. Returns :class:`Response` object.
95
116
:param url: URL for the new :class:`Request` object.
96
117
:param data: (optional) Dictionary, list of tuples, bytes, or file-like
@@ -99,8 +120,7 @@ def post(self, url, **kwargs):
99
120
:param \*\*kwargs: Optional arguments that ``request`` takes.
100
121
:rtype: requests.Response
101
122
"""
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 )
104
124
105
125
def put (self , url , data = None , ** kwargs ):
106
126
r"""Sends a PUT request. Returns :class:`Response` object.
@@ -110,8 +130,8 @@ def put(self, url, data=None, **kwargs):
110
130
:param \*\*kwargs: Optional arguments that ``request`` takes.
111
131
:rtype: requests.Response
112
132
"""
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 )
115
135
116
136
def patch (self , url , data = None , ** kwargs ):
117
137
r"""Sends a PATCH request. Returns :class:`Response` object.
@@ -121,17 +141,15 @@ def patch(self, url, data=None, **kwargs):
121
141
:param \*\*kwargs: Optional arguments that ``request`` takes.
122
142
:rtype: requests.Response
123
143
"""
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 )
126
145
127
146
def delete (self , url , ** kwargs ):
128
147
r"""Sends a DELETE request. Returns :class:`Response` object.
129
148
:param url: URL for the new :class:`Request` object.
130
149
:param \*\*kwargs: Optional arguments that ``request`` takes.
131
150
:rtype: requests.Response
132
151
"""
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 )
135
153
136
154
def _graph_url (self , url : str ) -> str :
137
155
"""Appends BASE_URL to user provided path
@@ -140,23 +158,6 @@ def _graph_url(self, url: str) -> str:
140
158
"""
141
159
return self .graph_session .base_url + url if (url [0 ] == '/' ) else url
142
160
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
-
160
161
@staticmethod
161
162
def get_graph_session (** kwargs ):
162
163
"""Method to always return a single instance of a HTTP Client"""
0 commit comments