Skip to content

Commit f749700

Browse files
authored
Merge pull request #1813 from weaviate/jose/add_alias_exists
Add support for exists on aliases.
2 parents 6c47ca8 + bdc6481 commit f749700

File tree

4 files changed

+50
-2
lines changed

4 files changed

+50
-2
lines changed

integration/test_alias.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,10 @@ def test_alias_creation_and_deletion(client: weaviate.WeaviateClient, request: S
7878
assert all_alias[alias2].collection == name2
7979

8080
# Delete existing aliases
81-
assert client.alias.delete(alias_name=alias1)
82-
assert client.alias.delete(alias_name=alias2)
81+
if client.alias.exists(alias_name=alias1):
82+
assert client.alias.delete(alias_name=alias1)
83+
if client.alias.exists(alias_name=alias2):
84+
assert client.alias.delete(alias_name=alias2)
8385
all_alias = client.alias.list_all(collection=name2)
8486
all_alias = {
8587
alias[0]: alias[1]
@@ -157,3 +159,25 @@ def test_alias_get(client: weaviate.WeaviateClient, request: SubRequest) -> None
157159
finally:
158160
client.collections.delete(name)
159161
client.alias.delete(alias_name=alias1)
162+
163+
164+
def test_alias_exists(client: weaviate.WeaviateClient, request: SubRequest) -> None:
165+
if client._connection._weaviate_version.is_lower_than(1, 32, 0):
166+
pytest.skip("Aliases are not supported in Weaviate versions < 1.32.0")
167+
168+
name = _sanitize_collection_name(request.node.name)
169+
alias1: str = "Alias" + _sanitize_collection_name(request.node.name)
170+
171+
client.collections.delete(name)
172+
client.alias.delete(alias_name=alias1)
173+
try:
174+
client.collections.create(
175+
name=name, vectorizer_config=wvc.config.Configure.Vectorizer.none()
176+
)
177+
178+
client.alias.create(alias_name=alias1, target_collection=name)
179+
assert client.alias.exists(alias_name=alias1)
180+
finally:
181+
client.collections.delete(name)
182+
client.alias.delete(alias_name=alias1)
183+
assert not client.alias.exists(alias_name=alias1)

weaviate/aliases/async_.pyi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ class _AliasAsync(_AliasExecutor[ConnectionAsync]):
1111
async def create(self, *, alias_name: str, target_collection: str) -> None: ...
1212
async def delete(self, *, alias_name: str) -> bool: ...
1313
async def update(self, *, alias_name: str, new_target_collection: str) -> bool: ...
14+
async def exists(self, *, alias_name: str) -> bool: ...

weaviate/aliases/executor.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,3 +122,25 @@ def resp(res: Response) -> bool:
122122
error="update aliases",
123123
),
124124
)
125+
126+
def exists(self, *, alias_name: str) -> executor.Result[bool]:
127+
"""Use this method to check if an alias exists in the Weaviate instance.
128+
129+
Args:
130+
name: The name of the alias to check.
131+
132+
Returns:
133+
`True` if the alias exists, `False` otherwise.
134+
"""
135+
self._connection._weaviate_version.check_is_at_least_1_32_0("alias")
136+
137+
def resp(res: Response) -> bool:
138+
return res.status_code == 200
139+
140+
return executor.execute(
141+
response_callback=resp,
142+
method=self._connection.get,
143+
path=f"/aliases/{alias_name}",
144+
error_msg="Alias may not exist.",
145+
status_codes=_ExpectedStatusCodes(ok_in=[200, 404], error="alias exists"),
146+
)

weaviate/aliases/sync.pyi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ class _Alias(_AliasExecutor[ConnectionSync]):
1111
def create(self, *, alias_name: str, target_collection: str) -> None: ...
1212
def delete(self, *, alias_name: str) -> bool: ...
1313
def update(self, *, alias_name: str, new_target_collection: str) -> bool: ...
14+
def exists(self, *, alias_name: str) -> bool: ...

0 commit comments

Comments
 (0)