|
1 | 1 | import base64 |
2 | 2 | import mimetypes |
3 | 3 | import requests |
| 4 | +from microsoftgraph import exceptions |
4 | 5 | from urllib.parse import urlencode, urlparse |
5 | 6 |
|
6 | 7 |
|
@@ -122,6 +123,18 @@ def get_me(self, params=None): |
122 | 123 | """ |
123 | 124 | return self._get(self.base_url + 'me', params=params) |
124 | 125 |
|
| 126 | + def get_message(self, message_id, params=None): |
| 127 | + """Retrieve the properties and relationships of a message object. |
| 128 | +
|
| 129 | + Args: |
| 130 | + message_id: A dict. |
| 131 | +
|
| 132 | + Returns: |
| 133 | +
|
| 134 | +
|
| 135 | + """ |
| 136 | + return self._get(self.base_url + 'me/messages/' + message_id, params=params) |
| 137 | + |
125 | 138 | def create_subscription(self, change_type, notification_url, resource, expiration_datetime, client_state=None): |
126 | 139 | """Creating a subscription is the first step to start receiving notifications for a resource. |
127 | 140 |
|
@@ -188,7 +201,7 @@ def create_calendar_event( |
188 | 201 | end_timezone, recurrence_type, recurrence_interval, |
189 | 202 | recurrence_days_of_week, recurrence_range_type, |
190 | 203 | recurrence_range_startdate, recurrence_range_enddate, |
191 | | - location, attendees): |
| 204 | + location, attendees, calendar=None): |
192 | 205 | """ |
193 | 206 | TODO: manual testing |
194 | 207 | Create a new calendar event. |
@@ -256,9 +269,9 @@ def create_calendar_event( |
256 | 269 | }, |
257 | 270 | "attendees": attendees_list |
258 | 271 | } |
259 | | - |
| 272 | + url = 'me/calendars/{}/events'.format(calendar) if calendar is not None else 'me/events' |
260 | 273 | try: |
261 | | - response = self._post('me/events', json=body) |
| 274 | + response = self._post(url, json=body) |
262 | 275 | return response |
263 | 276 | except Exception as e: |
264 | 277 | return False |
@@ -373,6 +386,56 @@ def _request(self, method, url, headers=None, **kwargs): |
373 | 386 | return self._parse(requests.request(method, url, headers=_headers, **kwargs)) |
374 | 387 |
|
375 | 388 | def _parse(self, response): |
| 389 | + status_code = response.status_code |
376 | 390 | if 'application/json' in response.headers['Content-Type']: |
377 | | - return response.json() |
378 | | - return response.text |
| 391 | + r = response.json() |
| 392 | + else: |
| 393 | + r = response.text |
| 394 | + if status_code == 200 or status_code == 201: |
| 395 | + return r |
| 396 | + elif status_code == 204: |
| 397 | + return None |
| 398 | + elif status_code == 400: |
| 399 | + raise exceptions.BadRequest(r) |
| 400 | + elif status_code == 401: |
| 401 | + raise exceptions.Unauthorized(r) |
| 402 | + elif status_code == 403: |
| 403 | + raise exceptions.Forbidden(r) |
| 404 | + elif status_code == 404: |
| 405 | + raise exceptions.NotFound(r) |
| 406 | + elif status_code == 405: |
| 407 | + raise exceptions.MethodNotAllowed(r) |
| 408 | + elif status_code == 406: |
| 409 | + raise exceptions.NotAcceptable(r) |
| 410 | + elif status_code == 409: |
| 411 | + raise exceptions.Conflict(r) |
| 412 | + elif status_code == 410: |
| 413 | + raise exceptions.Gone(r) |
| 414 | + elif status_code == 411: |
| 415 | + raise exceptions.LengthRequired(r) |
| 416 | + elif status_code == 412: |
| 417 | + raise exceptions.PreconditionFailed(r) |
| 418 | + elif status_code == 413: |
| 419 | + raise exceptions.RequestEntityTooLarge(r) |
| 420 | + elif status_code == 415: |
| 421 | + raise exceptions.UnsupportedMediaType(r) |
| 422 | + elif status_code == 416: |
| 423 | + raise exceptions.RequestedRangeNotSatisfiable(r) |
| 424 | + elif status_code == 422: |
| 425 | + raise exceptions.UnprocessableEntity(r) |
| 426 | + elif status_code == 429: |
| 427 | + raise exceptions.TooManyRequests(r) |
| 428 | + elif status_code == 500: |
| 429 | + raise exceptions.InternalServerError(r) |
| 430 | + elif status_code == 501: |
| 431 | + raise exceptions.NotImplemented(r) |
| 432 | + elif status_code == 503: |
| 433 | + raise exceptions.ServiceUnavailable(r) |
| 434 | + elif status_code == 504: |
| 435 | + raise exceptions.GatewayTimeout(r) |
| 436 | + elif status_code == 507: |
| 437 | + raise exceptions.InsufficientStorage(r) |
| 438 | + elif status_code == 509: |
| 439 | + raise exceptions.BandwidthLimitExceeded(r) |
| 440 | + else: |
| 441 | + raise exceptions.UnknownError(r) |
0 commit comments