Skip to content

Commit cae4b56

Browse files
committed
🚧 ms graph api update
1 parent 86dffec commit cae4b56

File tree

6 files changed

+1684
-46
lines changed

6 files changed

+1684
-46
lines changed

MSDev/MSGraph/.vscode/launch.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
// 使用 IntelliSense 了解相关属性。
3+
// 悬停以查看现有属性的描述。
4+
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
5+
"version": "0.2.0",
6+
"configurations": [
7+
{
8+
"name": "Python 调试程序: 当前文件",
9+
"type": "debugpy",
10+
"request": "launch",
11+
"program": "${file}",
12+
"console": "integratedTerminal",
13+
"env": {
14+
"PYTHONPATH": "${workspaceFolder}"
15+
},
16+
}
17+
]
18+
}

MSDev/MSGraph/calendar/sdk_test.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Code snippets are only available for the latest version. Current version is 1.x
2+
from msgraph.graph_service_client import GraphServiceClient
3+
from msgraph.generated.users.item.calendar_view.calendar_view_request_builder import (
4+
CalendarViewRequestBuilder,
5+
)
6+
from kiota_abstractions.base_request_configuration import RequestConfiguration
7+
import asyncio
8+
9+
10+
# To initialize your graph_client
11+
# Replace this with your actual authentication code
12+
def initialize_graph_client():
13+
# Add your authentication code here
14+
# This is a placeholder
15+
return GraphServiceClient()
16+
17+
18+
async def get_calendar_events():
19+
graph_client = initialize_graph_client()
20+
21+
query_params = (
22+
CalendarViewRequestBuilder.CalendarViewRequestBuilderGetQueryParameters(
23+
start_date_time="2025-05-27T06:49:20.540Z",
24+
end_date_time="2025-06-03T06:49:20.540Z",
25+
)
26+
)
27+
28+
request_configuration = RequestConfiguration(
29+
query_parameters=query_params,
30+
)
31+
32+
result = await graph_client.me.calendar_view.get(
33+
request_configuration=request_configuration
34+
)
35+
return result
36+
37+
38+
# Run the async function
39+
if __name__ == "__main__":
40+
result = asyncio.run(get_calendar_events())
41+
print(result)

MSDev/MSGraph/graph.py

Lines changed: 37 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,72 +4,88 @@
44
# <UserAuthConfigSnippet>
55
from configparser import SectionProxy
66
from azure.identity import DeviceCodeCredential
7-
from msgraph import GraphServiceClient
8-
from msgraph.generated.users.item.user_item_request_builder import UserItemRequestBuilder
7+
from msgraph.graph_service_client import GraphServiceClient
8+
from msgraph.generated.users.item.user_item_request_builder import (
9+
UserItemRequestBuilder,
10+
)
911
from msgraph.generated.users.item.mail_folders.item.messages.messages_request_builder import (
10-
MessagesRequestBuilder)
12+
MessagesRequestBuilder,
13+
)
1114
from msgraph.generated.users.item.send_mail.send_mail_post_request_body import (
12-
SendMailPostRequestBody)
15+
SendMailPostRequestBody,
16+
)
1317
from msgraph.generated.models.message import Message
1418
from msgraph.generated.models.item_body import ItemBody
1519
from msgraph.generated.models.body_type import BodyType
1620
from msgraph.generated.models.recipient import Recipient
1721
from msgraph.generated.models.email_address import EmailAddress
1822

23+
1924
class Graph:
2025
settings: SectionProxy
2126
device_code_credential: DeviceCodeCredential
2227
user_client: GraphServiceClient
2328

2429
def __init__(self, config: SectionProxy):
2530
self.settings = config
26-
client_id = self.settings['clientId']
27-
tenant_id = self.settings['tenantId']
28-
graph_scopes = self.settings['graphUserScopes'].split(' ')
31+
client_id = self.settings["clientId"]
32+
tenant_id = self.settings["tenantId"]
33+
graph_scopes = self.settings["graphUserScopes"].split(" ")
2934

30-
self.device_code_credential = DeviceCodeCredential(client_id, tenant_id = tenant_id)
35+
self.device_code_credential = DeviceCodeCredential(
36+
client_id, tenant_id=tenant_id
37+
)
3138
self.user_client = GraphServiceClient(self.device_code_credential, graph_scopes)
32-
# </UserAuthConfigSnippet>
39+
40+
# </UserAuthConfigSnippet>
3341

3442
# <GetUserTokenSnippet>
3543
async def get_user_token(self):
36-
graph_scopes = self.settings['graphUserScopes']
44+
graph_scopes = self.settings["graphUserScopes"]
3745
access_token = self.device_code_credential.get_token(graph_scopes)
3846
return access_token.token
47+
3948
# </GetUserTokenSnippet>
4049

4150
# <GetUserSnippet>
4251
async def get_user(self):
4352
# Only request specific properties using $select
4453
query_params = UserItemRequestBuilder.UserItemRequestBuilderGetQueryParameters(
45-
select=['displayName', 'mail', 'userPrincipalName']
54+
select=["displayName", "mail", "userPrincipalName"]
4655
)
4756

48-
request_config = UserItemRequestBuilder.UserItemRequestBuilderGetRequestConfiguration(
49-
query_parameters=query_params
57+
request_config = (
58+
UserItemRequestBuilder.UserItemRequestBuilderGetRequestConfiguration(
59+
query_parameters=query_params
60+
)
5061
)
5162

5263
user = await self.user_client.me.get(request_configuration=request_config)
5364
return user
65+
5466
# </GetUserSnippet>
5567

5668
# <GetInboxSnippet>
5769
async def get_inbox(self):
5870
query_params = MessagesRequestBuilder.MessagesRequestBuilderGetQueryParameters(
5971
# Only request specific properties
60-
select=['from', 'isRead', 'receivedDateTime', 'subject'],
72+
select=["from", "isRead", "receivedDateTime", "subject"],
6173
# Get at most 25 results
6274
top=25,
6375
# Sort by received time, newest first
64-
orderby=['receivedDateTime DESC']
76+
orderby=["receivedDateTime DESC"],
6577
)
66-
request_config = MessagesRequestBuilder.MessagesRequestBuilderGetRequestConfiguration(
67-
query_parameters= query_params
78+
request_config = (
79+
MessagesRequestBuilder.MessagesRequestBuilderGetRequestConfiguration(
80+
query_parameters=query_params
81+
)
6882
)
6983

70-
messages = await self.user_client.me.mail_folders.by_mail_folder_id('inbox').messages.get(
71-
request_configuration=request_config)
84+
messages = await self.user_client.me.mail_folders.by_mail_folder_id(
85+
"inbox"
86+
).messages.get(request_configuration=request_config)
7287
return messages
88+
7389
# </GetInboxSnippet>
7490

7591
# <SendMailSnippet>
@@ -91,10 +107,12 @@ async def send_mail(self, subject: str, body: str, recipient: str):
91107
request_body.message = message
92108

93109
await self.user_client.me.send_mail.post(body=request_body)
110+
94111
# </SendMailSnippet>
95112

96113
# <MakeGraphCallSnippet>
97114
async def make_graph_call(self):
98115
# INSERT YOUR CODE HERE
99116
return
117+
100118
# </MakeGraphCallSnippet>

MSDev/MSGraph/main.py

Lines changed: 44 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@
77
from msgraph.generated.models.o_data_errors.o_data_error import ODataError
88
from graph import Graph
99

10+
1011
async def main():
11-
print('Python Graph Tutorial\n')
12+
print("Python Graph Tutorial\n")
1213

1314
# Load settings
1415
config = configparser.ConfigParser()
15-
config.read(['config.cfg', 'config.dev.cfg'])
16-
azure_settings = config['azure']
16+
config.read(["config.cfg", "config.dev.cfg"])
17+
azure_settings = config["azure"]
1718

1819
graph: Graph = Graph(azure_settings)
1920

@@ -22,12 +23,12 @@ async def main():
2223
choice = -1
2324

2425
while choice != 0:
25-
print('Please choose one of the following options:')
26-
print('0. Exit')
27-
print('1. Display access token')
28-
print('2. List my inbox')
29-
print('3. Send mail')
30-
print('4. Make a Graph call')
26+
print("Please choose one of the following options:")
27+
print("0. Exit")
28+
print("1. Display access token")
29+
print("2. List my inbox")
30+
print("3. Send mail")
31+
print("4. Make a Graph call")
3132

3233
try:
3334
choice = int(input())
@@ -36,7 +37,7 @@ async def main():
3637

3738
try:
3839
if choice == 0:
39-
print('Goodbye...')
40+
print("Goodbye...")
4041
elif choice == 1:
4142
await display_access_token(graph)
4243
elif choice == 2:
@@ -46,51 +47,60 @@ async def main():
4647
elif choice == 4:
4748
await make_graph_call(graph)
4849
else:
49-
print('Invalid choice!\n')
50+
print("Invalid choice!\n")
5051
except ODataError as odata_error:
51-
print('Error:')
52+
print("Error:")
5253
if odata_error.error:
5354
print(odata_error.error.code, odata_error.error.message)
55+
56+
5457
# </ProgramSnippet>
5558

59+
5660
# <GreetUserSnippet>
5761
async def greet_user(graph: Graph):
5862
user = await graph.get_user()
5963
if user:
60-
print('Hello,', user.display_name)
64+
print("Hello,", user.display_name)
6165
# For Work/school accounts, email is in mail property
6266
# Personal accounts, email is in userPrincipalName
63-
print('Email:', user.mail or user.user_principal_name, '\n')
67+
print("Email:", user.mail or user.user_principal_name, "\n")
68+
69+
6470
# </GreetUserSnippet>
6571

72+
6673
# <DisplayAccessTokenSnippet>
6774
async def display_access_token(graph: Graph):
6875
token = await graph.get_user_token()
69-
print('User token:', token, '\n')
76+
print("User token:", token, "\n")
77+
78+
7079
# </DisplayAccessTokenSnippet>
7180

81+
7282
# <ListInboxSnippet>
7383
async def list_inbox(graph: Graph):
7484
message_page = await graph.get_inbox()
7585
if message_page and message_page.value:
7686
# Output each message's details
7787
for message in message_page.value:
78-
print('Message:', message.subject)
79-
if (
80-
message.from_ and
81-
message.from_.email_address
82-
):
83-
print(' From:', message.from_.email_address.name or 'NONE')
88+
print("Message:", message.subject)
89+
if message.from_ and message.from_.email_address:
90+
print(" From:", message.from_.email_address.name or "NONE")
8491
else:
85-
print(' From: NONE')
86-
print(' Status:', 'Read' if message.is_read else 'Unread')
87-
print(' Received:', message.received_date_time)
92+
print(" From: NONE")
93+
print(" Status:", "Read" if message.is_read else "Unread")
94+
print(" Received:", message.received_date_time)
8895

8996
# If @odata.nextLink is present
9097
more_available = message_page.odata_next_link is not None
91-
print('\nMore messages available?', more_available, '\n')
98+
print("\nMore messages available?", more_available, "\n")
99+
100+
92101
# </ListInboxSnippet>
93102

103+
94104
# <SendMailSnippet>
95105
async def send_mail(graph: Graph):
96106
# Send mail to the signed-in user
@@ -99,13 +109,20 @@ async def send_mail(graph: Graph):
99109
if user:
100110
user_email = user.mail or user.user_principal_name
101111

102-
await graph.send_mail('Testing Microsoft Graph', 'Hello world!', user_email or '')
103-
print('Mail sent.\n')
112+
await graph.send_mail(
113+
"Testing Microsoft Graph", "Hello world!", user_email or ""
114+
)
115+
print("Mail sent.\n")
116+
117+
104118
# </SendMailSnippet>
105119

120+
106121
# <MakeGraphCallSnippet>
107122
async def make_graph_call(graph: Graph):
108123
await graph.make_graph_call()
124+
125+
109126
# </MakeGraphCallSnippet>
110127

111128
# Run main

0 commit comments

Comments
 (0)