Skip to content

Commit d5a434e

Browse files
author
Yordy Gelvez
committed
2 parents ff801fe + 92dbf00 commit d5a434e

File tree

2 files changed

+158
-5
lines changed

2 files changed

+158
-5
lines changed

microsoftgraph/client.py

Lines changed: 68 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import base64
22
import mimetypes
33
import requests
4+
from microsoftgraph import exceptions
45
from urllib.parse import urlencode, urlparse
56

67

@@ -122,6 +123,18 @@ def get_me(self, params=None):
122123
"""
123124
return self._get(self.base_url + 'me', params=params)
124125

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+
125138
def create_subscription(self, change_type, notification_url, resource, expiration_datetime, client_state=None):
126139
"""Creating a subscription is the first step to start receiving notifications for a resource.
127140
@@ -188,7 +201,7 @@ def create_calendar_event(
188201
end_timezone, recurrence_type, recurrence_interval,
189202
recurrence_days_of_week, recurrence_range_type,
190203
recurrence_range_startdate, recurrence_range_enddate,
191-
location, attendees):
204+
location, attendees, calendar=None):
192205
"""
193206
TODO: manual testing
194207
Create a new calendar event.
@@ -256,9 +269,9 @@ def create_calendar_event(
256269
},
257270
"attendees": attendees_list
258271
}
259-
272+
url = 'me/calendars/{}/events'.format(calendar) if calendar is not None else 'me/events'
260273
try:
261-
response = self._post('me/events', json=body)
274+
response = self._post(url, json=body)
262275
return response
263276
except Exception as e:
264277
return False
@@ -373,6 +386,56 @@ def _request(self, method, url, headers=None, **kwargs):
373386
return self._parse(requests.request(method, url, headers=_headers, **kwargs))
374387

375388
def _parse(self, response):
389+
status_code = response.status_code
376390
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)

microsoftgraph/exceptions.py

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
class BaseError(Exception):
2+
pass
3+
4+
5+
class UnknownError(BaseError):
6+
pass
7+
8+
9+
class BadRequest(BaseError):
10+
pass
11+
12+
13+
class Unauthorized(BaseError):
14+
pass
15+
16+
17+
class Forbidden(BaseError):
18+
pass
19+
20+
21+
class NotFound(BaseError):
22+
pass
23+
24+
25+
class MethodNotAllowed(BaseError):
26+
pass
27+
28+
29+
class NotAcceptable(BaseError):
30+
pass
31+
32+
33+
class Conflict(BaseError):
34+
pass
35+
36+
37+
class Gone(BaseError):
38+
pass
39+
40+
41+
class LengthRequired(BaseError):
42+
pass
43+
44+
45+
class PreconditionFailed(BaseError):
46+
pass
47+
48+
49+
class RequestEntityTooLarge(BaseError):
50+
pass
51+
52+
53+
class UnsupportedMediaType(BaseError):
54+
pass
55+
56+
57+
class RequestedRangeNotSatisfiable(BaseError):
58+
pass
59+
60+
61+
class UnprocessableEntity(BaseError):
62+
pass
63+
64+
65+
class TooManyRequests(BaseError):
66+
pass
67+
68+
69+
class InternalServerError(BaseError):
70+
pass
71+
72+
73+
class NotImplemented(BaseError):
74+
pass
75+
76+
77+
class ServiceUnavailable(BaseError):
78+
pass
79+
80+
81+
class GatewayTimeout(BaseError):
82+
pass
83+
84+
85+
class InsufficientStorage(BaseError):
86+
pass
87+
88+
89+
class BandwidthLimitExceeded(BaseError):
90+
pass

0 commit comments

Comments
 (0)