Skip to content

Commit 58a987b

Browse files
author
Samuel Guillemet
committed
👌 IMPROVE: Add support for extra headers in components
1 parent 7283ccc commit 58a987b

6 files changed

Lines changed: 101 additions & 43 deletions

File tree

ms_python_client/api_client.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import logging
2-
from typing import Any, Dict, Mapping, Optional, TypeAlias
2+
from typing import Any, Mapping, Optional, TypeAlias
33

44
from requests import RequestException, Response, Session
55
from requests.adapters import HTTPAdapter
66
from urllib3 import Retry
77

88
logger = logging.getLogger("ms_python_client")
99

10-
_Headers: TypeAlias = Dict[str, str]
10+
_Headers: TypeAlias = Mapping[str, str]
1111
_Data: TypeAlias = Mapping[str, Any]
1212

1313

@@ -30,12 +30,12 @@ def build_headers(self, extra_headers: Optional[_Headers] = None) -> dict:
3030
"""Create the headers for a request appending the ones in the params
3131
3232
Args:
33-
extra_headers (dict): Dict of headers that will be appended to the default ones
33+
extra_headers (dict): Mapping of headers that will be appended to the default ones
3434
3535
Returns:
3636
dict: All the headers
3737
"""
38-
headers: _Headers = {}
38+
headers: dict[str, str] = {}
3939
if extra_headers:
4040
headers.update(extra_headers)
4141
return headers

ms_python_client/components/events/cern_events_component.py

Lines changed: 48 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ def __init__(self, client: MSClientInterface) -> None:
2828
self.events_component = EventsComponent(client)
2929

3030
def list_events(
31-
self, user_id: str, parameters: Optional[Mapping[str, str]] = None
31+
self,
32+
user_id: str,
33+
parameters: Optional[Mapping[str, str]] = None,
34+
extra_headers: Optional[Mapping[str, str]] = None,
3235
) -> dict:
3336
"""List all the events of a user
3437
@@ -39,34 +42,44 @@ def list_events(
3942
Returns:
4043
dict: The response of the request
4144
"""
42-
return self.events_component.list_events(user_id, parameters)
45+
return self.events_component.list_events(user_id, parameters, extra_headers)
4346

44-
def get_event_by_indico_id(self, user_id: str, indico_id: str) -> dict:
47+
def get_event_by_zoom_id(
48+
self,
49+
user_id: str,
50+
zoom_id: str,
51+
extra_headers: Optional[Mapping[str, str]] = None,
52+
) -> dict:
4553
"""Get an event of a user
4654
4755
Args:
48-
indico_id (str): The event id
56+
zoom_id (str): The event id
4957
5058
Returns:
5159
dict: The response of the request
5260
"""
53-
parameters = {"$count": "true", "$filter": f"contains(subject,'{indico_id}')"}
54-
response = self.events_component.list_events(user_id, parameters)
61+
parameters = {"$count": "true", "$filter": f"contains(subject,'{zoom_id}')"}
62+
response = self.events_component.list_events(user_id, parameters, extra_headers)
5563

5664
count = response.get("@odata.count", 0)
5765
if count == 0:
58-
raise NotFoundError(f"Event with indico id {indico_id} not found")
66+
raise NotFoundError(f"Event with zoom id {zoom_id} not found")
5967

6068
if count > 1:
6169
logger.warning(
62-
"Found %s events with indico id %s. Returning the first one.",
70+
"Found %s events with zoom id %s. Returning the first one.",
6371
count,
64-
indico_id,
72+
zoom_id,
6573
)
6674

6775
return response.get("value", [])[0]
6876

69-
def create_event(self, user_id: str, event: EventParameters) -> dict:
77+
def create_event(
78+
self,
79+
user_id: str,
80+
event: EventParameters,
81+
extra_headers: Optional[Mapping[str, str]] = None,
82+
) -> dict:
7083
"""Create an event for a user
7184
7285
Args:
@@ -76,11 +89,14 @@ def create_event(self, user_id: str, event: EventParameters) -> dict:
7689
Returns:
7790
dict: The response of the request
7891
"""
79-
data = create_event_body(event)
80-
return self.events_component.create_event(user_id, data)
81-
82-
def update_event_by_indico_id(
83-
self, user_id: str, event: PartialEventParameters
92+
json = create_event_body(event)
93+
return self.events_component.create_event(user_id, json, extra_headers)
94+
95+
def update_event_by_zoom_id(
96+
self,
97+
user_id: str,
98+
event: PartialEventParameters,
99+
extra_headers: Optional[Mapping[str, str]] = None,
84100
) -> dict:
85101
"""Update an event for a user
86102
@@ -91,19 +107,28 @@ def update_event_by_indico_id(
91107
Returns:
92108
dict: The response of the request
93109
"""
94-
data = create_partial_event_body(event)
95-
event_id = self.get_event_by_indico_id(user_id, event["indico_event_id"])["id"]
96-
return self.events_component.update_event(user_id, event_id, data)
97-
98-
def delete_event_by_indico_id(self, user_id: str, indico_id: str) -> None:
110+
json = create_partial_event_body(event)
111+
event_id = self.get_event_by_zoom_id(user_id, event["zoom_id"], extra_headers)[
112+
"id"
113+
]
114+
return self.events_component.update_event(
115+
user_id, event_id, json, extra_headers
116+
)
117+
118+
def delete_event_by_zoom_id(
119+
self,
120+
user_id: str,
121+
zoom_id: str,
122+
extra_headers: Optional[Mapping[str, str]] = None,
123+
) -> None:
99124
"""Delete an event of a user
100125
101126
Args:
102127
user_id (str): The user id
103-
indico_id (str): The event id
128+
zoom_id (str): The event id
104129
105130
Returns:
106131
dict: The response of the request
107132
"""
108-
event_id = self.get_event_by_indico_id(user_id, indico_id)["id"]
109-
self.events_component.delete_event(user_id, event_id)
133+
event_id = self.get_event_by_zoom_id(user_id, zoom_id, extra_headers)["id"]
134+
self.events_component.delete_event(user_id, event_id, extra_headers)

ms_python_client/components/events/events_component.py

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ def __init__(self, client: MSClientInterface) -> None:
88
self.client = client
99

1010
def list_events(
11-
self, user_id: str, parameters: Optional[Mapping[str, str]] = None
11+
self,
12+
user_id: str,
13+
parameters: Optional[Mapping[str, str]] = None,
14+
extra_headers: Optional[Mapping[str, str]] = None,
1215
) -> dict:
1316
"""List all the events of a user
1417
@@ -19,10 +22,17 @@ def list_events(
1922
dict: The response of the request
2023
"""
2124
api_path = f"/users/{user_id}/calendar/events"
22-
response = self.client.make_get_request(api_path, parameters)
25+
response = self.client.make_get_request(
26+
api_path, parameters, extra_headers=extra_headers
27+
)
2328
return response.json()
2429

25-
def get_event(self, user_id: str, event_id: str) -> dict:
30+
def get_event(
31+
self,
32+
user_id: str,
33+
event_id: str,
34+
extra_headers: Optional[Mapping[str, str]] = None,
35+
) -> dict:
2636
"""Get an event of a user
2737
2838
Args:
@@ -33,10 +43,15 @@ def get_event(self, user_id: str, event_id: str) -> dict:
3343
dict: The response of the request
3444
"""
3545
api_path = f"/users/{user_id}/calendar/events/{event_id}"
36-
response = self.client.make_get_request(api_path)
46+
response = self.client.make_get_request(api_path, extra_headers=extra_headers)
3747
return response.json()
3848

39-
def create_event(self, user_id: str, data: Mapping[str, Any]) -> dict:
49+
def create_event(
50+
self,
51+
user_id: str,
52+
json: Mapping[str, Any],
53+
extra_headers: Optional[Mapping[str, str]] = None,
54+
) -> dict:
4055
"""Create an event for a user
4156
4257
Args:
@@ -47,11 +62,17 @@ def create_event(self, user_id: str, data: Mapping[str, Any]) -> dict:
4762
dict: The response of the request
4863
"""
4964
api_path = f"/users/{user_id}/calendar/events"
50-
response = self.client.make_post_request(api_path, data)
65+
response = self.client.make_post_request(
66+
api_path, json, extra_headers=extra_headers
67+
)
5168
return response.json()
5269

5370
def update_event(
54-
self, user_id: str, event_id: str, data: Mapping[str, Any]
71+
self,
72+
user_id: str,
73+
event_id: str,
74+
json: Mapping[str, Any],
75+
extra_headers: Optional[Mapping[str, str]] = None,
5576
) -> dict:
5677
"""Update an event for a user
5778
@@ -64,10 +85,17 @@ def update_event(
6485
dict: The response of the request
6586
"""
6687
api_path = f"/users/{user_id}/calendar/events/{event_id}"
67-
response = self.client.make_patch_request(api_path, data)
88+
response = self.client.make_patch_request(
89+
api_path, json, extra_headers=extra_headers
90+
)
6891
return response.json()
6992

70-
def delete_event(self, user_id: str, event_id: str) -> None:
93+
def delete_event(
94+
self,
95+
user_id: str,
96+
event_id: str,
97+
extra_headers: Optional[Mapping[str, str]] = None,
98+
) -> None:
7199
"""Delete an event of a user
72100
73101
Args:
@@ -78,4 +106,4 @@ def delete_event(self, user_id: str, event_id: str) -> None:
78106
dict: The response of the request
79107
"""
80108
api_path = f"/users/{user_id}/calendar/events/{event_id}"
81-
self.client.make_delete_request(api_path)
109+
self.client.make_delete_request(api_path, extra_headers=extra_headers)

ms_python_client/components/events/users_component.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,20 @@ class UsersComponent:
77
def __init__(self, client: MSClientInterface) -> None:
88
self.client = client
99

10-
def list_users(self, parameters: Optional[Mapping[str, str]] = None) -> dict:
10+
def list_users(
11+
self,
12+
parameters: Optional[Mapping[str, str]] = None,
13+
extra_headers: Optional[Mapping[str, str]] = None,
14+
) -> dict:
1115
"""List all users
1216
1317
Args:
1418
parameters (Optional[Mapping[str, str]], optional): Parameters for the request. Defaults to None.
19+
extra_headers (Optional[Mapping[str, str]], optional): Additional headers for the request. Defaults to None.
1520
1621
Returns:
1722
dict: The response of the request
1823
"""
1924
api_path = "/users"
20-
response = self.client.make_get_request(api_path, parameters)
25+
response = self.client.make_get_request(api_path, parameters, extra_headers)
2126
return response.json()

ms_python_client/ms_api_client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import atexit
22
import logging
33
import os
4-
from typing import Any, Dict, Mapping, Optional, TypeAlias
4+
from typing import Any, Mapping, Optional, TypeAlias
55

66
import requests
77
from msal import ConfidentialClientApplication, SerializableTokenCache
@@ -16,7 +16,7 @@
1616
logger = logging.getLogger("ms_python_client")
1717

1818
_Data: TypeAlias = Mapping[str, Any]
19-
_Headers: TypeAlias = Dict[str, str]
19+
_Headers: TypeAlias = Mapping[str, str]
2020

2121

2222
class MSApiClient(MSClientInterface):

ms_python_client/ms_client_interface.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import logging
22
from abc import ABC, abstractmethod
3-
from typing import Any, Dict, Mapping, Optional, TypeAlias
3+
from typing import Any, Mapping, Optional, TypeAlias
44

55
import requests
66

77
logger = logging.getLogger("ms_python_client")
88

99
_Data: TypeAlias = Mapping[str, Any]
10-
_Headers: TypeAlias = Dict[str, str]
10+
_Headers: TypeAlias = Mapping[str, str]
1111

1212

1313
class MSClientInterface(ABC):

0 commit comments

Comments
 (0)