Skip to content

Commit 17c5712

Browse files
authored
Explicitily fail instead of returning null if cannot parse resource link (#41353)
* explicitly fail if collection id is None * remove unnecessary casting * add test
1 parent 61988c5 commit 17c5712

File tree

4 files changed

+13
-6
lines changed

4 files changed

+13
-6
lines changed

sdk/cosmos/azure-cosmos/azure/cosmos/_base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ def GetHeaders( # pylint: disable=too-many-statements,too-many-branches
346346
return headers
347347

348348

349-
def GetResourceIdOrFullNameFromLink(resource_link: str) -> Optional[str]:
349+
def GetResourceIdOrFullNameFromLink(resource_link: str) -> str:
350350
"""Gets resource id or full name from resource link.
351351
352352
:param str resource_link:
@@ -379,7 +379,7 @@ def GetResourceIdOrFullNameFromLink(resource_link: str) -> Optional[str]:
379379
# request in form
380380
# /[resourceType]/[resourceId]/ .... /[resourceType]/[resourceId]/.
381381
return str(path_parts[-2])
382-
return None
382+
raise ValueError("Failed Parsing ResourceID from link: {0}".format(resource_link))
383383

384384

385385
def GenerateGuidId() -> str:

sdk/cosmos/azure-cosmos/azure/cosmos/_routing/aio/routing_map_provider.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ async def get_overlapping_ranges(self, collection_link, partition_key_ranges, fe
6161
:rtype: list
6262
"""
6363
collection_id = _base.GetResourceIdOrFullNameFromLink(collection_link)
64-
await self.init_collection_routing_map_if_needed(collection_link, str(collection_id), feed_options, **kwargs)
64+
await self.init_collection_routing_map_if_needed(collection_link, collection_id, feed_options, **kwargs)
6565

6666
return self._collection_routing_map_by_item[collection_id].get_overlapping_ranges(partition_key_ranges)
6767

@@ -94,7 +94,7 @@ async def get_range_by_partition_key_range_id(
9494
**kwargs: Dict[str, Any]
9595
) -> Optional[Dict[str, Any]]:
9696
collection_id = _base.GetResourceIdOrFullNameFromLink(collection_link)
97-
await self.init_collection_routing_map_if_needed(collection_link, str(collection_id), **kwargs)
97+
await self.init_collection_routing_map_if_needed(collection_link, collection_id, **kwargs)
9898

9999
return self._collection_routing_map_by_item[collection_id].get_range_by_partition_key_range_id(
100100
partition_key_range_id)

sdk/cosmos/azure-cosmos/azure/cosmos/_routing/routing_map_provider.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def get_overlapping_ranges(self, collection_link, partition_key_ranges, feed_opt
8383
:rtype: list
8484
"""
8585
collection_id = _base.GetResourceIdOrFullNameFromLink(collection_link)
86-
self.init_collection_routing_map_if_needed(collection_link, str(collection_id), feed_options, **kwargs)
86+
self.init_collection_routing_map_if_needed(collection_link, collection_id, feed_options, **kwargs)
8787

8888
return self._collection_routing_map_by_item[collection_id].get_overlapping_ranges(partition_key_ranges)
8989

@@ -94,7 +94,7 @@ def get_range_by_partition_key_range_id(
9494
**kwargs: Dict[str, Any]
9595
) -> Optional[Dict[str, Any]]:
9696
collection_id = _base.GetResourceIdOrFullNameFromLink(collection_link)
97-
self.init_collection_routing_map_if_needed(collection_link, str(collection_id), **kwargs)
97+
self.init_collection_routing_map_if_needed(collection_link, collection_id, **kwargs)
9898

9999
return (self._collection_routing_map_by_item[collection_id]
100100
.get_range_by_partition_key_range_id(partition_key_range_id))

sdk/cosmos/azure-cosmos/tests/test_base_unit.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,10 @@ def test_is_name_based(self):
1616
# This is a database name that ran into 'Incorrect padding'
1717
# exception within base.IsNameBased function
1818
self.assertTrue(base.IsNameBased("dbs/paas_cmr"))
19+
20+
def test_collection_id(self):
21+
# correctly formatted link
22+
assert base.GetResourceIdOrFullNameFromLink("dbs/xjwmAA==/colls/1234") == "1234"
23+
# incorrectly formatted link should raise ValueError
24+
with pytest.raises(ValueError):
25+
base.GetResourceIdOrFullNameFromLink("db/xjwmAA==/coll/")

0 commit comments

Comments
 (0)