Skip to content

Commit 26ee7db

Browse files
committed
feat: support aliases
1 parent b9765b2 commit 26ee7db

11 files changed

Lines changed: 245 additions & 1 deletion

File tree

src/it/java/io/weaviate/containers/Weaviate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
public class Weaviate extends WeaviateContainer {
1515
private WeaviateClient clientInstance;
1616

17-
public static final String VERSION = "1.29.1";
17+
public static final String VERSION = "1.32.2";
1818
public static final String DOCKER_IMAGE = "semitechnologies/weaviate";
1919

2020
/**
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package io.weaviate.integration;
2+
3+
import java.io.IOException;
4+
import java.util.List;
5+
6+
import org.assertj.core.api.Assertions;
7+
import org.junit.Test;
8+
9+
import io.weaviate.ConcurrentTest;
10+
import io.weaviate.client6.v1.api.WeaviateClient;
11+
import io.weaviate.client6.v1.api.alias.Alias;
12+
import io.weaviate.containers.Container;
13+
14+
public class AliasITest extends ConcurrentTest {
15+
private static WeaviateClient client = Container.WEAVIATE.getClient();
16+
17+
@Test
18+
public void test_aliasLifecycle() throws IOException {
19+
// Arrange
20+
var nsPaulHewson = ns("PaulHewson");
21+
var nsGeorgeBarnes = ns("GeorgeBarnes");
22+
var nsColsonBaker = ns("ColsonBaker");
23+
24+
for (var collection : List.of(nsPaulHewson, nsGeorgeBarnes, nsColsonBaker)) {
25+
client.collections.create(collection);
26+
}
27+
28+
// Act: create aliases
29+
client.alias.create(nsPaulHewson, "Bono");
30+
client.alias.create(nsGeorgeBarnes, "MachineGunKelly");
31+
32+
// Assert: list all
33+
var aliases = client.alias.list();
34+
Assertions.assertThat(aliases).hasSize(2);
35+
Assertions.assertThat(aliases)
36+
.as("created Bono and MachineGunKelly aliases")
37+
.contains(
38+
new Alias(nsPaulHewson, "Bono"),
39+
new Alias(nsGeorgeBarnes, "MachineGunKelly"));
40+
41+
// Act: update aliases
42+
client.alias.update("MachineGunKelly", nsColsonBaker);
43+
44+
// Assert: check MGK points to another collection
45+
var mgk = client.alias.get("MachineGunKelly");
46+
Assertions.assertThat(mgk).get()
47+
.as("updated MachineGunKelly alias")
48+
.returns(nsColsonBaker, Alias::collection);
49+
50+
// Act: delete Bono alias
51+
client.alias.delete("Bono");
52+
53+
// Assert
54+
var paulHewsonAliases = client.alias.list(all -> all.collection(nsPaulHewson));
55+
Assertions.assertThat(paulHewsonAliases)
56+
.as("no aliases once Bono is deleted")
57+
.isEmpty();
58+
}
59+
}

src/main/java/io/weaviate/client6/v1/api/WeaviateClient.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.io.IOException;
55
import java.util.function.Function;
66

7+
import io.weaviate.client6.v1.api.alias.WeaviateAliasClient;
78
import io.weaviate.client6.v1.api.collections.WeaviateCollectionsClient;
89
import io.weaviate.client6.v1.internal.ObjectBuilder;
910
import io.weaviate.client6.v1.internal.grpc.DefaultGrpcTransport;
@@ -19,12 +20,14 @@ public class WeaviateClient implements Closeable {
1920
private final GrpcTransport grpcTransport;
2021

2122
public final WeaviateCollectionsClient collections;
23+
public final WeaviateAliasClient alias;
2224

2325
public WeaviateClient(Config config) {
2426
this.config = config;
2527
this.restTransport = new DefaultRestTransport(config.restTransportOptions());
2628
this.grpcTransport = new DefaultGrpcTransport(config.grpcTransportOptions());
2729

30+
this.alias = new WeaviateAliasClient(restTransport);
2831
this.collections = new WeaviateCollectionsClient(restTransport, grpcTransport);
2932
}
3033

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package io.weaviate.client6.v1.api.alias;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
5+
public record Alias(@SerializedName("class") String collection, @SerializedName("alias") String alias) {
6+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.weaviate.client6.v1.api.alias;
2+
3+
import java.util.Collections;
4+
5+
import io.weaviate.client6.v1.internal.json.JSON;
6+
import io.weaviate.client6.v1.internal.rest.Endpoint;
7+
import io.weaviate.client6.v1.internal.rest.SimpleEndpoint;
8+
9+
public record CreateAliasRequest(Alias alias) {
10+
public final static Endpoint<CreateAliasRequest, Void> _ENDPOINT = SimpleEndpoint.sideEffect(
11+
__ -> "POST",
12+
__ -> "/aliases/",
13+
__ -> Collections.emptyMap(),
14+
request -> JSON.serialize(request.alias));
15+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package io.weaviate.client6.v1.api.alias;
2+
3+
import java.util.Collections;
4+
5+
import io.weaviate.client6.v1.internal.rest.Endpoint;
6+
import io.weaviate.client6.v1.internal.rest.SimpleEndpoint;
7+
8+
public record DeleteAliasRequest(String alias) {
9+
public final static Endpoint<DeleteAliasRequest, Void> _ENDPOINT = SimpleEndpoint.sideEffect(
10+
__ -> "DELETE",
11+
request -> "/aliases/" + request.alias,
12+
__ -> Collections.emptyMap());
13+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package io.weaviate.client6.v1.api.alias;
2+
3+
import java.util.Collections;
4+
import java.util.Optional;
5+
6+
import io.weaviate.client6.v1.internal.json.JSON;
7+
import io.weaviate.client6.v1.internal.rest.Endpoint;
8+
import io.weaviate.client6.v1.internal.rest.OptionalEndpoint;
9+
10+
public record GetAliasRequest(String alias) {
11+
public final static Endpoint<GetAliasRequest, Optional<Alias>> _ENDPOINT = OptionalEndpoint.noBodyOptional(
12+
__ -> "GET",
13+
request -> "/aliases/" + request.alias,
14+
__ -> Collections.emptyMap(),
15+
(statusCode, response) -> JSON.deserialize(response, Alias.class));
16+
17+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package io.weaviate.client6.v1.api.alias;
2+
3+
import java.util.Collections;
4+
import java.util.List;
5+
import java.util.Map;
6+
import java.util.function.Function;
7+
8+
import io.weaviate.client6.v1.internal.ObjectBuilder;
9+
import io.weaviate.client6.v1.internal.json.JSON;
10+
import io.weaviate.client6.v1.internal.rest.Endpoint;
11+
import io.weaviate.client6.v1.internal.rest.SimpleEndpoint;
12+
13+
public record ListAliasRequest(String collection) {
14+
public final static Endpoint<ListAliasRequest, List<Alias>> _ENDPOINT = SimpleEndpoint.noBody(
15+
__ -> "GET",
16+
__ -> "/aliases",
17+
request -> request.collection != null
18+
? Map.of("class", request.collection)
19+
: Collections.emptyMap(),
20+
(statusCode, response) -> JSON.deserialize(response, ListAliasResponse.class).aliases());
21+
22+
public static ListAliasRequest of() {
23+
return of(ObjectBuilder.identity());
24+
}
25+
26+
public static ListAliasRequest of(Function<Builder, ObjectBuilder<ListAliasRequest>> fn) {
27+
return fn.apply(new Builder()).build();
28+
}
29+
30+
public ListAliasRequest(Builder builder) {
31+
this(builder.collection);
32+
}
33+
34+
public static class Builder implements ObjectBuilder<ListAliasRequest> {
35+
private String collection;
36+
37+
public Builder collection(String collection) {
38+
this.collection = collection;
39+
return this;
40+
}
41+
42+
@Override
43+
public ListAliasRequest build() {
44+
return new ListAliasRequest(this);
45+
}
46+
}
47+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package io.weaviate.client6.v1.api.alias;
2+
3+
import java.util.List;
4+
5+
import com.google.gson.annotations.SerializedName;
6+
7+
public record ListAliasResponse(@SerializedName("aliases") List<Alias> aliases) {
8+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package io.weaviate.client6.v1.api.alias;
2+
3+
import java.util.Collections;
4+
5+
import com.google.gson.annotations.SerializedName;
6+
7+
import io.weaviate.client6.v1.internal.json.JSON;
8+
import io.weaviate.client6.v1.internal.rest.Endpoint;
9+
import io.weaviate.client6.v1.internal.rest.SimpleEndpoint;
10+
11+
public record UpdateAliasRequest(String alias, String newTargetCollection) {
12+
public final static Endpoint<UpdateAliasRequest, Void> _ENDPOINT = SimpleEndpoint.sideEffect(
13+
__ -> "PUT",
14+
request -> "/aliases/" + request.alias,
15+
__ -> Collections.emptyMap(),
16+
request -> JSON.serialize(request.toRequestBody()));
17+
18+
private RequestBody toRequestBody() {
19+
return new RequestBody();
20+
}
21+
22+
private class RequestBody {
23+
@SerializedName("class")
24+
private final String collection = UpdateAliasRequest.this.newTargetCollection;
25+
}
26+
}

0 commit comments

Comments
 (0)