Skip to content

Commit 20beb4b

Browse files
authored
Merge pull request #1118 from HardMax71/fix/batch-request-item-relative-url
fix: build BatchRequestItem urls relative to the API version
2 parents fdfb395 + 921d0c8 commit 20beb4b

2 files changed

Lines changed: 33 additions & 11 deletions

File tree

‎src/msgraph_core/requests/batch_request_item.py‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ class StreamInterface(BytesIO):
2121

2222

2323
class BatchRequestItem(Parsable):
24-
API_VERSION_REGEX = re.compile(r'/\/(v1.0|beta)/')
25-
ME_TOKEN_REGEX = re.compile(r'/\/users\/me-token-to-replace/')
24+
API_VERSION_REGEX = re.compile(r'^/(v1\.0|beta)(?=/|$)')
25+
ME_TOKEN_REGEX = re.compile(r'/users/me-token-to-replace')
2626

2727
def __init__(
2828
self,
@@ -47,7 +47,7 @@ def __init__(
4747
self._method = request_information.http_method
4848
self._headers: Optional[dict[str, str]] = request_information.request_headers
4949
self._body = request_information.content
50-
self.url = request_information.url.replace('/users/me-token-to-replace', '/me', 1)
50+
self.set_url(request_information.url)
5151
self._depends_on: Optional[list[str]] = []
5252
if depends_on is not None:
5353
self.set_depends_on(depends_on)
@@ -114,7 +114,7 @@ def set_url(self, url: str) -> None:
114114
f"Error occurred during regex replacement of API version in URL string: {url}"
115115
)
116116

117-
relative_url = relative_url.replace('/users/me-token-to-replace', '/me', 1)
117+
relative_url = re.sub(BatchRequestItem.ME_TOKEN_REGEX, '/me', relative_url, 1)
118118
if not relative_url:
119119
raise ValueError(
120120
f"""Error occurred during regex replacement

‎tests/requests/test_batch_request_item.py‎

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def batch_request_item(request_info):
3232
def test_initialization(batch_request_item, request_info):
3333
assert batch_request_item.id == "123"
3434
assert batch_request_item.method == "GET"
35-
assert batch_request_item.url == base_url
35+
assert batch_request_item.url == "/me"
3636
assert batch_request_item.headers == {"content-type": "application/json"}
3737
assert batch_request_item.body == b'{"key": "value"}'
3838

@@ -43,7 +43,7 @@ def test_create_with_urllib_request():
4343
urllib_request.data = b'{"key": "value"}'
4444
batch_request_item = BatchRequestItem.create_with_urllib_request(urllib_request)
4545
assert batch_request_item.method == "POST"
46-
assert batch_request_item.url == "https://graph.microsoft.com/v1.0/me"
46+
assert batch_request_item.url == "/me"
4747
assert batch_request_item.body == b'{"key": "value"}'
4848

4949

@@ -54,7 +54,29 @@ def test_set_depends_on(batch_request_item):
5454

5555
def test_set_url(batch_request_item):
5656
batch_request_item.set_url("https://graph.microsoft.com/v1.0/me")
57-
assert batch_request_item.url == "/v1.0/me"
57+
assert batch_request_item.url == "/me"
58+
59+
60+
def test_set_url_beta(batch_request_item):
61+
batch_request_item.set_url("https://graph.microsoft.com/beta/me/messages?$top=5#frag")
62+
assert batch_request_item.url == "/me/messages?$top=5#frag"
63+
64+
65+
def test_set_url_already_relative(batch_request_item):
66+
batch_request_item.set_url("/users/u1/messages")
67+
assert batch_request_item.url == "/users/u1/messages"
68+
69+
70+
def test_set_url_keeps_version_like_segments(batch_request_item):
71+
batch_request_item.set_url("https://graph.microsoft.com/v1.0/sites/beta-site/lists")
72+
assert batch_request_item.url == "/sites/beta-site/lists"
73+
74+
75+
def test_set_url_only_strips_a_leading_version(batch_request_item):
76+
batch_request_item.set_url("/sites/beta/lists")
77+
assert batch_request_item.url == "/sites/beta/lists"
78+
batch_request_item.set_url("https://graph.microsoft.com/v1.0/sites/beta/lists")
79+
assert batch_request_item.url == "/sites/beta/lists"
5880

5981

6082
def test_constructor_url_replacement():
@@ -66,7 +88,7 @@ def test_constructor_url_replacement():
6688

6789
batch_request_item = BatchRequestItem(request_info)
6890

69-
assert batch_request_item.url == "https://graph.microsoft.com/v1.0/me"
91+
assert batch_request_item.url == "/me"
7092

7193

7294
def test_set_url_replacement():
@@ -79,7 +101,7 @@ def test_set_url_replacement():
79101
batch_request_item = BatchRequestItem(request_info)
80102
batch_request_item.set_url("https://graph.microsoft.com/v1.0/users/me-token-to-replace")
81103

82-
assert batch_request_item.url == "/v1.0/me"
104+
assert batch_request_item.url == "/me"
83105

84106

85107
def test_constructor_url_replacement_with_query():
@@ -91,7 +113,7 @@ def test_constructor_url_replacement_with_query():
91113

92114
batch_request_item = BatchRequestItem(request_info)
93115

94-
assert batch_request_item.url == "https://graph.microsoft.com/v1.0/me?param=value"
116+
assert batch_request_item.url == "/me?param=value"
95117

96118

97119
def test_id_property(batch_request_item):
@@ -138,7 +160,7 @@ def test_serialize_json(batch_request_item):
138160
content = json.loads(writer.get_serialized_content())
139161
assert content["id"] == "123"
140162
assert content["method"] == "GET"
141-
assert content["url"] == base_url
163+
assert content["url"] == "/me"
142164
assert content["headers"] == {"content-type": "application/json"}
143165
assert content["body"] == {"key": "value"}
144166

0 commit comments

Comments
 (0)