@@ -180,6 +180,51 @@ def put(self, endpoint, body=None, params=None):
180180 "status" : response .status_code
181181 }
182182
183+ def put_file (self , endpoint , body = None , params = None ):
184+ """Method that completes a multipart PUT request to the MapRoulette API
185+
186+ :param endpoint: the server endpoint to use for the PUT request
187+ :param body: the body of the request (optional)
188+ :param params: the parameters that pertain to the request (optional)
189+ :returns: a dictionary containing the API response status code as well as the decoded JSON response if decoding
190+ was successful. If not, the response text is returned.
191+ """
192+ response = self .session .put (
193+ self .url + endpoint ,
194+ params = params ,
195+ files = body
196+ )
197+ try :
198+ response .raise_for_status ()
199+ except requests .exceptions .HTTPError as e :
200+ if e .response .status_code == 400 :
201+ raise InvalidJsonError (
202+ message = self .parse_response_message (e .response ),
203+ status = e .response .status_code
204+ ) from None
205+ elif e .response .status_code == 401 :
206+ raise UnauthorizedError (
207+ message = self .parse_response_message (e .response ),
208+ status = e .response .status_code
209+ ) from None
210+ else :
211+ raise HttpError (
212+ message = self .parse_response_message (e .response ),
213+ status = e .response .status_code
214+ ) from None
215+ except (requests .ConnectionError , requests .Timeout ) as e :
216+ raise ConnectionUnavailableError (e ) from None
217+ try :
218+ return {
219+ "data" : response .json (),
220+ "status" : response .status_code
221+ }
222+ except ValueError :
223+ return {
224+ "data" : response .text ,
225+ "status" : response .status_code
226+ }
227+
183228 def delete (self , endpoint , params = None ):
184229 """Method that completes a DELETE request to the MapRoulette API
185230
0 commit comments