python-msgraph
is a Python wrapper of the Microsoft Graph API.
To install the python-msgraph
library use the following command:
python -m pip install python-msgraph
or, to build locally and install:
The library currently supports connecting to the API using an SSL certificate:
from msgraph import api
authority_host_uri = 'https://login.microsoftonline.com'
tenant = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
resource_uri = 'https://graph.microsoft.com'
client_id = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
client_thumbprint = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
client_certificate = ''
api_instance = api.GraphAPI.from_certificate(authority_host_uri, tenant, resource_uri, client_id, client_certificate, client_thumbprint)
NOTE: When a client_certificate
is changed, the client_thumbprint
and client_id
values must also be changed
You can use the msgraph.user
module to interact with User
instances. User
instanced can be fetched using the msgraph.user.User
class:
from msgraph import user
all_users = user.User.get(api_instance)
To fetch a specific user, you can also include the user's User Principal Name
, which is the user's email address:
johndoe_instance = user.User.get(api_instance, user='johndoe@wm.edu')
Now let's fetch the Calendar
s of a particular user. To interact with a Calendar
, Event
, calendar Group
, or calendar Category
instance, we will use the msgraph.calendar
module:
from msgraph import calendar
johndoe_calendars = calendar.Calendar.get(api_instance, user=johndoe_instance)
Now let's fetch the Event
instances from the main calendar of johndoe
:
calendar_lookup = dict()
for calendar in johndoe_calendars:
calendar_lookup[calendar.name] = calendar
primary_calendar = calendar_lookup['Calendar']
johndoe_events = calendar.Event.get(johndoe_instance, calendar=primary_calendar)
To update an Event
, we can use the Event.update
method:
johndoe_event = johndoe_events[0]
johndoe_event.subject = 'Important meeting'
johndoe_event.update(api_instance)
Now the updates made to the Event
object have been saved back to the calendar
of johndoe
.
Let's try deleting an Event
on a Calendar
using the Event.delete
method:
johndoe_event = johndoe_events[0]
johndoe_event.delete(api_instance)
After calling the delete
method, the Event
has been removed from the calendar
of johndoe
.
To fetch all sites matching a key phrase, use the msgraph.sites.Site.search
method:
from msgraph import sites
matching_sites = sites.Site.search(api_instance, 'software')
Specific msgraph.sites.Site
instances can be fetched using multiple methods:
msgraph.sites.Site.get
method fetches sites by using the ID of the site
site_id = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
site = sites.Site.get(api_instance, site=site_id)
msgraph.sites.Site.by_relative_url
method to fetch by the host name and relative url of the SharePoint site
host_name = ''
relative_url = ''
site = sites.Site.by_relative_url(api_instance, host_name, relative_url)
msgraph.sites.Site.by_group
method fetches the team site of a given group
group_id = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
site = sites.Site.by_group(api_instance, group=group_id)
SharePoint sites can have sub-sites within them. To get the subsites of a Sharepoint site, use the msgraph.sites.Site.subsites
method:
subsites = site.subsites(api_instance)
To traverse the hierarchy of msgraph.sites.Site
instances:
def breadth_first(api, root):
queue = [root]
while queue:
site = queue.pop(0)
subsites = site.subsites(api)
queue += subsites
return queue
breadth_first_hierarchy = breadth_first(api_instance, site)
def depth_first(api, root):
queue = [root]
while queue:
site = queue.pop()
subsites = site.subsites(api)
queue += subsites
return queue
depth_first_hierarchy = breadth_first(api_instance, site)
msgraph.sites.SiteList
instances can be fetched using the msgraph.sites.SiteList.get
method:
site_lists = sites.SiteList.get(api_instance, site)
Or, if you have the ID of the msgraph.sites.SiteList
, you can specify it as a list_instance
keyword argument to fetch the specific msgraph.sites.SiteList
instance:
list_id = 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
site_list = sites.SiteList.get(api_instance, site, list_instance=list_id)
NOTE: All site
method parameters can be substituted with their IDs in the examples above. So the code below would be valid:
site_list = sites.SiteList.get(api_instance, site_id, list_instance=list_id)
To fetch the msgraph.sites.ListItem
instances for a msgraph.sites.SiteList
, use the msgraph.sites.ListItem.get
method:
list_items = sites.ListItem.get(api_instance, site, site_list)
msgraph.sites.ListItem
instances can be updated in Microsoft Graph. To fetch the previous versions, use the msgraph.sites.ListItem.versions
method:
for item in list_items:
previous_versions = item.versions(api_instance, site, site_list)
NOTE: All site
and site_list
method parameters can be substituted with their IDs. So the code below would be valid:
list_items = sites.ListItem.get(api_instance, site_id, list_id)
for item in list_items:
previous_versions = item.versions(api_instance, site_id, list_id)
To create a new msgraph.sites.ListItem
use the msgraph.sites.ListItem.create
method:
new_list_item_fields = dict(Title='Programmer')
new_list_item = sites.ListItem.create(api_instance, site, list, new_list_item_fields)
To update the properties of a msgraph.sites.ListItem
instance, use the msgraph.sites.ListItem.update
method:
for index, item in enumerate(list_items):
item.name = '%s #%i' % (item.name, index)
item.update(api_instance, site, site_list)
To update the fields of a msgraph.sites.ListItem
instance, use the msgraph.sites.ListItem.update_fields
method:
for index, item in enumerate(list_items):
item['Title'] = 'Assistant Executive ' + item['Title']
item.update_fields(api_instance, site, site_list)
or alternatively:
for index, item in enumerate(list_items):
fields = dict(Title='Assistant Executive ' + item['Title'])
item.update_fields(api_instance, site, site_list, fields=fields)
NOTE: All site
and site_list
method parameters can be substituted with their IDs. So the code below would be valid:
for item in list_items:
item['Title'] = 'Assistant Executive ' + item['Title']
item.update_fields(api_instance, site_id, list_id)
To delete an existing msgraph.sites.ListItem
instance, use the msgraph.sites.ListItem.delete
method:
new_list_item.delete(api_instance, site, site_list)
The following modules have their own loggers:
msgraph.api
- Used for logging error messages from the API
and logging raw HTTP
response contentmsgraph.calendar
- Used for logging the creation/update/deletes of msgraph.calendar.Calendar
/msgraph.calendar.Event
/msgraph.calendar.msgraph.calendar.Group
/msgraph.calendar.Category
instancesmsgraph.group
- Used for logging the creation/update/deletes of msgraph.group.Group
instancesmsgraph.site
- Used for logging the creation/update/deletes of msgraph.sites.Site
instances, msgraph.sites.SiteList
instances, and msgraph.sites.ListItem
instancesmsgraph.user
- Used for logging the creation/update/deletes of msgraph.user.User
instances